@jaimevalasek/aioson 1.7.2 → 1.8.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 (362) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +153 -10
  3. package/docs/en/cli-reference.md +56 -1
  4. package/docs/en/i18n.md +18 -18
  5. package/docs/en/schemas/index.json +10 -0
  6. package/docs/en/schemas/parallel-assign.schema.json +9 -0
  7. package/docs/en/schemas/parallel-doctor.schema.json +36 -0
  8. package/docs/en/schemas/parallel-guard.schema.json +63 -0
  9. package/docs/en/schemas/parallel-merge.schema.json +84 -0
  10. package/docs/en/schemas/parallel-status.schema.json +91 -1
  11. package/docs/integrations/apps-publish-marketplace.md +94 -0
  12. package/docs/pt/README.md +9 -0
  13. package/docs/pt/agentes.md +324 -3
  14. package/docs/pt/clientes-ai.md +7 -3
  15. package/docs/pt/comandos-cli.md +160 -13
  16. package/docs/pt/compress-agents.md +304 -0
  17. package/docs/pt/design-docs-governance.md +59 -0
  18. package/docs/pt/feature-archive.md +191 -0
  19. package/docs/pt/genome-3.0-spec.md +115 -4
  20. package/docs/pt/genome-distribution.md +232 -0
  21. package/docs/pt/inicio-rapido.md +1 -0
  22. package/docs/pt/motor-hardening.md +492 -0
  23. package/docs/pt/runner-system.md +113 -0
  24. package/package.json +2 -1
  25. package/src/agent-manifests.js +66 -0
  26. package/src/agents.js +27 -7
  27. package/src/autonomy-policy.js +139 -0
  28. package/src/brain-query.js +161 -0
  29. package/src/cli.js +1377 -1099
  30. package/src/commands/agents.js +102 -7
  31. package/src/commands/artifact-validate.js +33 -4
  32. package/src/commands/auth.js +272 -0
  33. package/src/commands/brain-query.js +44 -0
  34. package/src/commands/briefing.js +344 -0
  35. package/src/commands/commit-prepare.js +547 -0
  36. package/src/commands/compress-agents.js +416 -0
  37. package/src/commands/context-health.js +4 -2
  38. package/src/commands/context-trim.js +17 -11
  39. package/src/commands/design-hybrid-options.js +3 -3
  40. package/src/commands/devlog-process.js +6 -4
  41. package/src/commands/dossier.js +423 -0
  42. package/src/commands/feature-archive.js +513 -0
  43. package/src/commands/feature-close.js +123 -18
  44. package/src/commands/gate-approve.js +198 -0
  45. package/src/commands/gate-check.js +24 -5
  46. package/src/commands/genome-doctor.js +166 -9
  47. package/src/commands/git-guard.js +170 -0
  48. package/src/commands/harness.js +121 -0
  49. package/src/commands/implementation-plan.js +47 -20
  50. package/src/commands/init.js +6 -2
  51. package/src/commands/install.js +6 -2
  52. package/src/commands/live.js +497 -56
  53. package/src/commands/locale-apply.js +9 -6
  54. package/src/commands/locale-diff.js +11 -112
  55. package/src/commands/mcp-doctor.js +2 -1
  56. package/src/commands/mcp-init.js +4 -10
  57. package/src/commands/memory.js +234 -0
  58. package/src/commands/parallel-assign.js +107 -27
  59. package/src/commands/parallel-doctor.js +416 -3
  60. package/src/commands/parallel-guard.js +241 -0
  61. package/src/commands/parallel-init.js +66 -4
  62. package/src/commands/parallel-merge.js +299 -0
  63. package/src/commands/parallel-status.js +147 -3
  64. package/src/commands/preflight.js +63 -4
  65. package/src/commands/qa-init.js +10 -5
  66. package/src/commands/revision.js +235 -0
  67. package/src/commands/scaffold-complete.js +188 -0
  68. package/src/commands/security-audit.js +275 -0
  69. package/src/commands/security-scan.js +376 -0
  70. package/src/commands/self-implement-loop.js +46 -2
  71. package/src/commands/setup-context.js +11 -10
  72. package/src/commands/squad-agent-create.js +51 -9
  73. package/src/commands/squad-investigate.js +53 -0
  74. package/src/commands/squad-plan.js +33 -1
  75. package/src/commands/squad-scaffold.js +4 -3
  76. package/src/commands/squad-score.js +71 -14
  77. package/src/commands/squad-status.js +22 -1
  78. package/src/commands/squad-validate.js +93 -2
  79. package/src/commands/store-genome.js +304 -0
  80. package/src/commands/store-skill.js +247 -0
  81. package/src/commands/store-squad.js +431 -0
  82. package/src/commands/store-system.js +392 -0
  83. package/src/commands/tool-capabilities.js +63 -0
  84. package/src/commands/update.js +3 -3
  85. package/src/commands/verify-gate.js +40 -0
  86. package/src/commands/workflow-execute.js +644 -155
  87. package/src/commands/workflow-harden.js +231 -0
  88. package/src/commands/workflow-heal.js +136 -0
  89. package/src/commands/workflow-next.js +460 -22
  90. package/src/commands/workflow-status.js +328 -138
  91. package/src/commands/workspace.js +144 -0
  92. package/src/constants.js +42 -75
  93. package/src/context-memory.js +133 -4
  94. package/src/context-writer.js +2 -1
  95. package/src/context.js +32 -2
  96. package/src/doctor.js +46 -6
  97. package/src/dossier/codemap-store.js +267 -0
  98. package/src/dossier/dossier-bootstrap.js +222 -0
  99. package/src/dossier/dossier-compact.js +159 -0
  100. package/src/dossier/lock.js +128 -0
  101. package/src/dossier/revision-store.js +313 -0
  102. package/src/dossier/schema.js +155 -0
  103. package/src/dossier/store.js +400 -0
  104. package/src/execution-gateway.js +3 -0
  105. package/src/friction-scanner.js +202 -0
  106. package/src/genome-schema.js +24 -1
  107. package/src/genomes.js +33 -0
  108. package/src/handoff-contract.js +363 -0
  109. package/src/handoff-validator.js +45 -0
  110. package/src/harness/circuit-breaker.js +135 -0
  111. package/src/i18n/messages/en.js +317 -22
  112. package/src/i18n/messages/es.js +259 -18
  113. package/src/i18n/messages/fr.js +260 -18
  114. package/src/i18n/messages/pt-BR.js +313 -22
  115. package/src/install-profile.js +0 -16
  116. package/src/installer.js +70 -6
  117. package/src/lib/git-commit-guard.js +691 -0
  118. package/src/lib/security/artifact-reader.js +167 -0
  119. package/src/lib/security/exit-codes.js +51 -0
  120. package/src/lib/security/findings-writer.js +176 -0
  121. package/src/lib/security/runtime-events.js +77 -0
  122. package/src/lib/security/secrets-regex.js +115 -0
  123. package/src/lib/store/security-scan.js +173 -0
  124. package/src/lib/terminal-checkbox.js +130 -0
  125. package/src/lib/tmux-launcher.js +163 -0
  126. package/src/lib/tool-capabilities.js +102 -0
  127. package/src/locales.js +12 -8
  128. package/src/parallel-workspace.js +756 -0
  129. package/src/parser.js +8 -1
  130. package/src/path-guard.js +47 -0
  131. package/src/preflight-engine.js +237 -26
  132. package/src/self-healing.js +142 -0
  133. package/src/session-handoff.js +111 -1
  134. package/src/squad/squad-scaffold.js +183 -19
  135. package/src/test-briefing.js +226 -0
  136. package/src/updater.js +1 -1
  137. package/src/utils.js +3 -0
  138. package/src/workflow-gates.js +185 -0
  139. package/template/.aioson/agents/analyst.md +76 -130
  140. package/template/.aioson/agents/architect.md +53 -86
  141. package/template/.aioson/agents/committer.md +161 -0
  142. package/template/.aioson/agents/cypher.md +252 -0
  143. package/template/.aioson/agents/dev.md +112 -628
  144. package/template/.aioson/agents/deyvin.md +33 -236
  145. package/template/.aioson/agents/discover.md +235 -0
  146. package/template/.aioson/agents/discovery-design-doc.md +17 -252
  147. package/template/.aioson/agents/genome.md +76 -26
  148. package/template/.aioson/agents/manifests/analyst.manifest.json +26 -0
  149. package/template/.aioson/agents/manifests/architect.manifest.json +23 -0
  150. package/template/.aioson/agents/manifests/committer.manifest.json +23 -0
  151. package/template/.aioson/agents/manifests/dev.manifest.json +37 -0
  152. package/template/.aioson/agents/manifests/orchestrator.manifest.json +30 -0
  153. package/template/.aioson/agents/manifests/pentester.manifest.json +39 -0
  154. package/template/.aioson/agents/manifests/pm.manifest.json +26 -0
  155. package/template/.aioson/agents/manifests/product.manifest.json +23 -0
  156. package/template/.aioson/agents/manifests/qa.manifest.json +25 -0
  157. package/template/.aioson/agents/manifests/setup.manifest.json +20 -0
  158. package/template/.aioson/agents/manifests/ux-ui.manifest.json +24 -0
  159. package/template/.aioson/agents/neo.md +5 -7
  160. package/template/.aioson/agents/orache.md +2 -6
  161. package/template/.aioson/agents/orchestrator.md +81 -182
  162. package/template/.aioson/agents/pentester.md +235 -0
  163. package/template/.aioson/agents/pm.md +40 -104
  164. package/template/.aioson/agents/product.md +99 -344
  165. package/template/.aioson/agents/profiler-enricher.md +57 -6
  166. package/template/.aioson/agents/profiler-forge.md +17 -7
  167. package/template/.aioson/agents/profiler-researcher.md +29 -6
  168. package/template/.aioson/agents/qa.md +168 -514
  169. package/template/.aioson/agents/setup.md +52 -278
  170. package/template/.aioson/agents/sheldon.md +122 -754
  171. package/template/.aioson/agents/site-forge.md +111 -1583
  172. package/template/.aioson/agents/squad.md +139 -2010
  173. package/template/.aioson/agents/tester.md +10 -0
  174. package/template/.aioson/agents/ux-ui.md +104 -812
  175. package/template/.aioson/agents/validator.md +69 -0
  176. package/template/.aioson/brains/scripts/query.js +5 -1
  177. package/template/.aioson/config/autonomy-protocol.json +43 -0
  178. package/template/.aioson/config.md +43 -15
  179. package/template/.aioson/constitution.md +36 -33
  180. package/template/.aioson/context/design-doc.md +136 -0
  181. package/template/.aioson/context/project-map.md +57 -0
  182. package/template/.aioson/design-docs/code-reuse.md +48 -0
  183. package/template/.aioson/design-docs/componentization.md +47 -0
  184. package/template/.aioson/design-docs/file-size.md +52 -0
  185. package/template/.aioson/design-docs/folder-structure.md +51 -0
  186. package/template/.aioson/design-docs/naming.md +54 -0
  187. package/template/.aioson/docs/LAYERS.md +12 -2
  188. package/template/.aioson/docs/dev/execution-discipline.md +106 -0
  189. package/template/.aioson/docs/dev/stack-conventions.md +83 -0
  190. package/template/.aioson/docs/deyvin/continuity-recovery.md +57 -0
  191. package/template/.aioson/docs/deyvin/debugging-escalation.md +30 -0
  192. package/template/.aioson/docs/deyvin/pair-execution.md +44 -0
  193. package/template/.aioson/docs/deyvin/runtime-handoffs.md +36 -0
  194. package/template/.aioson/docs/product/conversation-playbook.md +116 -0
  195. package/template/.aioson/docs/product/prd-contract.md +107 -0
  196. package/template/.aioson/docs/product/quality-lens.md +57 -0
  197. package/template/.aioson/docs/product/research-loop.md +65 -0
  198. package/template/.aioson/docs/sheldon/enrichment-paths.md +134 -0
  199. package/template/.aioson/docs/sheldon/quality-lens.md +57 -0
  200. package/template/.aioson/docs/sheldon/research-loop.md +56 -0
  201. package/template/.aioson/docs/sheldon/web-intelligence.md +75 -0
  202. package/template/.aioson/docs/site-forge-build.md +195 -0
  203. package/template/.aioson/docs/site-forge-extraction.md +135 -0
  204. package/template/.aioson/docs/site-forge-qa.md +155 -0
  205. package/template/.aioson/docs/site-forge-recon.md +434 -0
  206. package/template/.aioson/docs/site-forge-transform.md +249 -0
  207. package/template/.aioson/docs/squad/content-output.md +91 -0
  208. package/template/.aioson/docs/squad/creation-flow.md +135 -0
  209. package/template/.aioson/docs/squad/domain-classification.md +117 -0
  210. package/template/.aioson/docs/squad/genome-bindings.md +47 -0
  211. package/template/.aioson/docs/squad/package-contract.md +234 -0
  212. package/template/.aioson/docs/squad/quality-lens.md +56 -0
  213. package/template/.aioson/docs/squad/research-loop.md +59 -0
  214. package/template/.aioson/docs/squad/session-operations.md +117 -0
  215. package/template/.aioson/docs/squad/workflow-quality.md +165 -0
  216. package/template/.aioson/docs/ux-ui/accessibility-audit.md +55 -0
  217. package/template/.aioson/docs/ux-ui/audit-mode.md +86 -0
  218. package/template/.aioson/docs/ux-ui/component-map.md +35 -0
  219. package/template/.aioson/docs/ux-ui/design-execution.md +111 -0
  220. package/template/.aioson/docs/ux-ui/design-gate.md +27 -0
  221. package/template/.aioson/docs/ux-ui/research-mode.md +39 -0
  222. package/template/.aioson/docs/ux-ui/site-delivery.md +156 -0
  223. package/template/.aioson/docs/ux-ui/token-contract.md +57 -0
  224. package/template/.aioson/genomes/copywriting.meta.json +48 -0
  225. package/template/.aioson/git-guard.json +11 -0
  226. package/template/.aioson/mcp/servers.md +0 -1
  227. package/template/.aioson/rules/agent-language-policy.md +93 -0
  228. package/template/.aioson/rules/aioson-context-boundary.md +63 -0
  229. package/template/.aioson/rules/canonical-path-contract.md +47 -0
  230. package/template/.aioson/rules/data-format-convention.md +24 -86
  231. package/template/.aioson/rules/disk-first-artifacts.md +44 -0
  232. package/template/.aioson/rules/output-brevity.md +44 -0
  233. package/template/.aioson/rules/prd-section-ownership.md +49 -0
  234. package/template/.aioson/rules/security-baseline.md +139 -0
  235. package/template/.aioson/rules/spec-level-ownership.md +61 -0
  236. package/template/.aioson/rules/squad-driver-pattern.md +81 -0
  237. package/template/.aioson/schemas/squad-blueprint.schema.json +24 -0
  238. package/template/.aioson/schemas/squad-manifest.schema.json +44 -0
  239. package/template/.aioson/skills/process/aioson-spec-driven/references/pm.md +30 -0
  240. package/template/.aioson/skills/process/secure-tdd/SKILL.md +97 -0
  241. package/template/.aioson/skills/process/secure-tdd/references/nextjs.md +81 -0
  242. package/template/.aioson/skills/process/secure-tdd/references/node-express.md +91 -0
  243. package/template/.aioson/skills/process/secure-tdd/references/planned-stacks.md +33 -0
  244. package/template/.aioson/skills/static/harness-validate/SKILL.md +46 -0
  245. package/template/.aioson/skills/static/web-research-cache.md +3 -0
  246. package/template/.aioson/tasks/squad-create.md +35 -8
  247. package/template/.aioson/tasks/squad-design.md +50 -2
  248. package/template/.aioson/tasks/squad-investigate.md +14 -1
  249. package/template/.claude/commands/aioson/agent/committer.md +5 -0
  250. package/template/.claude/commands/aioson/agent/copywriter.md +5 -0
  251. package/template/.claude/commands/aioson/agent/cypher.md +5 -0
  252. package/template/.claude/commands/aioson/agent/pair.md +5 -0
  253. package/template/.claude/commands/aioson/agent/validator.md +5 -0
  254. package/template/.gemini/commands/aios-analyst.toml +6 -3
  255. package/template/.gemini/commands/aios-architect.toml +7 -6
  256. package/template/.gemini/commands/aios-committer.toml +7 -0
  257. package/template/.gemini/commands/aios-copywriter.toml +7 -0
  258. package/template/.gemini/commands/aios-cypher.toml +7 -0
  259. package/template/.gemini/commands/aios-dev.toml +8 -7
  260. package/template/.gemini/commands/aios-deyvin.toml +6 -5
  261. package/template/.gemini/commands/aios-discovery-design-doc.toml +6 -3
  262. package/template/.gemini/commands/aios-genome.toml +7 -0
  263. package/template/.gemini/commands/aios-neo.toml +5 -3
  264. package/template/.gemini/commands/aios-orache.toml +7 -0
  265. package/template/.gemini/commands/aios-orchestrator.toml +8 -7
  266. package/template/.gemini/commands/aios-pair.toml +6 -5
  267. package/template/.gemini/commands/aios-pm.toml +8 -7
  268. package/template/.gemini/commands/aios-product.toml +5 -3
  269. package/template/.gemini/commands/aios-qa.toml +6 -5
  270. package/template/.gemini/commands/aios-setup.toml +5 -2
  271. package/template/.gemini/commands/aios-sheldon.toml +7 -0
  272. package/template/.gemini/commands/aios-site-forge.toml +7 -0
  273. package/template/.gemini/commands/aios-squad.toml +7 -0
  274. package/template/.gemini/commands/aios-tester.toml +6 -5
  275. package/template/.gemini/commands/aios-ux-ui.toml +8 -7
  276. package/template/.gemini/commands/aios-validator.toml +7 -0
  277. package/template/AGENTS.md +12 -1
  278. package/template/CLAUDE.md +5 -1
  279. package/template/.aioson/locales/en/agents/analyst.md +0 -244
  280. package/template/.aioson/locales/en/agents/architect.md +0 -245
  281. package/template/.aioson/locales/en/agents/dev.md +0 -397
  282. package/template/.aioson/locales/en/agents/deyvin.md +0 -137
  283. package/template/.aioson/locales/en/agents/discovery-design-doc.md +0 -27
  284. package/template/.aioson/locales/en/agents/genome.md +0 -212
  285. package/template/.aioson/locales/en/agents/neo.md +0 -8
  286. package/template/.aioson/locales/en/agents/orache.md +0 -6
  287. package/template/.aioson/locales/en/agents/orchestrator.md +0 -189
  288. package/template/.aioson/locales/en/agents/pair.md +0 -5
  289. package/template/.aioson/locales/en/agents/pm.md +0 -84
  290. package/template/.aioson/locales/en/agents/product.md +0 -378
  291. package/template/.aioson/locales/en/agents/profiler-enricher.md +0 -5
  292. package/template/.aioson/locales/en/agents/profiler-forge.md +0 -5
  293. package/template/.aioson/locales/en/agents/profiler-researcher.md +0 -5
  294. package/template/.aioson/locales/en/agents/qa.md +0 -270
  295. package/template/.aioson/locales/en/agents/setup.md +0 -421
  296. package/template/.aioson/locales/en/agents/sheldon.md +0 -455
  297. package/template/.aioson/locales/en/agents/squad.md +0 -449
  298. package/template/.aioson/locales/en/agents/tester.md +0 -6
  299. package/template/.aioson/locales/en/agents/ux-ui.md +0 -668
  300. package/template/.aioson/locales/es/agents/analyst.md +0 -225
  301. package/template/.aioson/locales/es/agents/architect.md +0 -245
  302. package/template/.aioson/locales/es/agents/dev.md +0 -370
  303. package/template/.aioson/locales/es/agents/deyvin.md +0 -99
  304. package/template/.aioson/locales/es/agents/discovery-design-doc.md +0 -21
  305. package/template/.aioson/locales/es/agents/genome.md +0 -104
  306. package/template/.aioson/locales/es/agents/neo.md +0 -50
  307. package/template/.aioson/locales/es/agents/orache.md +0 -105
  308. package/template/.aioson/locales/es/agents/orchestrator.md +0 -194
  309. package/template/.aioson/locales/es/agents/pair.md +0 -7
  310. package/template/.aioson/locales/es/agents/pm.md +0 -90
  311. package/template/.aioson/locales/es/agents/product.md +0 -372
  312. package/template/.aioson/locales/es/agents/profiler-enricher.md +0 -7
  313. package/template/.aioson/locales/es/agents/profiler-forge.md +0 -7
  314. package/template/.aioson/locales/es/agents/profiler-researcher.md +0 -7
  315. package/template/.aioson/locales/es/agents/qa.md +0 -198
  316. package/template/.aioson/locales/es/agents/setup.md +0 -405
  317. package/template/.aioson/locales/es/agents/sheldon.md +0 -309
  318. package/template/.aioson/locales/es/agents/squad.md +0 -532
  319. package/template/.aioson/locales/es/agents/tester.md +0 -9
  320. package/template/.aioson/locales/es/agents/ux-ui.md +0 -212
  321. package/template/.aioson/locales/fr/agents/analyst.md +0 -225
  322. package/template/.aioson/locales/fr/agents/architect.md +0 -245
  323. package/template/.aioson/locales/fr/agents/dev.md +0 -370
  324. package/template/.aioson/locales/fr/agents/deyvin.md +0 -99
  325. package/template/.aioson/locales/fr/agents/discovery-design-doc.md +0 -21
  326. package/template/.aioson/locales/fr/agents/genome.md +0 -104
  327. package/template/.aioson/locales/fr/agents/neo.md +0 -50
  328. package/template/.aioson/locales/fr/agents/orache.md +0 -106
  329. package/template/.aioson/locales/fr/agents/orchestrator.md +0 -194
  330. package/template/.aioson/locales/fr/agents/pair.md +0 -7
  331. package/template/.aioson/locales/fr/agents/pm.md +0 -90
  332. package/template/.aioson/locales/fr/agents/product.md +0 -372
  333. package/template/.aioson/locales/fr/agents/profiler-enricher.md +0 -7
  334. package/template/.aioson/locales/fr/agents/profiler-forge.md +0 -7
  335. package/template/.aioson/locales/fr/agents/profiler-researcher.md +0 -7
  336. package/template/.aioson/locales/fr/agents/qa.md +0 -198
  337. package/template/.aioson/locales/fr/agents/setup.md +0 -405
  338. package/template/.aioson/locales/fr/agents/sheldon.md +0 -309
  339. package/template/.aioson/locales/fr/agents/squad.md +0 -532
  340. package/template/.aioson/locales/fr/agents/tester.md +0 -9
  341. package/template/.aioson/locales/fr/agents/ux-ui.md +0 -212
  342. package/template/.aioson/locales/pt-BR/agents/analyst.md +0 -319
  343. package/template/.aioson/locales/pt-BR/agents/architect.md +0 -284
  344. package/template/.aioson/locales/pt-BR/agents/dev.md +0 -483
  345. package/template/.aioson/locales/pt-BR/agents/deyvin.md +0 -184
  346. package/template/.aioson/locales/pt-BR/agents/discovery-design-doc.md +0 -198
  347. package/template/.aioson/locales/pt-BR/agents/genome.md +0 -297
  348. package/template/.aioson/locales/pt-BR/agents/neo.md +0 -208
  349. package/template/.aioson/locales/pt-BR/agents/orache.md +0 -137
  350. package/template/.aioson/locales/pt-BR/agents/orchestrator.md +0 -324
  351. package/template/.aioson/locales/pt-BR/agents/pair.md +0 -5
  352. package/template/.aioson/locales/pt-BR/agents/pm.md +0 -182
  353. package/template/.aioson/locales/pt-BR/agents/product.md +0 -466
  354. package/template/.aioson/locales/pt-BR/agents/profiler-enricher.md +0 -5
  355. package/template/.aioson/locales/pt-BR/agents/profiler-forge.md +0 -5
  356. package/template/.aioson/locales/pt-BR/agents/profiler-researcher.md +0 -5
  357. package/template/.aioson/locales/pt-BR/agents/qa.md +0 -300
  358. package/template/.aioson/locales/pt-BR/agents/setup.md +0 -533
  359. package/template/.aioson/locales/pt-BR/agents/sheldon.md +0 -323
  360. package/template/.aioson/locales/pt-BR/agents/squad.md +0 -1330
  361. package/template/.aioson/locales/pt-BR/agents/tester.md +0 -449
  362. package/template/.aioson/locales/pt-BR/agents/ux-ui.md +0 -669
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: output-brevity
3
+ description: All agents must produce terse, direct output — no preambles, no trailing summaries, no narration of actions
4
+ priority: 8
5
+ version: 1.0.0
6
+ ---
7
+
8
+ # Output Brevity
9
+
10
+ All agents produce direct output. No padding.
11
+
12
+ ## What to eliminate
13
+
14
+ - Preambles: "I will now...", "Let me...", "I'm going to..."
15
+ - Trailing summaries: "In summary, I have...", "To recap what was done..."
16
+ - Action narration: "Reading the file...", "Now I'll check..."
17
+ - Filler acknowledgements: "Great!", "Sure!", "Of course!", "Absolutely!"
18
+ - Restating the user's request before answering it
19
+
20
+ ## What to keep
21
+
22
+ - Artifact content — complete and uncompressed
23
+ - Technical explanations when genuinely non-obvious
24
+ - Questions when clarification is required
25
+ - Security warnings, irreversible action confirmations — revert to full prose for these
26
+
27
+ ## Pattern
28
+
29
+ ```
30
+ ❌ "I'll analyze the project structure and then provide my findings..."
31
+ ✅ [analysis output directly]
32
+
33
+ ❌ "In summary, I've created 3 files and updated the spec."
34
+ ✅ "Created: spec-auth.md, prd-auth.md, features.md"
35
+
36
+ ❌ "Great question! Let me explain how this works..."
37
+ ✅ [explanation directly]
38
+ ```
39
+
40
+ ## Exceptions — use full prose
41
+
42
+ - Security warnings or destructive action confirmations
43
+ - Multi-step sequences where brevity would cause ambiguity
44
+ - User appears confused or has contradictory requirements
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: prd-section-ownership
3
+ description: Define qual agente é dono de cada seção do PRD — outros agentes não podem modificar seções que não são suas
4
+ priority: 9
5
+ version: 1.0.0
6
+ agents: [product, pm, analyst, architect, ux-ui, sheldon]
7
+ ---
8
+
9
+ # PRD Section Ownership
10
+
11
+ `prd.md` and `prd-{slug}.md` are shared documents. Each section has one owner — others may only read or append sub-sections, never replace.
12
+
13
+ ## Ownership table
14
+
15
+ | PRD Section | Owner | Others may |
16
+ |---|---|---|
17
+ | `## Objetivo` | `@product` | Read only |
18
+ | `## Problema` | `@product` | Read only |
19
+ | `## Usuários e Personas` | `@product` | Read only |
20
+ | `## Funcionalidades` | `@product` | Read only |
21
+ | `## Critérios de Aceite` | `@product` (structure) / `@pm` (enrichment) | `@analyst`, `@architect` add technical sub-items |
22
+ | `## Fases de Entrega` | `@pm` | Read only |
23
+ | `## Restrições Técnicas` | `@architect` | Read only |
24
+ | `## Considerações de UX` | `@ux-ui` | Read only |
25
+ | `## Riscos` | `@pm` | `@analyst`, `@architect` add new risks only |
26
+ | `## Decisões Registradas` | `@sheldon` (project) / `@pm` (feature) | Read only |
27
+
28
+ ## Modification rule
29
+
30
+ An agent may only modify sections it owns. Non-owners may only **add** a new sub-section at the end — never replace or rewrite existing content.
31
+
32
+ ## Safe addition pattern
33
+
34
+ ```markdown
35
+ ## Critérios de Aceite
36
+ <!-- @product: owner of this section -->
37
+
38
+ - CA-01: User can schedule an appointment
39
+ - CA-02: System sends confirmation email
40
+
41
+ ### Technical criteria (added by @analyst)
42
+ - CA-T01: Scheduling validates availability via DB query before confirming
43
+ - CA-T02: Email queue uses BullMQ with 3x retry
44
+ ```
45
+
46
+ ## On violation detected
47
+
48
+ 1. Do not overwrite the section.
49
+ 2. Create a sub-section with explicit attribution (`<!-- added by @{agent} -->`), OR create a separate artifact (`requirements-{slug}.md`, `architecture.md`, etc.).
@@ -0,0 +1,139 @@
1
+ ---
2
+ name: security-baseline
3
+ description: Secure by Default baseline controls for technical agents
4
+ priority: 10
5
+ version: 1.0.0
6
+ agents: [analyst, architect, dev, qa]
7
+ ---
8
+
9
+ # Security Baseline — Secure by Default
10
+
11
+ > Implements `Article VII — Zero Trust by Default` of the AIOSON constitution.
12
+ > Loaded by `@analyst`, `@architect`, `@dev`, and `@qa`. Other agents must not
13
+ > load this rule — product, copy, design and orchestration scopes are out of band.
14
+
15
+ This rule defines the minimum security baseline every technical agent must
16
+ respect. It does **not** promise absolute security. It declares concrete
17
+ controls, expected evidence and how each project classification consumes them.
18
+ Deviations are allowed only when recorded as an explicit decision in the
19
+ feature `spec-{slug}.md` with N/A rationale.
20
+
21
+ ## Classification policy
22
+
23
+ | Classification | Behavior |
24
+ |---|---|
25
+ | **MICRO** | **Advisory.** Controls are surfaced as recommendations. No automated blocking. `@qa` may still flag obviously dangerous patterns. |
26
+ | **SMALL** | **Scan-oriented.** Static checks and tool-first scans run automatically. `@pentester` is **not** mandatory. Open Medium+ findings are reported but do not block by default. |
27
+ | **MEDIUM** | **Audit-blocking.** Surface assessment runs against attack-surface map. **Open High or Critical findings block Gate D** until resolved or explicitly waived with rationale recorded in `spec-{slug}.md`. |
28
+
29
+ `@pentester` (`app_target` mode) may be invoked by `@qa` for any feature with
30
+ auth, money, ownership, file uploads, external URLs or suspicious audit
31
+ findings — regardless of classification. It is never required by classification
32
+ alone.
33
+
34
+ ## Severity scale
35
+
36
+ | Severity | Examples |
37
+ |---|---|
38
+ | `critical` | Ownership bypass, financial race condition, committed production secret. |
39
+ | `high` | Missing server-side validation, unsafe upload signature handling, missing rate limit on sensitive endpoint. |
40
+ | `medium` | Unsanitized external URL, low-impact tracker, storage boundary abuse surface. |
41
+ | `advisory` | MICRO recommendations or surfaces marked N/A with explicit rationale. |
42
+
43
+ ## Direct LLM mode (no CLI)
44
+
45
+ When the `aioson` CLI is unavailable, agents must fall back to **checklist-only
46
+ verification** of the controls below, record the limitation in the session
47
+ devlog, and **must not** fabricate runtime telemetry events. Findings still
48
+ land in `.aioson/context/security-findings-{slug}.json` (one of the few
49
+ machine-readable exceptions allowed under `.aioson/context/`).
50
+
51
+ ## Controls
52
+
53
+ ### SEC-SBD-01 — Server-side input limits
54
+
55
+ - Maps to: OWASP A03 / A04
56
+ - Default severity: `high`
57
+ - Owner agent: `@dev` (implements), `@analyst` (declares limits), `@qa` (verifies)
58
+ - Applies to: analyst, dev, qa
59
+ - Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking when feature accepts user input
60
+ - Required evidence: explicit field-length / type / range limits enforced server-side, plus negative tests asserting rejection on overflow or wrong type. N/A rationale required when feature has no user input.
61
+
62
+ ### SEC-SBD-02 — Upload file signature validation
63
+
64
+ - Maps to: OWASP A03 / A05
65
+ - Default severity: `high`
66
+ - Owner agent: `@dev` (implements), `@qa` (verifies)
67
+ - Applies to: analyst, dev, qa
68
+ - Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking when feature accepts uploads
69
+ - Required evidence: magic-byte / file-signature validation independent of MIME header and extension; rejection test for spoofed extension. N/A when no upload surface exists.
70
+
71
+ ### SEC-SBD-03 — Ownership / IDOR authorization
72
+
73
+ - Maps to: OWASP A01
74
+ - Default severity: `critical`
75
+ - Owner agent: `@dev` (implements), `@analyst` (maps surfaces), `@qa` (verifies)
76
+ - Applies to: analyst, architect, dev, qa
77
+ - Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking on every endpoint that returns or mutates per-user data
78
+ - Required evidence: ownership check at the data layer (not only route), and a negative test where user A attempts to access user B's resource and receives 403/404. N/A only when resource is intentionally public.
79
+
80
+ ### SEC-SBD-04 — Atomic critical state changes
81
+
82
+ - Maps to: OWASP A04
83
+ - Default severity: `critical`
84
+ - Owner agent: `@architect` (designs), `@dev` (implements), `@qa` (verifies)
85
+ - Applies to: architect, dev, qa
86
+ - Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking on money, inventory, quotas, ownership transfers, balance updates
87
+ - Required evidence: transactional boundary (DB transaction, row lock, or equivalent) plus a concurrency test or documented invariant proving no double-spend / lost update. N/A when feature has no shared mutable state.
88
+
89
+ ### SEC-SBD-05 — Secrets outside code
90
+
91
+ - Maps to: OWASP A02 / A05
92
+ - Default severity: `critical` (committed) / `high` (config drift)
93
+ - Owner agent: `@dev` (implements), `@qa` (verifies)
94
+ - Applies to: analyst, architect, dev, qa
95
+ - Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking on any commit
96
+ - Required evidence: secrets loaded from environment / vault / managed config; `.env` and equivalents in `.gitignore`; secret-scan pass on diff. Brownfield exception: pre-existing secret must be rotated and tracked, never silently kept.
97
+
98
+ ### SEC-SBD-06 — External URL sanitization
99
+
100
+ - Maps to: OWASP A03 / A10
101
+ - Default severity: `medium` (raises to `high` when URL is followed server-side)
102
+ - Owner agent: `@dev` (implements), `@qa` (verifies)
103
+ - Applies to: analyst, dev, qa
104
+ - Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking when feature accepts or follows external URLs
105
+ - Required evidence: scheme allowlist, host validation, SSRF protection (private-range block) when followed server-side, escaping when rendered. N/A when no external URL is accepted.
106
+
107
+ ### SEC-SBD-07 — Storage default-deny / RLS boundary
108
+
109
+ - Maps to: OWASP A01 / A05
110
+ - Default severity: `critical`
111
+ - Owner agent: `@architect` (designs), `@dev` (implements), `@qa` (verifies)
112
+ - Applies to: architect, dev, qa
113
+ - Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking on every multi-tenant or per-user store
114
+ - Required evidence: storage layer denies by default (RLS policies enabled, bucket private, queue ACL closed) plus a negative test from an unauthorized identity. N/A when storage is single-tenant and intentionally public.
115
+
116
+ ### SEC-SBD-08 — Auth enumeration / rate limiting
117
+
118
+ - Maps to: OWASP A07
119
+ - Default severity: `high`
120
+ - Owner agent: `@dev` (implements), `@qa` (verifies)
121
+ - Applies to: analyst, dev, qa
122
+ - Classification policy: MICRO advisory; SMALL scan-oriented; MEDIUM audit-blocking on login, password reset, signup, OTP and any auth-adjacent endpoint
123
+ - Required evidence: per-endpoint rate limit (per IP and per identifier), uniform error response for "user not found" vs "wrong password", lockout or backoff after N failures, and a negative test asserting enumeration is not possible. N/A when feature has no auth surface.
124
+
125
+ ## Out of scope (v1)
126
+
127
+ The following are explicitly **not** part of this baseline and require a future
128
+ PRD before adoption: deceptive endpoints (honeypots), jump-scare responses,
129
+ adversarial CAPTCHAs, and any technique whose primary purpose is to deceive
130
+ attackers. The baseline is preventive, not deceptive.
131
+
132
+ ## Maintenance
133
+
134
+ - Control IDs are stable. Adding a control means appending `SEC-SBD-09`, never
135
+ renumbering or repurposing an existing ID.
136
+ - Severity defaults can be raised per-feature in `spec-{slug}.md` with rationale; they cannot be silently lowered.
137
+ - Changes to this rule require an explicit decision recorded in the relevant
138
+ feature spec and a `last_amended`-style note in the constitution if they
139
+ alter Article VII semantics.
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: spec-level-ownership
3
+ description: spec.md é de projeto, spec-{slug}.md é de feature — os dois níveis nunca se misturam
4
+ priority: 9
5
+ version: 1.0.0
6
+ agents: [dev, qa, pm, sheldon]
7
+ ---
8
+
9
+ # Spec Ownership: Project vs Feature Level
10
+
11
+ Two distinct levels — never mix them.
12
+
13
+ | File | Level | Owner | Content |
14
+ |---|---|---|---|
15
+ | `spec.md` | **Project** | `@dev` (full project) | Stack, global patterns, infrastructure — decisions affecting the whole project |
16
+ | `spec-{slug}.md` | **Feature** | `@dev` (specific feature) | Decisions, entities, dependencies, ACs for ONE feature |
17
+
18
+ ## Absolute rules
19
+
20
+ 1. `spec.md` never receives feature-specific content → create `spec-{slug}.md` for that.
21
+ 2. `spec-{slug}.md` never receives project decisions → stack decisions go in `spec.md` or `architecture.md`.
22
+ 3. `spec-{slug}.md` is created by `@dev` at feature implementation start. One file per slug. Slug must match `prd-{slug}.md` and `implementation-plan-{slug}.md`.
23
+ 4. No `spec-{slug}.md` without a corresponding `prd-{slug}.md`.
24
+
25
+ ## Mandatory structure: spec-{slug}.md
26
+
27
+ ```markdown
28
+ ---
29
+ feature: {slug}
30
+ status: in_progress | done
31
+ phase_gates:
32
+ requirements: approved | pending | skipped
33
+ design: approved | pending | skipped
34
+ plan: approved | pending | skipped
35
+ ---
36
+
37
+ # Spec — {feature name}
38
+
39
+ ## Implemented entities
40
+ ## Technical decisions
41
+ ## Dependencies
42
+ ## QA approval
43
+ (filled by @qa on feature close)
44
+ ```
45
+
46
+ ## Mandatory structure: spec.md (project level)
47
+
48
+ ```markdown
49
+ # Spec — {project name}
50
+
51
+ ## Stack and infrastructure
52
+ ## Global code patterns
53
+ ## External integrations
54
+ ## Cross-feature architecture decisions
55
+ ```
56
+
57
+ ## On violation detected
58
+
59
+ 1. Do not write to the wrong file.
60
+ 2. Identify the correct level.
61
+ 3. Write to the correct file (create if needed following mandatory structure above).
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: squad-driver-pattern
3
+ description: Territory boundaries and integration pattern for AIOSON squads — separates squad definitions (owned by @squad) from application driver code (owned by @dev)
4
+ priority: 9
5
+ version: 1.0.0
6
+ agents: [dev, sheldon, pm, qa, architect]
7
+ ---
8
+
9
+ # Squad Driver Pattern
10
+
11
+ Two distinct layers — never mixed:
12
+
13
+ ```
14
+ Layer 1 — Definition (owned by @squad)
15
+ .aioson/squads/{squad-slug}/
16
+ agents/greeting-agent.md ← prompt and personality
17
+ agents/orquestrador.md ← orchestration logic
18
+ squad.manifest.json ← configuration
19
+ workflows/main.md ← execution pipeline
20
+
21
+ Layer 2 — Driver (owned by @dev)
22
+ src/services/squadRunner.js ← loads and executes definitions
23
+ src/services/greetingService.js ← driver consuming greeting-agent.md
24
+ ```
25
+
26
+ ## Territory rules — absolute for all agents
27
+
28
+ | Agent | Can create/modify | Must never touch |
29
+ |---|---|---|
30
+ | `@squad` | `.aioson/squads/` | Application code (`src/`, `app/`, etc.) |
31
+ | `@dev` | Application code | `.aioson/squads/` |
32
+ | `@pm` | Implementation plan | Either layer |
33
+ | `@architect` | `architecture.md` | Squad files or agent code |
34
+
35
+ ## Correct integration pattern
36
+
37
+ The application service is a **driver** — loads the squad definition and sends it to the LLM. Never embeds prompts in code.
38
+
39
+ ```javascript
40
+ // CORRECT — driver consuming @squad definition
41
+ class GreetingService {
42
+ async respond(message) {
43
+ const agentDef = fs.readFileSync(
44
+ '.aioson/squads/squad-greeting/agents/greeting-agent.md', 'utf-8'
45
+ )
46
+ return await llm.call({ system: agentDef, user: message })
47
+ }
48
+ }
49
+
50
+ // WRONG — prompt embedded in code (@dev must not do this)
51
+ class GreetingService {
52
+ async respond(message) {
53
+ const prompt = "Voce e um atendente de farmacia..." // ← @squad territory
54
+ return await llm.call({ system: prompt, user: message })
55
+ }
56
+ }
57
+ ```
58
+
59
+ ## Per-agent responsibilities
60
+
61
+ **`@product` / `@sheldon`:** describe squad behavior and objective in PRDs — never literal prompts. Prompts are `@squad` territory.
62
+
63
+ **`@analyst` / `@architect`:** include the driver layer as explicit component in `architecture.md`:
64
+ ```
65
+ SquadRunner — loads definitions from .aioson/squads/ and executes via LLM API
66
+ dependencies: fs (read .md), llm-client (model call)
67
+ no domain logic — only orchestrates loading and execution
68
+ ```
69
+
70
+ **`@pm`:** separate squad phases from code phases in implementation plans:
71
+ - Squad phases → `executor: @squad`
72
+ - Driver phases → `executor: @dev` with task "create SquadRunner that loads `.aioson/squads/{slug}/`"
73
+
74
+ **`@dev`:** never write inline prompts. If a task requires creating/modifying files in `.aioson/squads/` — stop and redirect to `@squad`.
75
+
76
+ **`@squad`:** read `implementation-plan` and `prd` before asking anything — context is already in artifacts.
77
+
78
+ **`@qa`:** verify:
79
+ - [ ] Squad services are drivers (load `.md`, never embed prompts)
80
+ - [ ] No agent prompt is hardcoded in application code
81
+ - [ ] `.aioson/squads/` was not modified by `@dev`
@@ -31,6 +31,30 @@
31
31
  "enum": ["content", "software", "research", "mixed"]
