synapos 2.5.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 (238) hide show
  1. package/.github/copilot-instructions.md +72 -0
  2. package/.synapos/.manifest.json +155 -0
  3. package/.synapos/GUIDE.md +660 -0
  4. package/.synapos/VERSION +1 -0
  5. package/.synapos/_memory/company.md +11 -0
  6. package/.synapos/_memory/preferences.md +15 -0
  7. package/.synapos/copilot.md +451 -0
  8. package/.synapos/core/best-practices/_catalog.yaml +56 -0
  9. package/.synapos/core/best-practices/content/blog-post.md +238 -0
  10. package/.synapos/core/best-practices/content/copywriting.md +164 -0
  11. package/.synapos/core/best-practices/content/linkedin-post.md +186 -0
  12. package/.synapos/core/best-practices/dev/api-design.md +274 -0
  13. package/.synapos/core/best-practices/dev/code-review.md +138 -0
  14. package/.synapos/core/best-practices/dev/git-workflow.md +256 -0
  15. package/.synapos/core/best-practices/dev/testing-strategy.md +213 -0
  16. package/.synapos/core/best-practices/product/product-spec.md +235 -0
  17. package/.synapos/core/best-practices/product/technical-writing.md +264 -0
  18. package/.synapos/core/best-practices/product/user-research.md +242 -0
  19. package/.synapos/core/commands/bump.md +59 -0
  20. package/.synapos/core/commands/debug/session.md +100 -0
  21. package/.synapos/core/commands/migrate/v1-to-v2.md +142 -0
  22. package/.synapos/core/commands/set-model.md +197 -0
  23. package/.synapos/core/commands/setup/build-business.md +378 -0
  24. package/.synapos/core/commands/setup/build-tech.md +374 -0
  25. package/.synapos/core/commands/setup/discover.md +543 -0
  26. package/.synapos/core/commands/setup/from-code.md +407 -0
  27. package/.synapos/core/commands/setup/start.md +201 -0
  28. package/.synapos/core/copilot-adapter.md +283 -0
  29. package/.synapos/core/gate-system.md +417 -0
  30. package/.synapos/core/model-adapter.md +245 -0
  31. package/.synapos/core/orchestrator.md +794 -0
  32. package/.synapos/core/pipeline-runner.md +784 -0
  33. package/.synapos/core/pipelines/pre-execution.yaml +107 -0
  34. package/.synapos/core/rules/product-agent.mdc +59 -0
  35. package/.synapos/core/skills-engine.md +207 -0
  36. package/.synapos/core/versioning.md +218 -0
  37. package/.synapos/skills/.gitkeep +0 -0
  38. package/.synapos/skills/brave-search/SKILL.md +130 -0
  39. package/.synapos/skills/fetch-url/SKILL.md +135 -0
  40. package/.synapos/skills/filesystem/SKILL.md +162 -0
  41. package/.synapos/skills/github/SKILL.md +148 -0
  42. package/.synapos/skills/playwright-browser/SKILL.md +124 -0
  43. package/.synapos/squad-templates/backend/agents/alexandre-api.agent.md +243 -0
  44. package/.synapos/squad-templates/backend/agents/bruno-base.agent.md +240 -0
  45. package/.synapos/squad-templates/backend/agents/daniela-dados.agent.md +267 -0
  46. package/.synapos/squad-templates/backend/agents/roberto-revisao-be.agent.md +219 -0
  47. package/.synapos/squad-templates/backend/agents/sergio-seguranca.agent.md +266 -0
  48. package/.synapos/squad-templates/backend/pipelines/api-development.yaml +83 -0
  49. package/.synapos/squad-templates/backend/pipelines/bug-fix.yaml +41 -0
  50. package/.synapos/squad-templates/backend/pipelines/database-migration.yaml +56 -0
  51. package/.synapos/squad-templates/backend/pipelines/quick-fix.yaml +40 -0
  52. package/.synapos/squad-templates/backend/pipelines/steps/01-gate-integridade.md +66 -0
  53. package/.synapos/squad-templates/backend/pipelines/steps/02-design-api.md +155 -0
  54. package/.synapos/squad-templates/backend/pipelines/steps/03-checkpoint-contrato.md +44 -0
  55. package/.synapos/squad-templates/backend/pipelines/steps/04-implementacao.md +113 -0
  56. package/.synapos/squad-templates/backend/pipelines/steps/05-seguranca.md +100 -0
  57. package/.synapos/squad-templates/backend/pipelines/steps/06-review.md +80 -0
  58. package/.synapos/squad-templates/backend/pipelines/steps/atualizar-tarefa.md +138 -0
  59. package/.synapos/squad-templates/backend/pipelines/steps/bfbe-02-diagnostico.md +47 -0
  60. package/.synapos/squad-templates/backend/pipelines/steps/bfbe-03-fix.md +41 -0
  61. package/.synapos/squad-templates/backend/pipelines/steps/bfbe-04-review.md +42 -0
  62. package/.synapos/squad-templates/backend/pipelines/steps/dm-02-schema.md +85 -0
  63. package/.synapos/squad-templates/backend/pipelines/steps/dm-03-checkpoint.md +30 -0
  64. package/.synapos/squad-templates/backend/pipelines/steps/dm-04-migration.md +58 -0
  65. package/.synapos/squad-templates/backend/pipelines/steps/dm-05-review.md +44 -0
  66. package/.synapos/squad-templates/backend/pipelines/steps/qf-02-contexto.md +34 -0
  67. package/.synapos/squad-templates/backend/pipelines/steps/qf-03-executar.md +49 -0
  68. package/.synapos/squad-templates/backend/pipelines/steps/qf-04-registrar.md +35 -0
  69. package/.synapos/squad-templates/backend/template.yaml +72 -0
  70. package/.synapos/squad-templates/devops/agents/claudio-containers.agent.md +245 -0
  71. package/.synapos/squad-templates/devops/agents/igor-infra.agent.md +198 -0
  72. package/.synapos/squad-templates/devops/agents/osvaldo-observabilidade.agent.md +262 -0
  73. package/.synapos/squad-templates/devops/agents/patricia-pipeline.agent.md +253 -0
  74. package/.synapos/squad-templates/devops/pipelines/ci-cd-setup.yaml +93 -0
  75. package/.synapos/squad-templates/devops/pipelines/infra-provision.yaml +56 -0
  76. package/.synapos/squad-templates/devops/pipelines/quick-fix.yaml +41 -0
  77. package/.synapos/squad-templates/devops/pipelines/steps/01-gate-integridade.md +62 -0
  78. package/.synapos/squad-templates/devops/pipelines/steps/02-infra-design.md +31 -0
  79. package/.synapos/squad-templates/devops/pipelines/steps/03-containers.md +28 -0
  80. package/.synapos/squad-templates/devops/pipelines/steps/04-checkpoint.md +20 -0
  81. package/.synapos/squad-templates/devops/pipelines/steps/05-pipeline-cicd.md +29 -0
  82. package/.synapos/squad-templates/devops/pipelines/steps/06-observabilidade.md +28 -0
  83. package/.synapos/squad-templates/devops/pipelines/steps/07-review.md +27 -0
  84. package/.synapos/squad-templates/devops/pipelines/steps/atualizar-tarefa.md +138 -0
  85. package/.synapos/squad-templates/devops/pipelines/steps/ip-02-design.md +21 -0
  86. package/.synapos/squad-templates/devops/pipelines/steps/ip-03-iac.md +20 -0
  87. package/.synapos/squad-templates/devops/pipelines/steps/ip-04-checkpoint.md +22 -0
  88. package/.synapos/squad-templates/devops/pipelines/steps/ip-05-apply.md +22 -0
  89. package/.synapos/squad-templates/devops/pipelines/steps/qf-02-contexto.md +34 -0
  90. package/.synapos/squad-templates/devops/pipelines/steps/qf-03-executar.md +52 -0
  91. package/.synapos/squad-templates/devops/pipelines/steps/qf-04-registrar.md +35 -0
  92. package/.synapos/squad-templates/devops/template.yaml +68 -0
  93. package/.synapos/squad-templates/engineer/agents/leo-engenheiro.agent.md +203 -0
  94. package/.synapos/squad-templates/engineer/pipeline/steps/01-gate.md +22 -0
  95. package/.synapos/squad-templates/engineer/pipeline/steps/02-preparacao.md +66 -0
  96. package/.synapos/squad-templates/engineer/pipeline/steps/03-investigacao.md +110 -0
  97. package/.synapos/squad-templates/engineer/pipeline/steps/04-checkpoint-contexto.md +24 -0
  98. package/.synapos/squad-templates/engineer/pipeline/steps/05-arquitetura.md +127 -0
  99. package/.synapos/squad-templates/engineer/pipeline/steps/06-checkpoint-arquitetura.md +27 -0
  100. package/.synapos/squad-templates/engineer/pipeline/steps/07-planejamento.md +109 -0
  101. package/.synapos/squad-templates/engineer/pipeline/steps/08-checkpoint-plano.md +27 -0
  102. package/.synapos/squad-templates/engineer/pipeline/steps/09-execucao.md +121 -0
  103. package/.synapos/squad-templates/engineer/pipeline/steps/atualizar-tarefa.md +27 -0
  104. package/.synapos/squad-templates/engineer/pipeline/steps/visual-spec.md +74 -0
  105. package/.synapos/squad-templates/engineer/pipelines/feature-development.yaml +107 -0
  106. package/.synapos/squad-templates/engineer/template.yaml +56 -0
  107. package/.synapos/squad-templates/frontend/agents/ana-arquitetura-fe.agent.md +245 -0
  108. package/.synapos/squad-templates/frontend/agents/paulo-performance.agent.md +234 -0
  109. package/.synapos/squad-templates/frontend/agents/renata-revisao-fe.agent.md +219 -0
  110. package/.synapos/squad-templates/frontend/agents/rodrigo-react.agent.md +261 -0
  111. package/.synapos/squad-templates/frontend/agents/tiago-testes-fe.agent.md +229 -0
  112. package/.synapos/squad-templates/frontend/agents/ursula-ui.agent.md +283 -0
  113. package/.synapos/squad-templates/frontend/pipelines/bug-fix.yaml +40 -0
  114. package/.synapos/squad-templates/frontend/pipelines/component-development.yaml +48 -0
  115. package/.synapos/squad-templates/frontend/pipelines/feature-development.yaml +76 -0
  116. package/.synapos/squad-templates/frontend/pipelines/quick-fix.yaml +40 -0
  117. package/.synapos/squad-templates/frontend/pipelines/steps/01-gate-integridade.md +66 -0
  118. package/.synapos/squad-templates/frontend/pipelines/steps/02-arquitetura.md +100 -0
  119. package/.synapos/squad-templates/frontend/pipelines/steps/03-checkpoint-design.md +43 -0
  120. package/.synapos/squad-templates/frontend/pipelines/steps/04-implementacao.md +114 -0
  121. package/.synapos/squad-templates/frontend/pipelines/steps/05-review.md +104 -0
  122. package/.synapos/squad-templates/frontend/pipelines/steps/06-docs.md +51 -0
  123. package/.synapos/squad-templates/frontend/pipelines/steps/atualizar-tarefa.md +138 -0
  124. package/.synapos/squad-templates/frontend/pipelines/steps/bf-02-diagnostico.md +52 -0
  125. package/.synapos/squad-templates/frontend/pipelines/steps/bf-03-fix.md +58 -0
  126. package/.synapos/squad-templates/frontend/pipelines/steps/bf-04-review.md +43 -0
  127. package/.synapos/squad-templates/frontend/pipelines/steps/cd-02-spec.md +96 -0
  128. package/.synapos/squad-templates/frontend/pipelines/steps/qf-02-contexto.md +34 -0
  129. package/.synapos/squad-templates/frontend/pipelines/steps/qf-03-executar.md +45 -0
  130. package/.synapos/squad-templates/frontend/pipelines/steps/qf-04-registrar.md +35 -0
  131. package/.synapos/squad-templates/frontend/template.yaml +77 -0
  132. package/.synapos/squad-templates/fullstack/agents/carlos-coordenador.agent.md +266 -0
  133. package/.synapos/squad-templates/fullstack/pipelines/bug-fix.yaml +46 -0
  134. package/.synapos/squad-templates/fullstack/pipelines/integration-feature.yaml +92 -0
  135. package/.synapos/squad-templates/fullstack/pipelines/quick-fix.yaml +40 -0
  136. package/.synapos/squad-templates/fullstack/pipelines/steps/01-gate-integridade.md +66 -0
  137. package/.synapos/squad-templates/fullstack/pipelines/steps/02-contrato-api.md +63 -0
  138. package/.synapos/squad-templates/fullstack/pipelines/steps/03-checkpoint-contrato.md +25 -0
  139. package/.synapos/squad-templates/fullstack/pipelines/steps/04-frontend.md +35 -0
  140. package/.synapos/squad-templates/fullstack/pipelines/steps/05-backend.md +36 -0
  141. package/.synapos/squad-templates/fullstack/pipelines/steps/06-integracao.md +47 -0
  142. package/.synapos/squad-templates/fullstack/pipelines/steps/07-review.md +49 -0
  143. package/.synapos/squad-templates/fullstack/pipelines/steps/atualizar-tarefa.md +138 -0
  144. package/.synapos/squad-templates/fullstack/pipelines/steps/bf-02-diagnostico.md +34 -0
  145. package/.synapos/squad-templates/fullstack/pipelines/steps/bf-03-fix.md +22 -0
  146. package/.synapos/squad-templates/fullstack/pipelines/steps/bf-04-review.md +22 -0
  147. package/.synapos/squad-templates/fullstack/pipelines/steps/qf-02-contexto.md +34 -0
  148. package/.synapos/squad-templates/fullstack/pipelines/steps/qf-03-executar.md +49 -0
  149. package/.synapos/squad-templates/fullstack/pipelines/steps/qf-04-registrar.md +35 -0
  150. package/.synapos/squad-templates/fullstack/template.yaml +93 -0
  151. package/.synapos/squad-templates/ia-dados/agents/diana-dados.agent.md +269 -0
  152. package/.synapos/squad-templates/ia-dados/agents/larissa-llm.agent.md +255 -0
  153. package/.synapos/squad-templates/ia-dados/agents/marco-ml.agent.md +227 -0
  154. package/.synapos/squad-templates/ia-dados/agents/nelson-notebook.agent.md +252 -0
  155. package/.synapos/squad-templates/ia-dados/pipelines/data-pipeline.yaml +71 -0
  156. package/.synapos/squad-templates/ia-dados/pipelines/ml-feature.yaml +91 -0
  157. package/.synapos/squad-templates/ia-dados/pipelines/quick-fix.yaml +40 -0
  158. package/.synapos/squad-templates/ia-dados/pipelines/steps/01-gate-integridade.md +62 -0
  159. package/.synapos/squad-templates/ia-dados/pipelines/steps/02-exploracao.md +36 -0
  160. package/.synapos/squad-templates/ia-dados/pipelines/steps/03-design.md +25 -0
  161. package/.synapos/squad-templates/ia-dados/pipelines/steps/04-checkpoint.md +23 -0
  162. package/.synapos/squad-templates/ia-dados/pipelines/steps/05-implementacao.md +26 -0
  163. package/.synapos/squad-templates/ia-dados/pipelines/steps/06-avaliacao.md +29 -0
  164. package/.synapos/squad-templates/ia-dados/pipelines/steps/07-deploy.md +30 -0
  165. package/.synapos/squad-templates/ia-dados/pipelines/steps/atualizar-tarefa.md +138 -0
  166. package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-02-design.md +21 -0
  167. package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-03-checkpoint.md +14 -0
  168. package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-04-implementacao.md +19 -0
  169. package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-05-qualidade.md +21 -0
  170. package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-06-deploy.md +22 -0
  171. package/.synapos/squad-templates/ia-dados/pipelines/steps/qf-02-contexto.md +34 -0
  172. package/.synapos/squad-templates/ia-dados/pipelines/steps/qf-03-executar.md +53 -0
  173. package/.synapos/squad-templates/ia-dados/pipelines/steps/qf-04-registrar.md +35 -0
  174. package/.synapos/squad-templates/ia-dados/template.yaml +68 -0
  175. package/.synapos/squad-templates/mobile/agents/felipe-feature.agent.md +234 -0
  176. package/.synapos/squad-templates/mobile/agents/marina-mobile.agent.md +219 -0
  177. package/.synapos/squad-templates/mobile/agents/viviane-visual.agent.md +218 -0
  178. package/.synapos/squad-templates/mobile/pipelines/bug-fix.yaml +47 -0
  179. package/.synapos/squad-templates/mobile/pipelines/feature-development.yaml +77 -0
  180. package/.synapos/squad-templates/mobile/pipelines/quick-fix.yaml +40 -0
  181. package/.synapos/squad-templates/mobile/pipelines/steps/01-gate-integridade.md +62 -0
  182. package/.synapos/squad-templates/mobile/pipelines/steps/02-arquitetura.md +35 -0
  183. package/.synapos/squad-templates/mobile/pipelines/steps/03-design-ux.md +29 -0
  184. package/.synapos/squad-templates/mobile/pipelines/steps/04-checkpoint.md +20 -0
  185. package/.synapos/squad-templates/mobile/pipelines/steps/05-implementacao.md +26 -0
  186. package/.synapos/squad-templates/mobile/pipelines/steps/06-review.md +27 -0
  187. package/.synapos/squad-templates/mobile/pipelines/steps/atualizar-tarefa.md +138 -0
  188. package/.synapos/squad-templates/mobile/pipelines/steps/bf-02-diagnostico.md +22 -0
  189. package/.synapos/squad-templates/mobile/pipelines/steps/bf-03-fix.md +23 -0
  190. package/.synapos/squad-templates/mobile/pipelines/steps/bf-04-review.md +20 -0
  191. package/.synapos/squad-templates/mobile/pipelines/steps/qf-02-contexto.md +34 -0
  192. package/.synapos/squad-templates/mobile/pipelines/steps/qf-03-executar.md +49 -0
  193. package/.synapos/squad-templates/mobile/pipelines/steps/qf-04-registrar.md +35 -0
  194. package/.synapos/squad-templates/mobile/template.yaml +73 -0
  195. package/.synapos/squad-templates/produto/agents/ana-analise.agent.md +243 -0
  196. package/.synapos/squad-templates/produto/agents/eduardo-estrategia.agent.md +258 -0
  197. package/.synapos/squad-templates/produto/agents/paulo-pesquisa.agent.md +226 -0
  198. package/.synapos/squad-templates/produto/agents/priscila-produto.agent.md +235 -0
  199. package/.synapos/squad-templates/produto/agents/tania-tecnica.agent.md +239 -0
  200. package/.synapos/squad-templates/produto/agents/ursula-ux.agent.md +231 -0
  201. package/.synapos/squad-templates/produto/pipelines/discovery-spec-handoff.yaml +152 -0
  202. package/.synapos/squad-templates/produto/pipelines/nova-feature.yaml +77 -0
  203. package/.synapos/squad-templates/produto/pipelines/quick-fix.yaml +40 -0
  204. package/.synapos/squad-templates/produto/pipelines/quick-spec.yaml +60 -0
  205. package/.synapos/squad-templates/produto/pipelines/refinar-docs.yaml +33 -0
  206. package/.synapos/squad-templates/produto/pipelines/steps/01-gate-integridade.md +48 -0
  207. package/.synapos/squad-templates/produto/pipelines/steps/02-contexto-negocio.md +119 -0
  208. package/.synapos/squad-templates/produto/pipelines/steps/03-personas.md +107 -0
  209. package/.synapos/squad-templates/produto/pipelines/steps/04-checkpoint-research.md +53 -0
  210. package/.synapos/squad-templates/produto/pipelines/steps/04b-alinhamento-estrategico.md +92 -0
  211. package/.synapos/squad-templates/produto/pipelines/steps/05-spec.md +138 -0
  212. package/.synapos/squad-templates/produto/pipelines/steps/05b-checkpoint-spec.md +60 -0
  213. package/.synapos/squad-templates/produto/pipelines/steps/06-requisitos.md +118 -0
  214. package/.synapos/squad-templates/produto/pipelines/steps/06b-checkpoint-requisitos.md +53 -0
  215. package/.synapos/squad-templates/produto/pipelines/steps/06c-visual-spec.md +59 -0
  216. package/.synapos/squad-templates/produto/pipelines/steps/07-arquitetura.md +160 -0
  217. package/.synapos/squad-templates/produto/pipelines/steps/08-handoff.md +130 -0
  218. package/.synapos/squad-templates/produto/pipelines/steps/nf-02-validar-requisito.md +73 -0
  219. package/.synapos/squad-templates/produto/pipelines/steps/nf-03-verificar-docs.md +69 -0
  220. package/.synapos/squad-templates/produto/pipelines/steps/nf-04-spec.md +160 -0
  221. package/.synapos/squad-templates/produto/pipelines/steps/nf-05-checkpoint-aprovacao.md +50 -0
  222. package/.synapos/squad-templates/produto/pipelines/steps/nf-06-versionar.md +71 -0
  223. package/.synapos/squad-templates/produto/pipelines/steps/nf-07-handoff.md +99 -0
  224. package/.synapos/squad-templates/produto/pipelines/steps/nf-08-criar-tarefas.md +232 -0
  225. package/.synapos/squad-templates/produto/pipelines/steps/qf-02-contexto.md +34 -0
  226. package/.synapos/squad-templates/produto/pipelines/steps/qf-03-executar.md +49 -0
  227. package/.synapos/squad-templates/produto/pipelines/steps/qf-04-registrar.md +35 -0
  228. package/.synapos/squad-templates/produto/pipelines/steps/qs-02-contexto.md +59 -0
  229. package/.synapos/squad-templates/produto/pipelines/steps/qs-03-spec.md +67 -0
  230. package/.synapos/squad-templates/produto/pipelines/steps/qs-05-handoff.md +49 -0
  231. package/.synapos/squad-templates/produto/pipelines/steps/rf-02-selecionar.md +66 -0
  232. package/.synapos/squad-templates/produto/pipelines/steps/rf-03-delta.md +73 -0
  233. package/.synapos/squad-templates/produto/pipelines/steps/rf-04-criar-versao.md +86 -0
  234. package/.synapos/squad-templates/produto/template.yaml +91 -0
  235. package/.synapos/squads/.gitkeep +0 -0
  236. package/README.md +285 -0
  237. package/bin/synapos.js +331 -0
  238. package/package.json +26 -0
