nexus-core-v3 3.0.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 (232) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -0
  3. package/agents/README.md +133 -0
  4. package/agents/_protocol.md +107 -0
  5. package/agents/analyst.md +138 -0
  6. package/agents/architect.md +146 -0
  7. package/agents/data-engineer.md +170 -0
  8. package/agents/dev.md +134 -0
  9. package/agents/devops.md +141 -0
  10. package/agents/nexus-master.md +147 -0
  11. package/agents/pm.md +133 -0
  12. package/agents/po.md +138 -0
  13. package/agents/qa.md +192 -0
  14. package/agents/sm.md +122 -0
  15. package/agents/squad-creator.md +121 -0
  16. package/agents/ux-design-expert.md +165 -0
  17. package/artifact-manifest.json +903 -0
  18. package/bin/nexus.mjs +37 -0
  19. package/checklists/README.md +49 -0
  20. package/checklists/architect-checklist.md +47 -0
  21. package/checklists/change-checklist.md +61 -0
  22. package/checklists/db-predeploy-checklist.md +57 -0
  23. package/checklists/design-quality-checklist.md +57 -0
  24. package/checklists/discovery-checklist.md +36 -0
  25. package/checklists/foundation-checklist.md +39 -0
  26. package/checklists/launch-checklist.md +39 -0
  27. package/checklists/pm-checklist.md +48 -0
  28. package/checklists/po-master-checklist.md +64 -0
  29. package/checklists/reality-check-checklist.md +49 -0
  30. package/checklists/story-dod-checklist.md +52 -0
  31. package/checklists/story-draft-checklist.md +36 -0
  32. package/dist/bin/dashboard.html +279 -0
  33. package/dist/bin/nexus.mjs +20008 -0
  34. package/dist/constitution.yaml +76 -0
  35. package/knowledge/README.md +57 -0
  36. package/knowledge/architecture/architectural-styles-map.md +182 -0
  37. package/knowledge/architecture/design-patterns-gof.md +192 -0
  38. package/knowledge/architecture/distributed-patterns-cheatsheet.md +201 -0
  39. package/knowledge/architecture/saas-subscription-blueprint.md +355 -0
  40. package/knowledge/architecture/system-design-tradeoffs.md +231 -0
  41. package/knowledge/architecture/t3-fullstack-typesafe-stack.md +273 -0
  42. package/knowledge/copy/landing-copy-that-converts.md +168 -0
  43. package/knowledge/data/postgres-indexing-and-tuning.md +263 -0
  44. package/knowledge/data/schema-modeling-decisions.md +273 -0
  45. package/knowledge/data/supabase-rls-patterns.md +316 -0
  46. package/knowledge/data/zero-downtime-migrations.md +308 -0
  47. package/knowledge/devops/cicd-pipeline-best-practices.md +318 -0
  48. package/knowledge/devops/production-dockerfile.md +283 -0
  49. package/knowledge/devops/twelve-factor-app.md +398 -0
  50. package/knowledge/engineering/clean-code-principles.md +429 -0
  51. package/knowledge/engineering/effective-code-review.md +204 -0
  52. package/knowledge/engineering/testing-strategy-beyond-unit.md +307 -0
  53. package/knowledge/governance/risk-matrix.md +56 -0
  54. package/knowledge/integration/mcp-server-selection-matrix.md +235 -0
  55. package/knowledge/marketing/copy-que-converte.md +43 -0
  56. package/knowledge/marketing/funil-e-jornada.md +36 -0
  57. package/knowledge/negocios/proposta-vencedora.md +38 -0
  58. package/knowledge/negocios/roi-e-unit-economics.md +46 -0
  59. package/knowledge/pipeline/1-descobrir.md +26 -0
  60. package/knowledge/pipeline/2-estrategizar.md +26 -0
  61. package/knowledge/pipeline/3-estruturar.md +27 -0
  62. package/knowledge/pipeline/4-construir.md +27 -0
  63. package/knowledge/pipeline/5-endurecer.md +28 -0
  64. package/knowledge/pipeline/6-lancar.md +27 -0
  65. package/knowledge/pipeline/7-operar.md +27 -0
  66. package/knowledge/security/lgpd-conformidade-basica.md +35 -0
  67. package/knowledge/security/owasp-secure-coding-gates.md +220 -0
  68. package/knowledge/security/owasp-top10-threat-assessment.md +287 -0
  69. package/knowledge/security/threat-modeling-stride.md +34 -0
  70. package/knowledge/web-craft/a11y-audit-checklist.md +251 -0
  71. package/knowledge/web-craft/accessible-component-patterns.md +383 -0
  72. package/knowledge/web-craft/anti-ai-look.md +114 -0
  73. package/knowledge/web-craft/design-system-from-code.md +195 -0
  74. package/knowledge/web-craft/intrinsic-css-layout.md +420 -0
  75. package/knowledge/web-craft/style-cloning.md +185 -0
  76. package/knowledge/web-craft/visual-polish-review.md +183 -0
  77. package/package.json +55 -0
  78. package/runbooks/campanha-de-conteudo.md +36 -0
  79. package/runbooks/feature-em-projeto-existente.md +37 -0
  80. package/runbooks/mvp-startup.md +38 -0
  81. package/runbooks/resposta-a-incidente.md +37 -0
  82. package/squads/exemplo-conteudo/agents/editor-chefe.md +48 -0
  83. package/squads/exemplo-conteudo/agents/pesquisador.md +44 -0
  84. package/squads/exemplo-conteudo/agents/redator.md +45 -0
  85. package/squads/exemplo-conteudo/knowledge/estilo-editorial.md +21 -0
  86. package/squads/exemplo-conteudo/squad.yaml +19 -0
  87. package/squads/exemplo-conteudo/tasks/pesquisar-fontes.md +26 -0
  88. package/squads/exemplo-conteudo/tasks/planejar-pauta.md +27 -0
  89. package/squads/exemplo-conteudo/tasks/redigir-artigo.md +26 -0
  90. package/squads/exemplo-conteudo/tasks/revisar-artigo.md +27 -0
  91. package/squads/marketing/agents/analista.md +56 -0
  92. package/squads/marketing/agents/chefe-marketing.md +65 -0
  93. package/squads/marketing/agents/conteudo.md +55 -0
  94. package/squads/marketing/agents/copy.md +55 -0
  95. package/squads/marketing/agents/growth.md +56 -0
  96. package/squads/marketing/agents/social.md +55 -0
  97. package/squads/marketing/squad.yaml +17 -0
  98. package/squads/marketing/tasks/aprovar-campanha.md +43 -0
  99. package/squads/negocios/agents/chefe-negocios.md +65 -0
  100. package/squads/negocios/agents/financas-roi.md +55 -0
  101. package/squads/negocios/agents/suporte.md +55 -0
  102. package/squads/negocios/agents/vendas-proposta.md +56 -0
  103. package/squads/negocios/squad.yaml +17 -0
  104. package/squads/negocios/tasks/aprovar-proposta.md +40 -0
  105. package/squads/security/agents/appsec-reviewer.md +59 -0
  106. package/squads/security/agents/chefe-seguranca.md +65 -0
  107. package/squads/security/agents/compliance-auditor.md +60 -0
  108. package/squads/security/agents/threat-modeler.md +60 -0
  109. package/squads/security/squad.yaml +20 -0
  110. package/squads/security/tasks/aprovar-gate-seguranca.md +42 -0
  111. package/squads/security/tasks/emitir-parecer-conformidade.md +42 -0
  112. package/tasks/README.md +72 -0
  113. package/tasks/accessibility-wcag-checklist.md +69 -0
  114. package/tasks/advanced-elicitation.md +42 -0
  115. package/tasks/analyze-performance.md +54 -0
  116. package/tasks/analyze-project-structure.md +59 -0
  117. package/tasks/apply-qa-fixes.md +57 -0
  118. package/tasks/architect-analyze-impact.md +62 -0
  119. package/tasks/archive-squad.md +52 -0
  120. package/tasks/audit-codebase.md +53 -0
  121. package/tasks/build-component.md +61 -0
  122. package/tasks/calculate-roi.md +63 -0
  123. package/tasks/ci-cd-configuration.md +51 -0
  124. package/tasks/collect-visual-evidence.md +62 -0
  125. package/tasks/compose-molecule.md +57 -0
  126. package/tasks/consolidate-patterns.md +54 -0
  127. package/tasks/create-brownfield-prd.md +54 -0
  128. package/tasks/create-competitor-analysis.md +42 -0
  129. package/tasks/create-deep-research-prompt.md +62 -0
  130. package/tasks/create-doc.md +62 -0
  131. package/tasks/create-epic.md +49 -0
  132. package/tasks/create-front-end-spec.md +56 -0
  133. package/tasks/create-migration-plan.md +57 -0
  134. package/tasks/create-next-story.md +66 -0
  135. package/tasks/create-prd.md +53 -0
  136. package/tasks/create-project-brief.md +47 -0
  137. package/tasks/create-rls-policies.md +59 -0
  138. package/tasks/create-schema.md +57 -0
  139. package/tasks/create-service.md +55 -0
  140. package/tasks/create-squad.md +100 -0
  141. package/tasks/create-suite.md +62 -0
  142. package/tasks/db-apply-migration.md +56 -0
  143. package/tasks/db-domain-modeling.md +57 -0
  144. package/tasks/db-dry-run.md +50 -0
  145. package/tasks/db-env-check.md +57 -0
  146. package/tasks/db-load-csv.md +54 -0
  147. package/tasks/db-policy-apply.md +58 -0
  148. package/tasks/db-rollback.md +51 -0
  149. package/tasks/db-run-sql.md +61 -0
  150. package/tasks/db-seed.md +52 -0
  151. package/tasks/db-smoke-test.md +51 -0
  152. package/tasks/db-snapshot.md +48 -0
  153. package/tasks/db-verify-order.md +49 -0
  154. package/tasks/deliberate.md +46 -0
  155. package/tasks/design-indexes.md +59 -0
  156. package/tasks/dev-develop-story.md +61 -0
  157. package/tasks/document-project.md +59 -0
  158. package/tasks/execute-checklist.md +57 -0
  159. package/tasks/execute-epic-plan.md +52 -0
  160. package/tasks/execute-subtask.md +51 -0
  161. package/tasks/extend-pattern.md +63 -0
  162. package/tasks/extend-squad.md +60 -0
  163. package/tasks/extract-patterns.md +64 -0
  164. package/tasks/extract-tokens.md +59 -0
  165. package/tasks/facilitate-brainstorming-session.md +42 -0
  166. package/tasks/generate-ai-frontend-prompt.md +57 -0
  167. package/tasks/generate-documentation.md +60 -0
  168. package/tasks/generate-migration-strategy.md +57 -0
  169. package/tasks/generate-shock-report.md +56 -0
  170. package/tasks/mcp-management.md +66 -0
  171. package/tasks/orchestrate.md +50 -0
  172. package/tasks/perform-market-research.md +42 -0
  173. package/tasks/plan-create-context.md +57 -0
  174. package/tasks/plan-create-implementation.md +58 -0
  175. package/tasks/po-close-story.md +60 -0
  176. package/tasks/po-manage-story-backlog.md +59 -0
  177. package/tasks/po-pull-story.md +60 -0
  178. package/tasks/po-sync-story.md +59 -0
  179. package/tasks/pr-automation.md +50 -0
  180. package/tasks/pre-push-quality-gate.md +54 -0
  181. package/tasks/push.md +53 -0
  182. package/tasks/qa-browser-console-check.md +52 -0
  183. package/tasks/qa-create-fix-request.md +58 -0
  184. package/tasks/qa-evidence-requirements.md +55 -0
  185. package/tasks/qa-false-positive-detection.md +55 -0
  186. package/tasks/qa-fix-issues.md +55 -0
  187. package/tasks/qa-gate.md +53 -0
  188. package/tasks/qa-migration-validation.md +58 -0
  189. package/tasks/qa-nfr-assess.md +45 -0
  190. package/tasks/qa-review-story.md +56 -0
  191. package/tasks/qa-risk-profile.md +45 -0
  192. package/tasks/qa-security-checklist.md +64 -0
  193. package/tasks/qa-test-design.md +47 -0
  194. package/tasks/qa-trace-requirements.md +48 -0
  195. package/tasks/release-management.md +53 -0
  196. package/tasks/repository-cleanup.md +61 -0
  197. package/tasks/route.md +44 -0
  198. package/tasks/run-tests.md +50 -0
  199. package/tasks/security-audit.md +54 -0
  200. package/tasks/setup-database.md +60 -0
  201. package/tasks/setup-design-system.md +60 -0
  202. package/tasks/shard-doc.md +60 -0
  203. package/tasks/spec-assess-complexity.md +55 -0
  204. package/tasks/spec-critique.md +64 -0
  205. package/tasks/spec-gather-requirements.md +48 -0
  206. package/tasks/spec-research-dependencies.md +42 -0
  207. package/tasks/spec-write-spec.md +50 -0
  208. package/tasks/test-as-user.md +52 -0
  209. package/tasks/ux-create-wireframe.md +54 -0
  210. package/tasks/ux-user-research.md +55 -0
  211. package/tasks/validate-next-story.md +61 -0
  212. package/tasks/validate-squad.md +55 -0
  213. package/tasks/verify-subtask.md +52 -0
  214. package/tasks/version-management.md +45 -0
  215. package/templates/README.md +47 -0
  216. package/templates/architecture-tmpl.md +115 -0
  217. package/templates/competitor-analysis-tmpl.md +87 -0
  218. package/templates/epic-tmpl.md +83 -0
  219. package/templates/front-end-spec-tmpl.md +110 -0
  220. package/templates/market-research-tmpl.md +98 -0
  221. package/templates/migration-plan-tmpl.md +92 -0
  222. package/templates/prd-tmpl.md +95 -0
  223. package/templates/project-brief-tmpl.md +100 -0
  224. package/templates/qa-verdict-tmpl.md +73 -0
  225. package/templates/rls-policies-tmpl.md +93 -0
  226. package/templates/schema-design-tmpl.md +107 -0
  227. package/templates/spec-tmpl.md +88 -0
  228. package/templates/squad/agent-dna-tmpl.md +72 -0
  229. package/templates/squad/chief-dna-tmpl.md +98 -0
  230. package/templates/squad/squad-task-tmpl.md +50 -0
  231. package/templates/squad/squad-yaml-tmpl.md +47 -0
  232. package/templates/story-tmpl.md +63 -0