32
32
  },
33
33
  "domain": { "type": "string" },
34
+ "locale_scope": {
35
+ "type": "string",
36
+ "description": "Universal or locale-specific scope for generated agent files",
37
+ "pattern": "^(universal|[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*)$"
38
+ },
39
+ "locale_rationale": { "type": "string" },
40
+ "domainClassification": {
41
+ "type": "object",
42
+ "properties": {
43
+ "tier": {
44
+ "type": "string",
45
+ "enum": ["tier-1-regulated", "tier-2-specialized", "tier-3-common"]
46
+ },
47
+ "rationale": { "type": "string" },
48
+ "regulations": {
49
+ "type": "array",
50
+ "items": { "type": "string" }
51
+ },
52
+ "investigationPolicy": {
53
+ "type": "string",
54
+ "enum": ["required", "recommended", "optional"]
55
+ }
56
+ }
57
+ },
34
58
  "executors": {
35
59
  "type": "array",
36
60
  "items": {
@@ -38,6 +38,34 @@
38
38
  "enum": ["private", "public"],
39
39
  "default": "private"
40
40
  },
41
+ "locale_scope": {
42
+ "type": "string",
43
+ "description": "Universal or locale-specific scope for agent prompt files",
44
+ "pattern": "^(universal|[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*)$"
45
+ },
46
+ "locale_rationale": {
47
+ "type": "string",
48
+ "description": "Why the squad is locale-specific when locale_scope is not universal"
49
+ },
50
+ "domainClassification": {
51
+ "type": "object",
52
+ "description": "Classification of the squad domain for research and safety routing",
53
+ "properties": {
54
+ "tier": {
55
+ "type": "string",
56
+ "enum": ["tier-1-regulated", "tier-2-specialized", "tier-3-common"]
57
+ },
58
+ "rationale": { "type": "string" },
59
+ "regulations": {
60
+ "type": "array",
61
+ "items": { "type": "string" }
62
+ },
63
+ "investigationPolicy": {
64
+ "type": "string",
65
+ "enum": ["required", "recommended", "optional"]
66
+ }
67
+ }
68
+ },
41
69
  "ephemeral": {
42
70
  "type": "boolean",
43
71
  "default": false,
@@ -48,6 +76,22 @@
48
76
  "description": "Time-to-live for ephemeral squads (e.g. '24h', '7d'). After TTL, squad files are eligible for cleanup."
49
77
  },
50
78
  "aiosLiteCompatibility": { "type": "string" },
79
+ "sourceDocs": {
80
+ "type": "array",
81
+ "items": { "type": "string" },
82
+ "description": "Project artifacts consumed during squad design"
83
+ },
84
+ "investigation": {
85
+ "type": "object",
86
+ "description": "Reference to a persisted @orache investigation report",
87
+ "properties": {
88
+ "slug": { "type": "string" },
89
+ "path": { "type": "string" },
90
+ "confidence": { "type": "number", "minimum": 0, "maximum": 1 },
91
+ "dimensionsCovered": { "type": "integer", "minimum": 0, "maximum": 7 },
92
+ "date": { "type": "string", "format": "date" }
93
+ }
94
+ },
51
95
  "storagePolicy": {
52
96
  "type": "object",
53
97
  "properties": {
@@ -0,0 +1,30 @@
1
+ # Spec-Driven Reference — @pm
2
+
3
+ > Router file. Do not duplicate logic from the generic references — load those directly.
4
+
5
+ ## Which references to load for backlog and delivery planning
6
+
7
+ ### Always load when this skill is active
8
+
9
+ - `approval-gates.md` — @pm owns Gate C; use it to know exactly what must be true before `phase_gates.plan` can be set to `approved` and before handing off to @dev or @orchestrator
10
+ - `classification-map.md` — use to calibrate sprint sizing and decide how many delivery phases are appropriate for MICRO/SMALL/MEDIUM
11
+
12
+ ### Load when plan structure is ambiguous
13
+
14
+ - `artifact-map.md` — use to understand which artifacts @pm may read (prd, requirements, spec, architecture) vs. which it must not overwrite (@analyst's requirements, @architect's architecture)
15
+ - `maintenance-and-state.md` — use when retaking a sprint session or checking if a spec-{slug}.md checkpoint needs updating before continuing
16
+
17
+ ### Do not load for @pm
18
+
19
+ - `hardening-lane.md` — @pm receives hardened input from @product and @analyst; if input is still vague, send it back upstream, do not harden it yourself
20
+ - `qa.md` — Gate D belongs to @qa, not @pm
21
+
22
+ ## Behavioral notes for @pm under SDD
23
+
24
+ - @pm is the **Gate C owner** — the plan is not complete until `spec-{slug}.md` has `phase_gates.plan: approved` and `implementation-plan-{slug}.md` (if MEDIUM) has `status: approved`
25
+ - Gate C is **blocking in MEDIUM** — @dev and @orchestrator must not execute without Gate C passing
26
+ - Gate C is **informational in SMALL** — flag if the plan looks thin, but do not block
27
+ - Gate C is **skipped in MICRO** — @dev reads prd.md directly; @pm does not run for MICRO
28
+ - ACs produced by @pm must match or extend the ACs in `conformance-{slug}.yaml` when it exists — never contradict the analyst's behavioral contracts
29
+ - @pm adds delivery phases and prioritization; it does NOT rewrite Vision, Problem, Users, or Flows — those belong to @product
30
+ - At session end, always tell the user explicitly: "Gate C passed — activate [@orchestrator / @dev]" OR "Gate C blocked — [reason]"
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: secure-tdd
3
+ description: Process skill for adversarial TDD in security-sensitive features. Load after aioson-spec-driven when classification and attack surface justify it.
4
+ activation: |
5
+ You are now running the secure-tdd process. Confirm the feature classification and attack surface, load only the stack reference you need, write adversarial tests first, then implement production code.
6
+ ---
7
+
8
+ # Skill: secure-tdd
9
+
10
+ > Process skill. Adversarial tests before production code.
11
+ > Load this file first. Then load only the stack reference you need.
12
+
13
+ ## When to use
14
+
15
+ Load this skill only after the normal feature workflow is already active.
16
+
17
+ - **MEDIUM:** load when the feature has auth, ownership, money, uploads, external URLs, secrets/credentials, or sensitive storage boundaries.
18
+ - **SMALL:** optional reduced mode for the same surfaces.
19
+ - **MICRO:** do not auto-load.
20
+
21
+ This skill complements `aioson-spec-driven`. It never replaces it.
22
+
23
+ ## Loading order
24
+
25
+ 1. Load `.aioson/skills/process/aioson-spec-driven/SKILL.md` first when the feature is spec-driven.
26
+ 2. Read the current `requirements-{slug}.md`, `spec-{slug}.md`, and `architecture.md`.
27
+ 3. Load `secure-tdd/SKILL.md`.
28
+ 4. Load only one stack reference:
29
+ - `references/node-express.md`
30
+ - `references/nextjs.md`
31
+ 5. If your stack is not covered by a full v1 reference, read `references/planned-stacks.md` for the minimal fallback.
32
+
33
+ ## Goal
34
+
35
+ Make `@dev` write the security-sensitive tests first, before implementation, for the attack paths most likely to regress:
36
+
37
+ - auth bypass
38
+ - IDOR / ownership breaks
39
+ - race conditions / double-submit
40
+ - server-side validation gaps
41
+ - upload validation gaps
42
+ - unsafe external URL handling
43
+ - auth enumeration / rate limiting gaps
44
+
45
+ ## Core rule
46
+
47
+ Frontend is never the authority.
48
+ Validation, authorization, limits, and sensitive state rules must be enforced server-side.
49
+
50
+ ## Adversarial loop
51
+
52
+ 1. Confirm the sensitive surface from requirements or the Attack Surface Map.
53
+ 2. Map the surface to the relevant controls:
54
+ - `SEC-SBD-01` input limits
55
+ - `SEC-SBD-02` upload validation
56
+ - `SEC-SBD-03` ownership / IDOR / auth bypass
57
+ - `SEC-SBD-04` race condition / atomicity
58
+ - `SEC-SBD-06` external URL sanitization
59
+ - `SEC-SBD-08` auth enumeration / rate limiting
60
+ 3. Write the minimum failing adversarial tests first.
61
+ 4. Implement only enough production code to make those tests pass.
62
+ 5. Re-run the tests immediately.
63
+ 6. Record in `spec-{slug}.md` which attack classes are now covered.
64
+
65
+ `SEC-SBD-05` remains primarily tool-first via `security:scan`. Mention it in implementation decisions when relevant, but do not turn this skill into a secrets-scanning checklist.
66
+
67
+ ## Output contract
68
+
69
+ When this skill is active, `@dev` should produce:
70
+
71
+ - at least one adversarial test per relevant sensitive surface
72
+ - a short note in `spec-{slug}.md` listing the covered attack classes
73
+ - no new product rules beyond what requirements and architecture already define
74
+
75
+ ## Reduced mode for SMALL
76
+
77
+ For SMALL features:
78
+
79
+ - choose only the highest-risk surfaces
80
+ - prefer 1-2 adversarial tests over a full matrix
81
+ - do not block implementation just to expand the suite
82
+
83
+ ## Non-goals
84
+
85
+ - do not invoke `@pentester`
86
+ - do not emit runtime events
87
+ - do not create CLI commands
88
+ - do not auto-generate large prompt libraries
89
+ - do not duplicate the baseline rule prose
90
+
91
+ ## References available
92
+
93
+ | File | Load when |
94
+ |---|---|
95
+ | `references/node-express.md` | Implementing Node / Express or service-style Node boundaries |
96
+ | `references/nextjs.md` | Implementing Next.js route handlers, server actions, or server-side validation |
97
+ | `references/planned-stacks.md` | The target stack is Laravel, Django, Rails, FastAPI, or another non-v1 stack |
@@ -0,0 +1,81 @@
1
+ # secure-tdd reference: Next.js
2
+
3
+ Use this when the feature runs on Next.js route handlers, server actions, or server-side validation flows.
4
+
5
+ ## Preferred runners
6
+
7
+ - Vitest
8
+ - Testing Library
9
+ - direct assertions on route handlers or server actions when available
10
+
11
+ ## Write first
12
+
13
+ Start with failing tests that prove the server side rejects forged or cross-user behavior even if the UI looks correct.
14
+
15
+ Priority order:
16
+ 1. auth bypass in route handlers or server actions
17
+ 2. forged payload that bypasses UI constraints
18
+ 3. IDOR / ownership checks on resource fetch or mutation
19
+ 4. unsafe redirect / external URL handling
20
+ 5. optimistic UI or double-submit that must not create duplicate critical state
21
+
22
+ ## Minimum patterns
23
+
24
+ ### Server-side validation independent of UI
25
+
26
+ ```tsx
27
+ it('rejects forged payloads on the server', async () => {
28
+ const res = await POST(new Request('http://test.local/api/resources', {
29
+ method: 'POST',
30
+ body: JSON.stringify({ title: 'x'.repeat(10000) })
31
+ }));
32
+ expect(res.status).toBe(422);
33
+ });
34
+ ```
35
+
36
+ ### Auth / ownership
37
+
38
+ ```tsx
39
+ it('blocks access to another users resource', async () => {
40
+ const res = await GET(
41
+ new Request('http://test.local/api/resources/foreign-id'),
42
+ { params: { id: 'foreign-id' } }
43
+ );
44
+ expect([401, 403]).toContain(res.status);
45
+ });
46
+ ```
47
+
48
+ ### External URL sanitization
49
+
50
+ ```tsx
51
+ it('rejects unsafe redirect targets', async () => {
52
+ const res = await POST(new Request('http://test.local/api/redirects', {
53
+ method: 'POST',
54
+ body: JSON.stringify({ target: 'javascript:alert(1)' })
55
+ }));
56
+ expect(res.status).toBe(422);
57
+ });
58
+ ```
59
+
60
+ ### Double-submit / optimistic UI distrust
61
+
62
+ Write a test proving the server allows only one critical mutation even if the client sends duplicates quickly.
63
+
64
+ ## Control mapping
65
+
66
+ - `SEC-SBD-01`: route handler / action validation
67
+ - `SEC-SBD-03`: auth bypass / ownership
68
+ - `SEC-SBD-04`: duplicate mutation / optimistic UI distrust
69
+ - `SEC-SBD-06`: unsafe URL / redirect target
70
+ - `SEC-SBD-08`: auth messaging / rate-limiting when applicable
71
+
72
+ ## Core reminder
73
+
74
+ UI affordances are not evidence.
75
+ Server actions, route handlers, and backend services must enforce the rule.
76
+
77
+ ## Avoid
78
+
79
+ - testing only component rendering for a security-sensitive feature
80
+ - assuming hidden fields or disabled buttons are protection
81
+ - skipping server-action tests because the page already validates input