@@ -0,0 +1,213 @@
1
+ ---
2
+ id: testing-strategy
3
+ version: "1.0.0"
4
+ domain: [frontend, backend, fullstack, mobile]
5
+ whenToUse: "Quando o squad escreve ou define estratégia de testes"
6
+ ---
7
+
8
+ # Estratégia de Testes
9
+
10
+ > Referência para definir cobertura, pirâmide de testes e abordagem por domínio.
11
+
12
+ ---
13
+
14
+ ## Pirâmide de Testes
15
+
16
+ ```
17
+ /\
18
+ / \
19
+ / E2E \ ← Poucos, lentos, caros — validam fluxos críticos
20
+ /────────\
21
+ /Integration\ ← Médio volume — validam contratos e integrações reais
22
+ /──────────────\
23
+ / Unit Tests \ ← Muitos, rápidos, baratos — validam lógica isolada
24
+ /──────────────────\
25
+ ```
26
+
27
+ ### Distribuição recomendada
28
+
29
+ | Nível | % do total | Foco |
30
+ |-------|-----------|------|
31
+ | Unit | 70% | Lógica pura, transformações, validações |
32
+ | Integration | 20% | Módulos integrados, banco de dados real, APIs internas |
33
+ | E2E | 10% | Fluxos críticos de negócio (login, checkout, onboarding) |
34
+
35
+ ---
36
+
37
+ ## Testes Unitários
38
+
39
+ ### Quando usar
40
+ - Funções puras com lógica complexa
41
+ - Transformações e cálculos
42
+ - Validações de domínio
43
+ - Componentes de UI isolados (comportamento, não visual)
44
+
45
+ ### Princípios
46
+ - Um teste = um comportamento
47
+ - Nomes descritivos: `deve retornar erro quando email é inválido`
48
+ - Estrutura **AAA**: Arrange → Act → Assert
49
+ - Sem dependências externas (use mocks para I/O)
50
+
51
+ ### Exemplo (TypeScript / Vitest)
52
+ ```typescript
53
+ describe('calcularDesconto', () => {
54
+ it('deve aplicar 10% para compras acima de R$100', () => {
55
+ // Arrange
56
+ const valor = 150
57
+
58
+ // Act
59
+ const resultado = calcularDesconto(valor)
60
+
61
+ // Assert
62
+ expect(resultado).toBe(135)
63
+ })
64
+
65
+ it('deve retornar valor original para compras abaixo de R$100', () => {
66
+ expect(calcularDesconto(80)).toBe(80)
67
+ })
68
+ })
69
+ ```
70
+
71
+ ---
72
+
73
+ ## Testes de Integração
74
+
75
+ ### Quando usar
76
+ - Endpoints de API (request → response completo)
77
+ - Queries ao banco de dados
78
+ - Integrações com serviços externos (mockados ou reais em ambiente de teste)
79
+ - Fluxos entre módulos do sistema
80
+
81
+ ### Princípios
82
+ - Use banco de dados real em ambiente de teste (não mocks de DB)
83
+ - Isole o estado entre testes (truncate tables, transactions rollback)
84
+ - Teste o contrato (status code, formato da resposta, efeitos colaterais)
85
+
86
+ ### Exemplo (supertest / Node.js)
87
+ ```typescript
88
+ describe('POST /api/users', () => {
89
+ it('deve criar usuário e retornar 201 com id', async () => {
90
+ const response = await request(app)
91
+ .post('/api/users')
92
+ .send({ name: 'Ana', email: 'ana@test.com' })
93
+
94
+ expect(response.status).toBe(201)
95
+ expect(response.body).toMatchObject({
96
+ id: expect.any(String),
97
+ name: 'Ana',
98
+ email: 'ana@test.com',
99
+ })
100
+ })
101
+
102
+ it('deve retornar 400 quando email já existe', async () => {
103
+ await createUser({ email: 'ana@test.com' })
104
+
105
+ const response = await request(app)
106
+ .post('/api/users')
107
+ .send({ name: 'Ana 2', email: 'ana@test.com' })
108
+
109
+ expect(response.status).toBe(400)
110
+ expect(response.body.error).toMatch(/email já cadastrado/i)
111
+ })
112
+ })
113
+ ```
114
+
115
+ ---
116
+
117
+ ## Testes de Contrato
118
+
119
+ > Garantem que produtor e consumidor de uma API concordam com o formato dos dados.
120
+
121
+ ### Quando usar
122
+ - APIs consumidas por múltiplos clientes (mobile + web + parceiros)
123
+ - Microsserviços com contratos inter-serviço
124
+ - Quando mudanças de API têm alto impacto
125
+
126
+ ### Ferramentas
127
+ - **Pact** — consumer-driven contract testing
128
+ - **OpenAPI + spectral** — validação de schema estático
129
+ - **Zod / io-ts** — validação de schema em runtime
130
+
131
+ ### Estratégia mínima
132
+ 1. Documente o contrato esperado (OpenAPI / JSON Schema)
133
+ 2. Valide o contrato nos testes de integração
134
+ 3. Versione o contrato junto com o código
135
+
136
+ ---
137
+
138
+ ## Testes E2E
139
+
140
+ ### Quando usar
141
+ - Fluxos críticos de negócio (autenticação, pagamento, onboarding)
142
+ - Regressões de alto impacto
143
+ - Smoke tests em produção
144
+
145
+ ### Princípios
146
+ - Teste comportamento do usuário, não implementação
147
+ - Use seletores semânticos (`getByRole`, `getByLabel`), nunca classes CSS
148
+ - Cada teste deve ser independente (sem compartilhar estado)
149
+ - Mantenha suíte pequena — E2E lento desincentiva uso
150
+
151
+ ### Ferramentas
152
+ - **Playwright** — browser automation (recomendado)
153
+ - **Cypress** — alternativa popular para web
154
+ - **Detox** — testes E2E mobile (React Native)
155
+
156
+ ---
157
+
158
+ ## Cobertura de Código
159
+
160
+ ### Metas por tipo de projeto
161
+
162
+ | Tipo | Cobertura mínima | Foco |
163
+ |------|-----------------|------|
164
+ | Biblioteca / SDK | 90%+ | Toda a superfície pública |
165
+ | API crítica (pagamentos, auth) | 85%+ | Caminho feliz + erros |
166
+ | Feature de produto | 70%+ | Lógica de negócio |
167
+ | Prototipagem / PoC | Sem meta | Valor sobre cobertura |
168
+
169
+ ### Importante
170
+ - Cobertura alta ≠ qualidade de teste
171
+ - 80% com testes que validam comportamento real > 100% com testes triviais
172
+ - Foque em cobertura de **branches**, não só de linhas
173
+
174
+ ---
175
+
176
+ ## Testes de Frontend
177
+
178
+ ### Componentes React (Testing Library)
179
+ ```typescript
180
+ it('deve exibir mensagem de erro quando formulário é submetido vazio', async () => {
181
+ render(<LoginForm />)
182
+
183
+ await userEvent.click(screen.getByRole('button', { name: /entrar/i }))
184
+
185
+ expect(screen.getByText(/email obrigatório/i)).toBeInTheDocument()
186
+ })
187
+ ```
188
+
189
+ ### Princípios
190
+ - Teste comportamento visível ao usuário, não detalhes de implementação
191
+ - Evite testar state interno do componente
192
+ - Use `userEvent` em vez de `fireEvent` (mais realista)
193
+ - Não teste implementação de bibliotecas de terceiros
194
+
195
+ ---
196
+
197
+ ## O que NÃO testar
198
+
199
+ - Configuração de bibliotecas externas
200
+ - Código gerado automaticamente
201
+ - Simples getters/setters sem lógica
202
+ - Detalhes de implementação que podem mudar
203
+
204
+ ---
205
+
206
+ ## Ferramentas por Stack
207
+
208
+ | Stack | Unit | Integration | E2E |
209
+ |-------|------|-------------|-----|
210
+ | Node.js / TypeScript | Vitest / Jest | Supertest + Vitest | Playwright |
211
+ | React | Vitest + Testing Library | — | Playwright |
212
+ | React Native | Jest + RNTL | — | Detox |
213
+ | Python | pytest | pytest + SQLAlchemy | — |
@@ -0,0 +1,235 @@
1
+ ---
2
+ id: product-spec
3
+ version: "1.0.0"
4
+ domain: [produto]
5
+ whenToUse: "Quando o squad de produto escreve especificações"
6
+ ---
7
+
8
+ # Product Spec
9
+
10
+ > Estrutura padrão para especificações de produto: do problema à solução pronta para desenvolvimento.
11
+
12
+ ---
13
+
14
+ ## Estrutura Completa
15
+
16
+ ```
17
+ 1. Contexto e Problema
18
+ 2. Objetivo e Métricas de Sucesso
19
+ 3. Usuários Afetados
20
+ 4. Solução Proposta
21
+ 5. Requisitos Funcionais
22
+ 6. Requisitos Não Funcionais
23
+ 7. Critérios de Aceite
24
+ 8. Casos de Borda
25
+ 9. Fora de Escopo
26
+ 10. Dependências e Riscos
27
+ 11. Open Questions
28
+ ```
29
+
30
+ ---
31
+
32
+ ## 1. Contexto e Problema
33
+
34
+ Responda:
35
+ - **Situação atual**: como o usuário resolve esse problema hoje?
36
+ - **Problema**: o que está errado ou faltando?
37
+ - **Evidência**: dados, feedback de usuários, suporte, analytics
38
+
39
+ ```markdown
40
+ ## Contexto e Problema
41
+
42
+ Usuários que esquecem a senha precisam contatar o suporte via email,
43
+ o que gera ~200 tickets/mês e demora em média 4h para resolução.
44
+
45
+ **Evidência:**
46
+ - 200 tickets/mês de reset de senha (12% do total de suporte)
47
+ - NPS de usuários que passaram pelo suporte: 28 (vs 72 geral)
48
+ - Churn de 15% dos usuários que esperaram mais de 2h
49
+ ```
50
+
51
+ ---
52
+
53
+ ## 2. Objetivo e Métricas de Sucesso
54
+
55
+ ### Formato OKR mínimo
56
+
57
+ ```markdown
58
+ ## Objetivo
59
+ Permitir que usuários recuperem acesso à conta sem intervenção humana.
60
+
61
+ ## Métricas de Sucesso (3 meses após lançamento)
62
+ - Tickets de reset de senha: reduzir de 200 para < 20/mês
63
+ - Tempo médio de recuperação de conta: de 4h para < 5min
64
+ - NPS de usuários que usaram o fluxo: > 60
65
+ ```
66
+
67
+ ---
68
+
69
+ ## 3. Usuários Afetados
70
+
71
+ ```markdown
72
+ ## Personas Afetadas
73
+
74
+ **Primária: Ana — usuária casual**
75
+ - Acessa o app 1–2x por semana
76
+ - Frequentemente esquece senhas
77
+ - Baixa tolerância a fricção no login
78
+
79
+ **Secundária: Carlos — usuário enterprise**
80
+ - Gerencia 5 contas diferentes
81
+ - Prefere segurança à conveniência
82
+ - Usa autenticador 2FA
83
+ ```
84
+
85
+ ---
86
+
87
+ ## 4. Solução Proposta
88
+
89
+ Descreva **o quê**, não o **como** (evite detalhes de implementação nesta seção).
90
+
91
+ ```markdown
92
+ ## Solução
93
+
94
+ Fluxo self-service de recuperação de senha via email:
95
+
96
+ 1. Usuário clica em "Esqueci minha senha" na tela de login
97
+ 2. Informa o email cadastrado
98
+ 3. Recebe link de redefinição válido por 30 minutos
99
+ 4. Define nova senha e é autenticado automaticamente
100
+ ```
101
+
102
+ Inclua wireframes ou referências visuais quando disponíveis.
103
+
104
+ ---
105
+
106
+ ## 5. Requisitos Funcionais
107
+
108
+ Liste **o que o sistema deve fazer**, não como:
109
+
110
+ ```markdown
111
+ ## Requisitos Funcionais
112
+
113
+ RF-01: O sistema deve enviar email de recuperação para o endereço cadastrado
114
+ RF-02: O link de recuperação deve expirar em 30 minutos
115
+ RF-03: Um link usado não pode ser reutilizado
116
+ RF-04: O usuário deve ser autenticado automaticamente após redefinir a senha
117
+ RF-05: O sistema deve mostrar indicador de força de senha durante a redefinição
118
+ RF-06: O sistema deve bloquear tentativas após 5 links enviados em 1 hora
119
+ ```
120
+
121
+ ---
122
+
123
+ ## 6. Requisitos Não Funcionais
124
+
125
+ ```markdown
126
+ ## Requisitos Não Funcionais
127
+
128
+ RNF-01: Email entregue em até 60 segundos (p95)
129
+ RNF-02: Fluxo completo acessível (WCAG 2.1 AA)
130
+ RNF-03: Links de recuperação com token criptograficamente seguro (min 32 bytes)
131
+ RNF-04: Sem exposição de informação sobre existência de email no sistema
132
+ ```
133
+
134
+ ---
135
+
136
+ ## 7. Critérios de Aceite
137
+
138
+ Formato: **Dado** [contexto], **quando** [ação], **então** [resultado esperado].
139
+
140
+ ```markdown
141
+ ## Critérios de Aceite
142
+
143
+ **CA-01:** Dado usuário com email cadastrado,
144
+ quando solicitar recuperação de senha,
145
+ então deve receber email com link em até 60s.
146
+
147
+ **CA-02:** Dado link de recuperação gerado,
148
+ quando acessado após 30 minutos,
149
+ então deve exibir mensagem "link expirado" e oferecer gerar novo.
150
+
151
+ **CA-03:** Dado link de recuperação válido já utilizado,
152
+ quando acessado novamente,
153
+ então deve exibir mensagem "link já utilizado".
154
+
155
+ **CA-04:** Dado email não cadastrado no sistema,
156
+ quando usuário solicitar recuperação,
157
+ então deve exibir mensagem genérica sem confirmar ou negar existência do email.
158
+
159
+ **CA-05:** Dado usuário que tentou 5x em 1 hora,
160
+ quando tentar solicitar nova recuperação,
161
+ então deve ser bloqueado por 60 minutos com mensagem informativa.
162
+ ```
163
+
164
+ ---
165
+
166
+ ## 8. Casos de Borda
167
+
168
+ Itens que precisam de comportamento definido, mas não são o caminho principal:
169
+
170
+ ```markdown
171
+ ## Casos de Borda
172
+
173
+ - Email digitado com espaços ou letras maiúsculas → normalizar antes de buscar
174
+ - Usuário clica no link em dispositivo diferente do que solicitou → permitido
175
+ - Usuário solicita 2 links em sequência → apenas o mais recente deve ser válido
176
+ - Email do usuário mudou desde o cadastro → usar email atual cadastrado no sistema
177
+ - Conta desativada/bloqueada → não enviar email, exibir mensagem de suporte
178
+ - Domínio de email com ponto extra (usuario@gmail..com) → validar formato antes de enviar
179
+ ```
180
+
181
+ ---
182
+
183
+ ## 9. Fora de Escopo
184
+
185
+ Deixe explícito o que **não** está incluído para alinhar expectativas:
186
+
187
+ ```markdown
188
+ ## Fora de Escopo (v1)
189
+
190
+ - Recuperação via SMS / WhatsApp (próxima versão)
191
+ - Autenticação biométrica como fallback
192
+ - Histórico de senhas anteriores
193
+ - Notificação de segurança por email ao alterar senha
194
+ ```
195
+
196
+ ---
197
+
198
+ ## 10. Dependências e Riscos
199
+
200
+ ```markdown
201
+ ## Dependências
202
+ - Serviço de email (SendGrid) deve estar configurado para o novo template
203
+ - Backend precisa de nova tabela `password_reset_tokens`
204
+ - Design system: componente de "força de senha" ainda não existe
205
+
206
+ ## Riscos
207
+ | Risco | Probabilidade | Impacto | Mitigação |
208
+ |-------|--------------|---------|-----------|
209
+ | Emails caindo em spam | Média | Alto | Configurar SPF/DKIM antes do lançamento |
210
+ | Rate limit insuficiente (abuse) | Baixa | Médio | Monitorar nas primeiras 2 semanas |
211
+ ```
212
+
213
+ ---
214
+
215
+ ## 11. Open Questions
216
+
217
+ ```markdown
218
+ ## Open Questions
219
+
220
+ - [ ] Devemos notificar o usuário por email quando a senha for alterada com sucesso? (segurança vs ruído)
221
+ - [ ] Qual o comportamento para usuários que fazem login via Google OAuth? (não têm senha cadastrada)
222
+ - [ ] Precisamos de log de auditoria dos resets? (compliance)
223
+ ```
224
+
225
+ ---
226
+
227
+ ## Checklist Antes de Enviar para Dev
228
+
229
+ - [ ] Critérios de aceite cobrem o caminho feliz?
230
+ - [ ] Casos de borda mapeados e com comportamento definido?
231
+ - [ ] "Fora de escopo" explícito para evitar scope creep?
232
+ - [ ] Métricas de sucesso são mensuráveis?
233
+ - [ ] Open questions resolvidas ou com responsável definido?
234
+ - [ ] Design (wireframe/protótipo) linkado ou anexado?
235
+ - [ ] Revisado por alguém de eng antes de enviar?
@@ -0,0 +1,264 @@
1
+ ---
2
+ id: technical-writing
3
+ version: "1.0.0"
4
+ domain: [produto, backend, frontend]
5
+ whenToUse: "Quando o squad produz documentação técnica ou de produto"
6
+ ---
7
+
8
+ # Technical Writing
9
+
10
+ > Guia para escrever ADRs, decisions logs, handoffs e documentação técnica com clareza e estrutura.
11
+
12
+ ---
13
+
14
+ ## Princípios
15
+
16
+ - **Escreva para o leitor futuro** — você em 6 meses, novo membro do time, outro squad
17
+ - **Contexto antes de decisão** — explique o problema antes de apresentar a solução
18
+ - **Registre o que foi rejeitado** — alternativas descartadas são tão valiosas quanto a escolha feita
19
+ - **Documentação boa é manutenível** — curta e atualizada > longa e desatualizada
20
+ - **Estrutura facilita leitura** — use headers, listas e tabelas em vez de parágrafos densos
21
+
22
+ ---
23
+
24
+ ## ADR — Architecture Decision Record
25
+
26
+ > Registra decisões arquiteturais significativas: contexto, opções consideradas e escolha feita.
27
+
28
+ ### Quando escrever
29
+ - Mudança de stack ou biblioteca principal
30
+ - Decisão de design de API ou banco de dados
31
+ - Escolha de padrão arquitetural (ex: monolito → microsserviços)
32
+ - Qualquer decisão que você terá que explicar para novos membros
33
+
34
+ ### Template
35
+
36
+ ```markdown
37
+ # ADR-{NNN}: {Título da Decisão}
38
+
39
+ **Data:** YYYY-MM-DD
40
+ **Status:** Proposto | Aceito | Deprecado | Substituído por ADR-XXX
41
+ **Decisores:** {nomes ou times envolvidos}
42
+
43
+ ## Contexto
44
+
45
+ {Descreva o problema ou situação que forçou essa decisão.
46
+ Inclua restrições técnicas, de negócio ou de time.}
47
+
48
+ ## Opções Consideradas
49
+
50
+ ### Opção 1: {nome}
51
+ **Prós:** ...
52
+ **Contras:** ...
53
+
54
+ ### Opção 2: {nome}
55
+ **Prós:** ...
56
+ **Contras:** ...
57
+
58
+ ### Opção 3: {nome}
59
+ **Prós:** ...
60
+ **Contras:** ...
61
+
62
+ ## Decisão
63
+
64
+ Escolhemos a **Opção {N}** porque {justificativa principal}.
65
+
66
+ ## Consequências
67
+
68
+ **Positivas:**
69
+ - ...
70
+
71
+ **Negativas / Trade-offs:**
72
+ - ...
73
+
74
+ **Neutras:**
75
+ - ...
76
+
77
+ ## Notas
78
+
79
+ {Referências, links, discussões relacionadas}
80
+ ```
81
+
82
+ ### Exemplo Real
83
+
84
+ ```markdown
85
+ # ADR-003: Adotar PostgreSQL em vez de MongoDB
86
+
87
+ **Data:** 2026-03-23
88
+ **Status:** Aceito
89
+ **Decisores:** Time de Backend, CTO
90
+
91
+ ## Contexto
92
+
93
+ Nossa estrutura de dados para transações financeiras tem relacionamentos
94
+ complexos entre usuários, cobranças e pagamentos. O schema variável do
95
+ MongoDB está causando inconsistências de dados em produção e dificultando
96
+ queries de relatório.
97
+
98
+ ## Opções Consideradas
99
+
100
+ ### Opção 1: PostgreSQL
101
+ **Prós:** Transações ACID, joins eficientes, schema estrito evita dados inconsistentes
102
+ **Contras:** Migração de dados existentes, curva de aprendizado para queries complexas
103
+
104
+ ### Opção 2: Manter MongoDB com schema validation
105
+ **Prós:** Zero migração, time já conhece
106
+ **Contras:** Validação fraca, joins custosos via $lookup, histórico de inconsistências
107
+
108
+ ## Decisão
109
+
110
+ Escolhemos **PostgreSQL** porque a consistência de dados é crítica para
111
+ produto financeiro e os problemas atuais com MongoDB são estruturais, não operacionais.
112
+
113
+ ## Consequências
114
+
115
+ **Positivas:** Queries de relatório 10x mais simples, zero inconsistências de schema
116
+ **Negativas:** 2 semanas de migração, 1 sprint de adaptação do time
117
+ ```
118
+
119
+ ---
120
+
121
+ ## Decisions Log
122
+
123
+ > Registro contínuo de decisões do dia a dia — menos formal que ADR, mais rastreável que Slack.
124
+
125
+ ### Quando usar
126
+ - Decisões de product que não chegam a ser ADR
127
+ - Mudanças de escopo, priorização, trade-offs aceitos
128
+ - Qualquer "por que fizemos assim?"
129
+
130
+ ### Template
131
+
132
+ ```markdown
133
+ # Decisions Log — {Squad ou Projeto}
134
+
135
+ ---
136
+
137
+ ## {YYYY-MM-DD} — {Título da decisão}
138
+
139
+ **Decidido por:** {nome(s)}
140
+ **Contexto:** {1–3 linhas do problema}
141
+ **Decisão:** {o que foi decidido}
142
+ **Motivo:** {por que essa opção}
143
+ **Trade-off aceito:** {o que deixamos de fora ou comprometemos}
144
+ **Revisão:** {quando reavaliar, se aplicável}
145
+
146
+ ---
147
+ ```
148
+
149
+ ### Exemplo
150
+
151
+ ```markdown
152
+ ## 2026-03-23 — Lançar sem notificação por SMS na v1
153
+
154
+ **Decidido por:** Priscila (PM), Bruno (Tech Lead)
155
+ **Contexto:** SMS aumentaria cobertura para usuários sem acesso estável a email,
156
+ mas o provedor de SMS custa R$0,15/msg e precisamos validar adoção primeiro.
157
+ **Decisão:** Lançar v1 apenas com email. SMS entra no roadmap para v1.2.
158
+ **Motivo:** Reduzir custo operacional antes de validar demanda real.
159
+ **Trade-off aceito:** Usuários sem acesso a email não serão atendidos nesta versão.
160
+ **Revisão:** Após 90 dias — avaliar volume de tickets pedindo SMS.
161
+ ```
162
+
163
+ ---
164
+
165
+ ## Handoff Document
166
+
167
+ > Transfere contexto de um squad para o próximo (dev, QA, suporte, outro time).
168
+
169
+ ### Estrutura
170
+
171
+ ```markdown
172
+ # Handoff — {Feature ou Projeto}
173
+
174
+ **Data:** YYYY-MM-DD
175
+ **De:** {squad / pessoa}
176
+ **Para:** {squad / pessoa}
177
+ **Versão:** {versão que está sendo entregue}
178
+
179
+ ## O que foi construído
180
+
181
+ {Descrição clara e objetiva da feature ou sistema entregue}
182
+
183
+ ## Como funciona
184
+
185
+ {Fluxo principal em passos ou diagrama}
186
+
187
+ ## Onde está
188
+
189
+ | Artefato | Localização |
190
+ |----------|-------------|
191
+ | Código | {link ou path} |
192
+ | Deploy | {ambiente, URL} |
193
+ | Documentação | {link} |
194
+ | Designs | {link Figma} |
195
+
196
+ ## O que testar (QA Checklist)
197
+
198
+ - [ ] Caminho feliz: {descrever}
199
+ - [ ] Casos de erro: {descrever}
200
+ - [ ] Casos de borda: {listar}
201
+
202
+ ## Configurações necessárias
203
+
204
+ {Env vars, feature flags, permissões, dependências externas}
205
+
206
+ ## Limitações conhecidas
207
+
208
+ {Bugs conhecidos, débito técnico aceito, limitações de escopo}
209
+
210
+ ## Open Questions / Próximos passos
211
+
212
+ - [ ] {item não resolvido com responsável}
213
+ ```
214
+
215
+ ---
216
+
217
+ ## Clareza e Estrutura
218
+
219
+ ### Escrita objetiva
220
+
221
+ ```markdown
222
+ ❌ "O sistema foi desenvolvido de forma a possibilitar que os usuários
223
+ possam realizar a recuperação de suas senhas de acesso através de
224
+ um processo automatizado via email."
225
+
226
+ ✅ "Usuários podem redefinir a senha via email sem interação do suporte."
227
+ ```
228
+
229
+ ### Use estrutura visual
230
+
231
+ ```markdown
232
+ ❌ "A feature tem três estados possíveis: ativo que significa que está
233
+ funcionando normalmente, pausado que significa que foi suspenso
234
+ temporariamente e inativo que foi encerrado."
235
+
236
+ ✅ **Estados da feature:**
237
+ - **Ativo** — funcionando normalmente
238
+ - **Pausado** — suspenso temporariamente
239
+ - **Inativo** — encerrado
240
+ ```
241
+
242
+ ### Hierarquia de headers
243
+
244
+ ```
245
+ # Título do documento
246
+ ## Seção principal
247
+ ### Subseção
248
+ #### Detalhe (usar com moderação)
249
+ ```
250
+
251
+ ---
252
+
253
+ ## Checklist de Qualidade
254
+
255
+ Antes de entregar qualquer documento técnico:
256
+
257
+ - [ ] O problema está claro antes da solução?
258
+ - [ ] O documento responde "por quê", não só "o quê"?
259
+ - [ ] Alternativas rejeitadas estão documentadas?
260
+ - [ ] Está escrito para o leitor certo (eng? produto? suporte?)?
261
+ - [ ] Sem jargão não explicado para o público-alvo?
262
+ - [ ] Links e referências funcionam?
263
+ - [ ] Data e autoria registrados?
264
+ - [ ] Precisa de revisão por outra pessoa antes de publicar?