@@ -0,0 +1,66 @@
1
+ ---
2
+ id: create-next-story
3
+ agent: sm
4
+ title: Criar a próxima story do épico
5
+ inputs: [épico, PRD shardado, docs de arquitetura]
6
+ outputs: ['docs/stories/{epicNum}.{storyNum}.story.md em status Draft']
7
+ elicit: false
8
+ modes: [interactive, yolo]
9
+ ---
10
+
11
+ # Criar a próxima story do épico
12
+
13
+ **Objetivo:** transformar a próxima fatia de um épico numa story que o @dev implementa sem adivinhação
14
+ — ACs testáveis e contexto técnico colado dentro do arquivo — rastreando tudo ao PRD/épico/arquitetura.
15
+
16
+ **Pré-condições:**
17
+ - Existe um épico de origem e o PRD shardado. Sem essa âncora, **pare**: qualquer story aqui seria
18
+ invenção (viola No Invention — Art. IV). Sinalize a lacuna para o @pm.
19
+ - Os docs de arquitetura relevantes estão acessíveis (stack, contratos, padrões). Se faltarem para a
20
+ área da story, marque a lacuna explicitamente — não preencha com opinião.
21
+
22
+ ## Passos
23
+
24
+ 1. **Identifique a próxima story.** Leia o épico e o índice de stories em `docs/stories/`. Determine o
25
+ próximo `{storyNum}` na sequência do épico. Se a story anterior não estiver concluída e for
26
+ dependência, registre a dependência — não fure a ordem "por eficiência".
27
+ 2. **Ancore no contexto.** Leia o épico de origem, a seção correspondente do PRD shardado e os docs de
28
+ arquitetura relevantes. Extraia os FR/NFR/CON que a story deve atender. Tudo que entrar na story
29
+ precisa rastrear a uma dessas fontes.
30
+ 3. **Crie o arquivo** `docs/stories/{epicNum}.{storyNum}.story.md` a partir do template de story
31
+ (`templates/`). Preencha título, status `Draft` e a referência ao épico de origem.
32
+ 4. **Escreva critérios de aceite testáveis.** Cada AC no formato "dado X, quando Y, então Z" e
33
+ rastreável a um FR/NFR. Nada de "funciona bem". Se um requisito do épico não couber nesta story,
34
+ deixe-o para a próxima — não infle o escopo.
35
+ 5. **Cole o contexto técnico dentro da story.** Arquivos a tocar, contratos/interfaces, dependências de
36
+ stories anteriores, padrões do projeto a seguir, e a seção de Testing. O @dev não deveria precisar
37
+ abrir cinco documentos para implementar.
38
+ 6. **Preencha a qualidade preditiva.** Pelo tipo da story, anote a seção de integração de revisão de
39
+ código e quais gates/agentes especializados ela provavelmente exigirá (@qa sempre; @data-engineer se
40
+ toca schema; @ux-design-expert se toca UI). Planejar o gate na criação é mais barato que no review.
41
+ 7. **Releia pela lente do dev.** "Dá pra implementar isso sem me perguntar nada?" Cada ponto de
42
+ adivinhação vira contexto adicionado — ou uma lacuna explícita marcada para o @pm resolver.
43
+ 8. **Rode o story-draft-checklist** (via `execute-checklist`). Se passa, a story permanece em `Draft`
44
+ pronta para validação do @po. Se há lacuna de PRD/arquitetura, **sinalize** — não tape o buraco.
45
+ 9. **Entregue o gate.** Story pronta → @po valida (10-point). Não valide você mesma e não implemente:
46
+ seu entregável é o artefato story, não o commit.
47
+
48
+ ## Critério de pronto (DoD)
49
+
50
+ - [ ] Arquivo `docs/stories/{epicNum}.{storyNum}.story.md` criado em status `Draft`
51
+ - [ ] Cada AC é testável ("dado/quando/então") e rastreia a um FR/NFR/CON
52
+ - [ ] Contexto técnico colado: arquivos, contratos, dependências e seção de Testing
53
+ - [ ] Seção de revisão de código + gates previstos preenchida pelo tipo da story
54
+ - [ ] story-draft-checklist executado com aprovação (ou lacunas sinalizadas ao @pm)
55
+ - [ ] Story roteada ao @po para validação — sem implementação e sem `git push`
56
+
57
+ ## Falha / recuperação
58
+
59
+ - **PRD/épico não cobre o que a story precisa** → registro a lacuna e escalo ao @pm. Não invento o
60
+ requisito que falta (No Invention — Art. IV).
61
+ - **Arquitetura ambígua para a área da story** → marco a lacuna explícita na story e sinalizo ao
62
+ @architect; não chuto stack nem contrato.
63
+ - **story-draft-checklist reprova** → corrijo os itens que são meus (contexto, ACs, formato) e refaço.
64
+ Se a reprovação é por lacuna de produto, devolvo ao @pm em vez de forçar a aprovação.
65
+ - **Pedido de correção de escopo no meio** → escalo para a @nexus-master (correct-course). Não corrijo
66
+ escopo de produto por conta própria.
@@ -0,0 +1,53 @@
1
+ ---
2
+ id: create-prd
3
+ agent: pm
4
+ title: Criar o PRD greenfield
5
+ inputs: [pedido de produto, pesquisa de mercado (opcional)]
6
+ outputs: [docs/prd/prd.md com FR/NFR, métricas de sucesso e recorte MVP]
7
+ elicit: true
8
+ modes: [interactive]
9
+ ---
10
+
11
+ # Criar o PRD greenfield
12
+
13
+ **Objetivo:** transformar um pedido de produto novo num PRD-contrato — cada feature rastreada a uma dor
14
+ real do usuário, com critério de aceite verificável, métrica de sucesso e um MVP recortado ao osso.
15
+
16
+ **Pré-condições:**
17
+ - Existe um pedido de produto (visão, ideia, oportunidade). Sem isso, **pare** e elicite o escopo.
18
+ - O "por quê" é conhecível: há uma dor de usuário ou achado de pesquisa por trás. Se não há, **pare** e
19
+ delegue a pesquisa ao @analyst antes de escrever uma linha (No invention, Art. IV).
20
+
21
+ ## Passos
22
+
23
+ 1. **Cave o "por quê" até a raiz.** Para cada feature pedida, pergunte: quem é o usuário, qual a dor,
24
+ qual métrica isso move. Registre o rastro. Feature sem "por quê" rastreável vira pergunta, não FR.
25
+ 2. **Liste tudo que pediram e jogue na matriz** (MoSCoW ou RICE). Classifique sem dó: só o "Must" entra
26
+ no primeiro recorte. "Should"/"Could" viram roadmap, não escopo do MVP.
27
+ 3. **[ELICITAÇÃO] Confirme o recorte MVP com o stakeholder.** Apresente o corte (o que entra, o que vira
28
+ roadmap) e o "por quê" de cada inclusão. Pare e espere o GO real do usuário — não presuma o aceite.
29
+ 4. **Escreva o PRD** a partir de `templates/prd-tmpl.md`: contexto/problema, usuários, objetivos e
30
+ métricas de sucesso, FRs e NFRs. Cada FR/NFR com **critério de aceite verificável** e rastro ao
31
+ "por quê". Texto que @dev/@sm precisariam te perguntar = documento falhou.
32
+ 5. **Preveja qualidade no plano.** Anote NFRs (performance, segurança, acessibilidade) e marque onde o
33
+ @qa entra. Qualidade é design, não remendo.
34
+ 6. **Salve em `docs/prd/prd.md`** e registre as decisões de escopo (o que cortou e por quê).
35
+ 7. **Roteie o que não é meu.** Arquitetura/tecnologia → @architect. Quebra em epics → task `create-epic`
36
+ (depois eu delego stories ao @sm). Subir/versionar no remoto → @devops.
37
+
38
+ ## Critério de pronto (DoD)
39
+
40
+ - [ ] Todo FR/NFR tem critério de aceite verificável e métrica de sucesso
41
+ - [ ] Todo item rastreia a uma dor de usuário ou achado de pesquisa (sem invenção)
42
+ - [ ] Recorte MVP explícito e **confirmado pelo stakeholder** (elicitação cumprida)
43
+ - [ ] O que ficou de fora está registrado como roadmap, não perdido
44
+ - [ ] PRD salvo em `docs/prd/prd.md`; nada de `git push` (delegado ao @devops)
45
+
46
+ ## Falha / recuperação
47
+
48
+ - **Não consigo rastrear o "por quê" de uma feature** → não escrevo o FR; delego pesquisa ao @analyst ou
49
+ devolvo a pergunta ao stakeholder.
50
+ - **Stakeholder não fecha o recorte na elicitação** → registro as opções e seguro o PRD; não invento o
51
+ escopo que ele não aprovou.
52
+ - **Pedido exige decisão de arquitetura** → trago o "o quê"/"por quê" e delego o "como" ao @architect.
53
+ - **Escopo incha sem prova** → empurro o excedente pro roadmap; o MVP não negocia sem justificativa.
@@ -0,0 +1,47 @@
1
+ ---
2
+ id: create-project-brief
3
+ agent: analyst
4
+ title: Criar o brief de projeto
5
+ inputs: [insumos de descoberta (brainstorm, pesquisa de mercado, notas do usuário)]
6
+ outputs: [docs/project-brief.md]
7
+ elicit: true
8
+ modes: [interactive]
9
+ ---
10
+
11
+ # Criar o brief de projeto
12
+
13
+ **Objetivo:** sintetizar a descoberta num brief de projeto enxuto e rastreável que dê ao @pm a munição para escrever o PRD — sem inventar escopo nem decidir produto.
14
+
15
+ **Pré-condições:**
16
+ - Existe pelo menos um insumo de descoberta (brainstorm, pesquisa de mercado, análise competitiva, ou notas do usuário). Se não houver **nada**, **pare** e elícito o contexto base — brief não nasce do vácuo.
17
+ - Há um template de brief em `templates/`. Se existir, preencho-o; se não, uso a estrutura canônica de seções abaixo.
18
+
19
+ ## Passos
20
+
21
+ 1. **Reúno os insumos** disponíveis (brainstorms, pesquisas, notas) e listo as fontes. Cada afirmação no brief vai rastrear a uma delas.
22
+ 2. **Aperto o problema com o usuário.** Confirmo: qual é o problema, para quem, e por que agora. **(ponto de elicitação — exige resposta real do usuário)**
23
+ 3. **Preencho as seções do brief**, uma a uma, cada uma rastreando a um insumo:
24
+ - Problema (o que dói e para quem)
25
+ - Objetivo / resultado desejado (mensurável quando possível)
26
+ - Usuários-alvo / personas
27
+ - Escopo proposto (o que está dentro) e não-escopo (o que está fora)
28
+ - Restrições e premissas conhecidas (CON-*)
29
+ - Riscos e questões em aberto
30
+ - Métricas de sucesso
31
+ 4. **Marco hipóteses explicitamente.** Tudo que não rastreia a uma fonte verificável vira uma hipótese rotulada — nunca apresento suposição como fato.
32
+ 5. **Fecho com o "portanto".** Indico o próximo passo (handoff ao @pm para o PRD) e o que ainda precisa de validação.
33
+ 6. **Salvo** em `docs/project-brief.md` e roteio ao @pm.
34
+
35
+ ## Critério de pronto (DoD)
36
+
37
+ - [ ] Problema, objetivo e usuários-alvo confirmados com o usuário (elicitação cumprida)
38
+ - [ ] Todas as seções do brief preenchidas, cada afirmação rastreando a uma fonte/insumo
39
+ - [ ] Hipóteses marcadas explicitamente, distintas dos fatos
40
+ - [ ] Escopo e não-escopo declarados
41
+ - [ ] Brief salvo em `docs/project-brief.md` e roteado ao @pm
42
+
43
+ ## Falha / recuperação
44
+
45
+ - **Insumos insuficientes para uma seção** → marco a seção como "a validar" com a pergunta aberta; não invento o conteúdo.
46
+ - **Usuário pede que eu escreva o PRD** → recuso e delego: PRD é do @pm. Eu entrego o brief, ele decide o produto.
47
+ - **Achados conflitantes entre insumos** → registro o conflito explicitamente em "questões em aberto" em vez de escolher arbitrariamente uma versão.
@@ -0,0 +1,59 @@
1
+ ---
2
+ id: create-rls-policies
3
+ agent: data-engineer
4
+ title: Projetar políticas RLS para o schema
5
+ inputs: [schema, modelo de domínio (regras de propriedade do dado)]
6
+ outputs: [DDL de políticas RLS, docs/data/RLS.md, casos de teste positivos e negativos]
7
+ elicit: false
8
+ modes: [interactive, yolo]
9
+ ---
10
+
11
+ # Projetar políticas RLS para o schema
12
+
13
+ **Objetivo:** garantir que cada tabela pública aplique Row Level Security — quem pode ler/escrever
14
+ qual linha é decidido pelo banco, não pela confiança no código da aplicação.
15
+
16
+ **Pré-condições:**
17
+ - O schema existe (saída de `create-schema`). Sem tabelas, não há o que proteger.
18
+ - As regras de propriedade do dado estão no modelo de domínio (quem é dono de qual linha:
19
+ usuário, tenant, papel). Se faltam, **pare** e volte ao modelo — RLS sem regra de propriedade é chute.
20
+ - A camada de auth está definida. Se não há auth, **aviso explicitamente** que `auth.uid()` retorna
21
+ `NULL` e as políticas baseadas em identidade não vão filtrar nada.
22
+
23
+ ## Passos
24
+
25
+ 1. **Habilite RLS em toda tabela pública:** `ALTER TABLE ... ENABLE ROW LEVEL SECURITY` e
26
+ `FORCE ROW LEVEL SECURITY` onde o dono também não deve bypassar. Tabela pública sem RLS é vazamento.
27
+ 2. **Para cada tabela, derive as políticas das regras de propriedade** do modelo: `SELECT`,
28
+ `INSERT`, `UPDATE`, `DELETE` separadamente. Cada política expressa "qual linha este papel enxerga
29
+ ou altera" — tipicamente via `auth.uid()`, coluna de tenant ou papel.
30
+ 3. **Escreva `USING` (leitura/escrita do que já existe) e `WITH CHECK` (o que pode ser inserido/
31
+ atualizado) corretamente.** Esquecer `WITH CHECK` deixa o usuário gravar linha que ele nem
32
+ conseguiria ler — buraco clássico.
33
+ 4. **Decida o modo:** KISS (uma política ampla por tabela) quando o acesso é simples; granular
34
+ (política por operação/papel) quando o domínio exige. Documente a escolha.
35
+ 5. **Trate o service role com cuidado extremo:** ele bypassa RLS. Liste onde ele é usado e por quê —
36
+ service role sem justificativa é risco.
37
+ 6. **Escreva os casos de teste — positivos E negativos.** Para cada política: um caso que DEVE passar
38
+ (o dono acessa sua linha) e um que DEVE falhar (outro usuário NÃO acessa). RLS só validada com o
39
+ teste negativo verde; sem ele, eu não declaro a política segura.
40
+ 7. **Documente em `docs/data/RLS.md`** as políticas, o modo escolhido, o tratamento de service role e
41
+ os casos de teste. A aplicação real (`db-policy-apply`) e a emulação de usuário (`test-as-user`)
42
+ acontecem em tasks dedicadas.
43
+
44
+ ## Critério de pronto (DoD)
45
+
46
+ - [ ] RLS habilitada em toda tabela pública
47
+ - [ ] Política por operação derivada das regras de propriedade do modelo de domínio
48
+ - [ ] `USING` e `WITH CHECK` corretos em cada política aplicável
49
+ - [ ] Uso de service role listado e justificado
50
+ - [ ] Cada política tem caso de teste positivo E negativo definido
51
+ - [ ] `docs/data/RLS.md` escrito; aviso emitido se não há camada de auth
52
+
53
+ ## Falha / recuperação
54
+
55
+ - **Falta regra de propriedade do dado** → volto ao `db-domain-modeling`; não invento quem é dono.
56
+ - **Não há auth configurada** → não declaro RLS segura; registro o aviso de `auth.uid()` NULL e
57
+ escalo para o @architect/@devops resolverem a camada de identidade.
58
+ - **Política some no teste negativo** (vazamento detectado) → bloqueio o avanço; política que falha o
59
+ teste negativo não vai para produção.
@@ -0,0 +1,57 @@
1
+ ---
2
+ id: create-schema
3
+ agent: data-engineer
4
+ title: Desenhar o schema do banco
5
+ inputs: [modelo de domínio, story]
6
+ outputs: [DDL do schema, docs/data/SCHEMA.md]
7
+ elicit: false
8
+ modes: [interactive, yolo]
9
+ ---
10
+
11
+ # Desenhar o schema do banco
12
+
13
+ **Objetivo:** transformar o modelo de domínio em DDL concreto — tabelas com baseline, foreign keys
14
+ explícitas e constraints que fazem o banco cumprir as regras, mesmo se o código da aplicação falhar.
15
+
16
+ **Pré-condições:**
17
+ - O modelo de domínio existe (saída de `db-domain-modeling`): entidades, relações e padrões de
18
+ acesso. Se não existe, **pare** e rode `db-domain-modeling` primeiro — schema sem domínio é palpite.
19
+ - A tecnologia de banco está definida (PostgreSQL/Supabase por padrão). Se indefinida, escalo ao
20
+ @architect — escolha de tecnologia não é minha.
21
+
22
+ ## Passos
23
+
24
+ 1. **Releia o modelo de domínio.** Cada tabela do DDL tem que rastrear a uma entidade do modelo. Sem
25
+ entidade no modelo, sem tabela no schema (Constituição Art. IV).
26
+ 2. **Crie cada tabela com o baseline obrigatório:** `id` (PK), `created_at`, `updated_at`. Adicione
27
+ `deleted_at` (soft delete) onde a story pede trilha de auditoria. Tabela sem baseline não está
28
+ pronta.
29
+ 3. **Declare as foreign keys explicitamente**, com `ON DELETE`/`ON UPDATE` coerentes com a relação do
30
+ modelo (cascade, restrict, set null). O lado dono da FK vem do modelo de domínio.
31
+ 4. **Aplique defesa em profundidade no DDL:** `NOT NULL` onde o domínio exige, `CHECK` para valores
32
+ válidos, `UNIQUE` para identidade de negócio. A aplicação é a última linha, não a única.
33
+ 5. **Escolha tipos corretos:** `uuid`/`bigint` para PKs, `timestamptz` para datas, `numeric` para
34
+ dinheiro (nunca `float`), `text` em vez de `varchar(n)` arbitrário. Tipo certo é integridade barata.
35
+ 6. **Escreva DDL idempotente:** `CREATE TABLE IF NOT EXISTS`, `CREATE TYPE`/enum guardados. Rodar duas
36
+ vezes não pode quebrar — esse DDL vai virar migration depois.
37
+ 7. **Verifique a ordem de dependência:** tabelas referenciadas antes das que as referenciam. Esse
38
+ ordenamento é o que `db-verify-order` vai cobrar na migration.
39
+ 8. **Documente o schema** em `docs/data/SCHEMA.md`: cada tabela, suas colunas, FKs e constraints, com
40
+ rastro à entidade do domínio. Sinalize que RLS e índices virão em tasks dedicadas
41
+ (`create-rls-policies`, `design-indexes`) — não entrego tabela pública sem RLS.
42
+
43
+ ## Critério de pronto (DoD)
44
+
45
+ - [ ] Toda tabela rastreia a uma entidade do modelo de domínio
46
+ - [ ] Toda tabela tem o baseline (`id`/`created_at`/`updated_at`) + `deleted_at` onde aplicável
47
+ - [ ] FKs explícitas com política de `ON DELETE`/`ON UPDATE` coerente
48
+ - [ ] Constraints de integridade (`NOT NULL`/`CHECK`/`UNIQUE`) aplicadas
49
+ - [ ] DDL idempotente e em ordem de dependência correta
50
+ - [ ] `docs/data/SCHEMA.md` escrito; RLS e índices sinalizados como próximos passos
51
+
52
+ ## Falha / recuperação
53
+
54
+ - **Modelo de domínio incompleto** → paro e volto a `db-domain-modeling`; não preencho a lacuna
55
+ inventando estrutura.
56
+ - **DDL exige decisão de arquitetura de sistema** (sharding, escolha de engine) → escalo ao @architect.
57
+ - **A story pede código de aplicação/DAL** → delego ao @dev; eu sou dona do banco, não do código acima.
@@ -0,0 +1,55 @@
1
+ ---
2
+ id: create-service
3
+ agent: dev
4
+ title: Criar um serviço novo a partir de template
5
+ inputs: [tipo de serviço (api-integration|utility|agent-tool), nome, story/spec]
6
+ outputs: [scaffold do serviço, teste inicial, File List atualizada]
7
+ elicit: false
8
+ modes: [interactive, yolo]
9
+ ---
10
+
11
+ # Criar um serviço novo a partir de template
12
+
13
+ **Objetivo:** scaffoldar um serviço novo a partir de um template do projeto — já com estrutura,
14
+ ponto de entrada e teste inicial — pelo menor caminho, sem inventar escopo além do que a story pede.
15
+
16
+ **Pré-condições:**
17
+ - O serviço rastreia a uma story/spec que pede explicitamente sua criação. Sem essa origem,
18
+ **pare** e elicito o escopo — não invento serviço (Constituição Art. IV).
19
+ - O `tipo de serviço` é um dos templates suportados (`api-integration`, `utility`, `agent-tool`).
20
+ Tipo desconhecido → **pare** e confirmo com o usuário.
21
+ - Não existe já um serviço que resolve isso. Antes de criar, checo o codebase: se existe um que
22
+ serve (REUSE) ou quase serve (ADAPT), uso/adapto em vez de criar.
23
+
24
+ ## Passos
25
+
26
+ 1. **Confirmo a origem** (story/spec) e o `tipo` do serviço. Identifico o template correspondente
27
+ em `templates/` e o leio antes de scaffoldar.
28
+ 2. **Verifico ausência de duplicata.** Procuro no codebase um serviço equivalente. Se existe, paro e
29
+ reporto — reuso vence criação.
30
+ 3. **Scaffoldo o serviço** a partir do template do tipo escolhido, no path do projeto (`.nexus/` para
31
+ artefatos de framework; o pacote/módulo do projeto para código de app). Preencho os pontos do
32
+ template: nome, ponto de entrada, contrato/interface conforme a story.
33
+ 4. **Sigo os padrões do projeto** (naming, imports absolutos, tratamento de erro). Não introduzo
34
+ dependência nova não aprovada — se o serviço exige uma, **paro** e confirmo com o usuário.
35
+ 5. **Escrevo o teste inicial** que prova que o esqueleto sobe e expõe o contrato mínimo. Serviço sem
36
+ teste não está pronto — está pela metade.
37
+ 6. **Rodo lint + o teste inicial** (verde obrigatório) e **atualizo a File List** com tudo que criei.
38
+
39
+ ## Critério de pronto (DoD)
40
+
41
+ - [ ] O serviço rastreia a uma story/spec (sem invenção de escopo)
42
+ - [ ] Nenhuma duplicata existente foi ignorada (reúso checado antes de criar)
43
+ - [ ] Scaffold gerado a partir do template do tipo correto, seguindo os padrões do projeto
44
+ - [ ] Teste inicial verde provando que o esqueleto sobe e expõe o contrato mínimo
45
+ - [ ] Nenhuma dependência nova não aprovada introduzida
46
+ - [ ] File List atualizada com os arquivos criados
47
+
48
+ ## Falha / recuperação
49
+
50
+ - **Já existe serviço equivalente** → paro e reporto; reúso/adapto em vez de duplicar.
51
+ - **O tipo não tem template** → HALT e confirmo com o usuário; não improviso scaffold do zero sem
52
+ base.
53
+ - **O serviço exigiria dependência nova não aprovada** → HALT e confirmo antes de adicionar
54
+ (Constituição Art. IV).
55
+ - **O escopo do serviço não está na story** → paro e elicito; não invento contrato.
@@ -0,0 +1,100 @@
1
+ ---
2
+ id: create-squad
3
+ agent: squad-creator
4
+ title: Forjar um squad a partir de uma missão
5
+ inputs: [missão, restrições, tamanho desejado]
6
+ outputs: ['blueprint <squad>{json}</squad> validado', 'squads/{id}/ materializado pelo motor (squad.yaml + agents/ + tasks/ + knowledge/)']
7
+ elicit: true
8
+ modes: [interactive, yolo]
9
+ ---
10
+
11
+ # Forjar um squad a partir de uma missão
12
+
13
+ **Objetivo:** transformar uma missão em um squad coeso de especialistas — blueprint completo emitido
14
+ num único bloco `<squad>{json}</squad>`, validado e materializado pelo **motor** (`nexus squad
15
+ create`) em `squads/{id}/`.
16
+
17
+ **Pré-condições:**
18
+ - A missão rastreia a um pedido/story/spec (`traceRef`). Sem rastro, **pare** e elicite — squad de
19
+ escopo inventado não nasce (Art. IV).
20
+ - O roster core (`agents/`) foi lido NESTA sessão — o mapa de cobertura (passo 2) compara contra o
21
+ time real, não contra memória.
22
+
23
+ ## Passos
24
+
25
+ 1. **Entenda a missão.** Em modo interativo (`elicit: true` — ponto sagrado), elicite: (a) a missão
26
+ em uma frase e seu rastro (story/spec/pedido); (b) o tamanho desejado do time (default: o menor
27
+ que cobre os gaps); (c) restrições (prazo, stack, o que está FORA do escopo). Em modo yolo,
28
+ derive dos inputs recebidos e **declare** cada suposição no relatório — suposição silenciosa é
29
+ invenção.
30
+ 2. **Mapeie os papéis contra o core.** Liste as lentes que a missão exige e cruze com o roster real
31
+ de `agents/`. REUSE > CREATE: o que o core cobre é **referenciado** (delegação, nunca cópia);
32
+ só o gap real vira membro novo. Registre o mapa papel → coberto-por/gap no manifest.
33
+ 3. **Desenhe o time.** Exatamente **um chief** de arquétipo `Orchestrator` + **2 a 7 especialistas**
34
+ (fora dessa faixa a composição está errada — squad de 1 agente não nasce). Cada membro: lente
35
+ distinta, `owns:` apontando para tasks DO squad, `delegatesTo:` apontando para o core nas
36
+ fronteiras (git push/PR/release/MCP → @devops, SEMPRE).
37
+ 4. **Preencha os templates** de `templates/squad/`: `squad-yaml-tmpl` (manifest), `chief-dna-tmpl`
38
+ (chief com roster e delegação), `agent-dna-tmpl` (cada membro), `squad-task-tmpl` (cada task do
39
+ squad). Todo frontmatter de agente tem que validar contra o contrato `Agent`
40
+ (`packages/contracts/src/agent.schema.ts`); corpo segue o formato canônico de `agents/README.md`.
41
+ Task core NUNCA é copiada para dentro do squad — é referenciada pelo slug.
42
+ 5. **Emita o blueprint** — EXATAMENTE UM bloco `<squad>{json}</squad>` no output (mesma convenção
43
+ anti-teatro do `<delegate>`: zero blocos = nada a criar; mais de um = ambíguo → recusado). O
44
+ JSON é um `SquadBlueprint` com este shape:
45
+
46
+ ```jsonc
47
+ {
48
+ "manifest": {
49
+ "id": "kebab-case único do squad",
50
+ "name": "nome legível",
51
+ "mission": "a missão em uma frase",
52
+ "version": "0.1.0",
53
+ "chief": "id do agente chief (tem que existir em agents[])",
54
+ "origin": "generated",
55
+ "traceRef": "rastro da missão (story/spec/pedido)",
56
+ "guards": { /* freios do squad (fanout/budget), nunca acima dos tetos do core */ },
57
+ "authorities": [ "squad.{id-do-squad}.{operacao}" ]
58
+ },
59
+ "agents": [ { "frontmatter": { /* contrato Agent: id, name, title, icon, archetype, lens, whenToUse, authority, model, owns, delegatesTo, knowledge */ }, "body": "markdown do DNA" } ],
60
+ "tasks": [ { "slug": "kebab-case da task", "content": "markdown completo (frontmatter + passos)" } ],
61
+ "knowledge": [ { "ref": "categoria/nome-do-pack", "content": "markdown do knowledge pack" } ]
62
+ }
63
+ ```
64
+
65
+ **Shapes que o schema EXIGE (erros mais comuns na forja):**
66
+ - `manifest.authorities`: array de **STRINGS** no formato namespaced `"squad.{id}.{operacao}"`
67
+ (kebab-case, ex.: `"squad.conteudo-ig.aprovar-pauta"`). **NUNCA objetos** `{operation, owner}` —
68
+ esse shape é da Constitution do CORE, não do squad. Na dúvida, use `[]` (autoridade é opcional).
69
+ - `knowledge[].ref`: slug kebab-case `categoria/nome-do-pack` — **sem** prefixo de caminho
70
+ (`squads/...`), **sem** extensão `.md`, **sem** acentos/maiúsculas (ex.: `marketing/metricas-ig`,
71
+ nunca `squads/x/knowledge/Métricas.md`). O ref também não pode colidir com um pack do root
72
+ em `knowledge/` (o motor rejeita sombra de knowledge do core).
73
+ - `agents[].frontmatter.archetype`: um de `Orchestrator | Builder | Sage | Guardian | Explorer | Maker`.
74
+ - ids/slugs em geral: kebab-case ASCII `[a-z0-9-]` (sem acentos).
75
+
76
+ 6. **Dispare o motor:** `nexus squad create`. O MOTOR valida o blueprint contra o schema e
77
+ materializa `squads/{id}/` (squad.yaml + agents/ + tasks/ + knowledge/). Blueprint com issue →
78
+ o squad NÃO nasce; corrija e re-emita. **Nunca** materialize na mão para "destravar".
79
+ 7. **Prove que nasceu inteiro:** rode `validate-squad` sobre o id criado e reporte o resultado REAL
80
+ (Lei 3). Operação do squad daí em diante é da @nexus-master — criar não é operar.
81
+
82
+ ## Critério de pronto (DoD)
83
+
84
+ - [ ] Missão elicitada/derivada com `traceRef` rastreável e restrições registradas
85
+ - [ ] Mapa de cobertura papel → core/gap registrado; nenhum membro duplica o time core
86
+ - [ ] Chief é `Orchestrator`; time entre chief+2 e chief+7; lentes distintas
87
+ - [ ] Nenhuma autoridade do squad colide com as exclusivas do core
88
+ - [ ] EXATAMENTE UM bloco `<squad>{json}</squad>` emitido, com manifest/agents/tasks/knowledge completos
89
+ - [ ] Motor validou e materializou `squads/{id}/` — sem materialização manual
90
+ - [ ] `validate-squad` do squad recém-criado passou, com resultado reportado
91
+
92
+ ## Falha / recuperação
93
+
94
+ - **O motor recusa o blueprint** → leia o issue apontado, corrija o blueprint e re-emita. Duas
95
+ recusas seguidas do MESMO issue = pare e reporte com o erro exato, sem contornar o motor.
96
+ - **A missão não tem rastro** → HALT: elicite o `traceRef`; sem ele a task não prossegue.
97
+ - **Todos os papéis já são cobertos pelo core** → não crie squad: reporte que a missão é da
98
+ @nexus-master orquestrar com o time existente (REUSE total é sucesso, não falha).
99
+ - **O time não fecha na faixa (1 membro, ou >7 gaps)** → renegocie o recorte da missão com o
100
+ usuário: fatie a missão ou colapse lentes — não force a faixa com membro decorativo.
@@ -0,0 +1,62 @@
1
+ ---
2
+ id: create-suite
3
+ agent: qa
4
+ title: Criar a suíte de testes da story
5
+ inputs: [story]
6
+ outputs: [arquivos de teste, mapa AC→teste em Given-When-Then, File List da suíte]
7
+ elicit: false
8
+ modes: [interactive, yolo]
9
+ ---
10
+
11
+ # Criar a suíte de testes da story
12
+
13
+ **Objetivo:** transformar os critérios de aceite de uma story em uma suíte de testes executável e
14
+ rastreável — cada AC com pelo menos um teste em Given-When-Then — sem inventar requisito e sem tocar o
15
+ código de produção.
16
+
17
+ **Pré-condições:**
18
+ - A story existe e tem ACs explícitos e a seção de Testing. Se faltar AC ou Testing, **pare** e
19
+ devolva ao @sm/@po — eu não invento o contrato que vou testar (No invention, Art. IV).
20
+ - A story NÃO está em `Draft` (foi validada). Desenhar suíte sobre contrato não-validado é retrabalho.
21
+ - Conheço o framework de testes do projeto (runner, convenção de pasta, comando de execução). Se não
22
+ estiver definido na story/arquitetura, **pare** e elicito — não escolho stack por conta própria.
23
+
24
+ ## Passos
25
+
26
+ 1. **Leio a story completa** — ACs, Dev Notes, seção de Testing. Defino o que "pronto" significa AQUI
27
+ antes de escrever qualquer teste.
28
+ 2. **Perfilo o risco por AC** (probabilidade × impacto). Caminho crítico e dado sensível recebem
29
+ cobertura profunda (caso de erro, borda, regressão); CRUD trivial recebe cobertura proporcional.
30
+ Profundidade segue o sinal de risco, não o meu humor.
31
+ 3. **Mapeio cada AC para cenário(s)** em Given-When-Then. AC sem cenário é um buraco — eu o nomeio,
32
+ não o ignoro. O mapa AC→teste é artefato de saída obrigatório.
33
+ 4. **Escrevo os testes**, seguindo a convenção do projeto (REUSE > ADAPT > CREATE: reutilizo helpers/
34
+ fixtures existentes antes de criar). Para cada AC:
35
+ a. caminho feliz que prova o AC;
36
+ b. ao menos um caso de erro/borda quando o risco aponta;
37
+ c. teste de regressão quando o AC nasce de um bug conhecido.
38
+ 5. **Rodo a suíte** no runner do projeto. Testes novos podem ficar vermelhos se o código ainda não
39
+ existe — registro claramente quais falham por código ausente (esperado) versus por defeito real.
40
+ 6. **Registro a File List da suíte** (arquivos de teste criados/modificados) e entrego o mapa AC→teste
41
+ junto. Esse é o rastro que o gate vai auditar.
42
+ 7. **Roteio.** Suíte pronta → @dev implementa contra ela (TDD) ou eu sigo para `*review`/`*gate` se o
43
+ código já existe. Eu **nunca** escrevo o código de produção que faz a suíte passar — isso é do @dev.
44
+
45
+ ## Critério de pronto (DoD)
46
+
47
+ - [ ] Todo AC mapeado para pelo menos um teste em Given-When-Then (zero AC órfão)
48
+ - [ ] Casos de erro/borda presentes onde o perfil de risco aponta
49
+ - [ ] Suíte roda no runner do projeto; falhas classificadas (código ausente × defeito real)
50
+ - [ ] File List da suíte e mapa AC→teste entregues
51
+ - [ ] Reutilizei helpers/fixtures existentes antes de criar novos
52
+ - [ ] Não toquei o código de produção nem qualquer seção da story além da minha
53
+
54
+ ## Falha / recuperação
55
+
56
+ - **AC ambíguo ou não-testável** → paro, registro a lacuna e devolvo ao @sm/@po. Não invento a
57
+ interpretação que falta.
58
+ - **Framework de testes indefinido** → paro e elicito; não escolho stack por conta própria.
59
+ - **A suíte exige tocar schema/migration além do teste** → delego ao @data-engineer para validar/
60
+ otimizar; eu não invado a lane de dados.
61
+ - **Preciso subir a suíte (push/PR)** → delego ao @devops, sempre. Eu não faço `git push` nem abro PR;
62
+ commit local é do @dev.
@@ -0,0 +1,56 @@
1
+ ---
2
+ id: db-apply-migration
3
+ agent: data-engineer
4
+ title: Aplicar uma migration com segurança
5
+ inputs: [migration (path), story/spec de origem]
6
+ outputs: [migration aplicada, snapshot pré-aplicação, rollback script, registro de aplicação]
7
+ elicit: false
8
+ modes: [interactive, yolo]
9
+ ---
10
+
11
+ # Aplicar uma migration com segurança
12
+
13
+ **Objetivo:** aplicar uma migration de schema em transação, com snapshot antes e rollback pronto, de
14
+ forma que rodar de novo seja seguro — sem nunca subir nada (push é do @devops).
15
+
16
+ **Pré-condições:**
17
+ - A migration existe no path informado e rastreia a uma story/spec. Se não rastreia, **pare** — não
18
+ aplico DDL órfão (Constituição Art. IV).
19
+ - O dry-run (`db-dry-run`) já rodou verde e a ordem do DDL (`db-verify-order`) já foi verificada. Se
20
+ não rodaram, **pare** e rode-os antes — aplicar sem dry-run é apostar no escuro.
21
+ - O ambiente-alvo está validado (`db-env-check` ok, `sslmode=require` em produção). Se o alvo for
22
+ produção, confirmo explicitamente o ambiente antes de tocar.
23
+
24
+ ## Passos
25
+
26
+ 1. **Confirme o ambiente-alvo** (dev / staging / produção) e as variáveis de conexão. Em produção,
27
+ exijo Pooler com `sslmode=require` e justificativa se for usar service role.
28
+ 2. **Crie o snapshot pré-aplicação** (`db-snapshot {label}`, label tipo `pre-{migration-id}`). Sem
29
+ snapshot, eu **não** aplico — reversibilidade é pré-condição, não opção.
30
+ 3. **Garanta o rollback script** correspondente à migration (o `down`/reverse). Se não existe, escrevo
31
+ ou peço antes de seguir. Se eu não sei desfazer, eu não aplico.
32
+ 4. **Aplique dentro de uma transação** (`BEGIN … COMMIT`), com DDL idempotente (`IF NOT EXISTS` /
33
+ `IF EXISTS`). Qualquer erro no meio → `ROLLBACK` automático, banco intacto.
34
+ 5. **Verifique a aplicação:** as estruturas existem, constraints/FKs/RLS estão ativas, e a tabela tem
35
+ o baseline (`id`, `created_at`, `updated_at`) quando aplicável.
36
+ 6. **Rode o smoke-test** (`db-smoke-test {version}`) para confirmar que nada quebrou pós-migração.
37
+ 7. **Registre a aplicação** (migration id, snapshot label, ambiente, timestamp) na trilha da story.
38
+ 8. **Pronto para subir → delego ao @devops.** Eu não faço `git push` nem release; deixo a migration
39
+ aplicada e o registro pronto e roteio a subida ao @devops (Gage).
40
+
41
+ ## Critério de pronto (DoD)
42
+
43
+ - [ ] Snapshot pré-aplicação criado e rollback script disponível
44
+ - [ ] Migration aplicada em transação, com DDL idempotente
45
+ - [ ] Estruturas, constraints/FKs/RLS e baseline verificados pós-aplicação
46
+ - [ ] Smoke-test verde
47
+ - [ ] Aplicação registrada na trilha da story; subida delegada ao @devops
48
+
49
+ ## Falha / recuperação
50
+
51
+ - **Erro durante a aplicação** → a transação já fez `ROLLBACK`; confirmo que o banco está no estado do
52
+ snapshot e reporto a causa. Não tento "consertar ao vivo".
53
+ - **Smoke-test falha pós-aplicação** → executo `db-rollback {snapshot}` para o ponto anterior, registro
54
+ o que falhou e devolvo a migration para correção.
55
+ - **Migration não rastreia a story/spec** → HALT, não aplico — escalo para alinhar escopo.
56
+ - **Pediram que eu faça o push** → recuso e delego ao @devops; push/PR/release não são meus.
@@ -0,0 +1,57 @@
1
+ ---
2
+ id: db-domain-modeling
3
+ agent: data-engineer
4
+ title: Modelar o domínio de dados
5
+ inputs: [story, arquitetura do @architect]
6
+ outputs: [modelo de domínio (entidades, relações, padrões de acesso), docs/data/domain-model.md]
7
+ elicit: true
8
+ modes: [interactive]
9
+ ---
10
+
11
+ # Modelar o domínio de dados
12
+
13
+ **Objetivo:** entender o domínio real antes de qualquer DDL — quais são as entidades, como elas se
14
+ relacionam, e como vão ser lidas e escritas — produzindo um modelo de domínio que rastreia à story.
15
+
16
+ **Pré-condições:**
17
+ - A story (ou spec) que motiva a modelagem existe e descreve o quê precisa ser persistido. Se não há
18
+ fonte de verdade, **pare** e elicito o escopo — eu não invento entidades (Constituição Art. IV).
19
+ - A arquitetura de sistema do @architect está disponível ou foi consultada. Se falta o contexto
20
+ arquitetural (escolha de tecnologia, fronteiras de serviço), eu **peço ao @architect** — não decido
21
+ arquitetura de sistema, isso não é meu.
22
+
23
+ ## Passos
24
+
25
+ 1. **Leia a story e a arquitetura completas.** Extraia cada substantivo de negócio que vira candidato
26
+ a entidade e cada verbo que vira candidato a operação (leitura/escrita).
27
+ 2. **Liste as entidades candidatas** com seus atributos essenciais. Para cada uma, pergunte: ela tem
28
+ identidade própria e ciclo de vida? Se for só um atributo de outra, não é entidade.
29
+ 3. **Mapeie as relações** entre entidades: 1:1, 1:N, N:N. Para cada relação, defina cardinalidade,
30
+ obrigatoriedade e quem é o lado dono da foreign key.
31
+ 4. **Documente os padrões de acesso** (PONTO DE ELICITAÇÃO — exige confirmação do usuário): como cada
32
+ entidade vai ser consultada? Por qual chave? Com qual frequência? Quais joins quentes? Escala
33
+ esperada por tabela? Esse mapa guia schema e índices depois — sem ele, eu modelo no escuro.
34
+ 5. **Decida normalização pragmática.** Normalize por padrão; só desnormalize quando um padrão de
35
+ acesso documentado justifica, e registre o porquê no modelo.
36
+ 6. **Registre restrições de integridade e segurança de domínio:** quais regras o banco deve fazer
37
+ cumprir (unicidade, valores válidos, propriedade do dado por usuário/tenant).
38
+ 7. **Escreva o modelo** em `docs/data/domain-model.md`: entidades, atributos, relações, padrões de
39
+ acesso e restrições — cada item com rastro à story. Esse é o input de `create-schema`.
40
+
41
+ ## Critério de pronto (DoD)
42
+
43
+ - [ ] Toda entidade rastreia a um requisito da story (sem invenção)
44
+ - [ ] Cada relação tem cardinalidade, obrigatoriedade e lado dono da FK definidos
45
+ - [ ] Padrões de acesso confirmados pelo usuário no ponto de elicitação
46
+ - [ ] Decisões de desnormalização (se houver) justificadas por escrito
47
+ - [ ] Restrições de integridade/segurança de domínio listadas
48
+ - [ ] `docs/data/domain-model.md` escrito e pronto para alimentar `create-schema`
49
+
50
+ ## Falha / recuperação
51
+
52
+ - **Story ambígua ou sem o dado necessário** → paro, registro a lacuna e devolvo ao @sm/@po. Não
53
+ invento o requisito que falta.
54
+ - **Falta arquitetura/escolha de tecnologia** → escalo ao @architect; não decido arquitetura de
55
+ sistema no lugar dele.
56
+ - **Usuário não consegue confirmar os padrões de acesso** → não avanço para o schema; um modelo sem
57
+ padrão de acesso vira índice errado e schema retrabalhado.