jarvis-ai-framework 1.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 (240) hide show
  1. package/AGENTS.md +416 -0
  2. package/LICENSE +21 -0
  3. package/README.md +190 -0
  4. package/agents/AGENTS.md +234 -0
  5. package/agents/README.md +309 -0
  6. package/agents/engineering/data/eng.data-engineer.agent.md +309 -0
  7. package/agents/engineering/eng.agent.md +303 -0
  8. package/agents/engineering/eng.bug-hunter.md +386 -0
  9. package/agents/engineering/eng.cybersecurity.agent.md +503 -0
  10. package/agents/engineering/eng.dev-code-reviewer.md +148 -0
  11. package/agents/engineering/eng.docs-writer.md +152 -0
  12. package/agents/engineering/eng.frontend.agent.md +117 -0
  13. package/agents/engineering/eng.rpa.agent.md +215 -0
  14. package/agents/engineering/eng.tech-analyst.agent.md +102 -0
  15. package/agents/engineering/eng.ux-designer.agent.md +193 -0
  16. package/agents/engineering/qa/eng.qa.cypress-specialist.md +109 -0
  17. package/agents/engineering/qa/eng.qa.quality-champion-task-agent.md +85 -0
  18. package/agents/engineering/qa/eng.qa.quality-strategist.md +111 -0
  19. package/agents/engineering/qa/eng.qa.test-architect.md +400 -0
  20. package/agents/engineering/qa/eng.qa.test-planner.md +477 -0
  21. package/agents/engineering/qa/eng.qa.testing-engineer.md +339 -0
  22. package/agents/product/prod.pm-checker.md +52 -0
  23. package/bin/commands/docs-publish.js +184 -0
  24. package/bin/commands/docs-sync.js +139 -0
  25. package/bin/commands/info.js +87 -0
  26. package/bin/commands/init.js +237 -0
  27. package/bin/commands/install-rtk.js +90 -0
  28. package/bin/commands/list.js +48 -0
  29. package/bin/commands/qa-signoff.js +112 -0
  30. package/bin/commands/whoami.js +43 -0
  31. package/bin/jarvis.js +159 -0
  32. package/bin/lib/auth/session.js +56 -0
  33. package/bin/lib/config/constants.js +123 -0
  34. package/bin/lib/config/ide-config.js +233 -0
  35. package/bin/lib/core/scanner.js +124 -0
  36. package/bin/lib/core/sync-engine.js +551 -0
  37. package/bin/lib/docs/fetch-file.sh +41 -0
  38. package/bin/lib/docs/publish-file.sh +284 -0
  39. package/bin/lib/docs/validate-frontmatter.js +157 -0
  40. package/bin/lib/env-loader.js +198 -0
  41. package/bin/lib/tasks/comment.js +131 -0
  42. package/bin/lib/utils/git-parser.js +145 -0
  43. package/bin/lib/utils/logger.js +104 -0
  44. package/bin/lib/utils/npmrc-parser.js +106 -0
  45. package/bin/lib/utils/paths.js +55 -0
  46. package/bin/lib/utils/ui.js +59 -0
  47. package/bin/lib/vcs/api.js +312 -0
  48. package/bin/lib/vcs/create-issue.js +43 -0
  49. package/bin/lib/vcs/create-merge.js +43 -0
  50. package/bin/lib/vcs/fetch-raw.js +30 -0
  51. package/bin/postinstall.js +41 -0
  52. package/members.md +25 -0
  53. package/package.json +55 -0
  54. package/rules/AGENTS.md +205 -0
  55. package/rules/engineering/data/data-rules.md +200 -0
  56. package/rules/engineering/eng-rules.md +243 -0
  57. package/rules/engineering/eng-security-rules.md +186 -0
  58. package/rules/engineering/eng.breakdown-subtasks-rules.md +585 -0
  59. package/rules/engineering/eng.bump-rules.md +27 -0
  60. package/rules/engineering/eng.docs-scraping-rules.md +64 -0
  61. package/rules/engineering/eng.downstream-flow-rules.md +297 -0
  62. package/rules/engineering/eng.integrations-rules.md +73 -0
  63. package/rules/engineering/eng.plan-rules.md +333 -0
  64. package/rules/engineering/eng.pr-rules.md +359 -0
  65. package/rules/engineering/eng.pre-pr-rules.md +103 -0
  66. package/rules/engineering/eng.start-rules.md +246 -0
  67. package/rules/engineering/eng.tech-spec-rules.md +968 -0
  68. package/rules/engineering/eng.work-rules.md +312 -0
  69. package/rules/engineering/frontend/eng.frontend-rules.md +147 -0
  70. package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +259 -0
  71. package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +137 -0
  72. package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +181 -0
  73. package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +120 -0
  74. package/rules/engineering/rpa/eng.rpa-rules.md +230 -0
  75. package/rules/product/README.md +24 -0
  76. package/rules/product/prod-rules.md +151 -0
  77. package/rules/rtk-rules.md +68 -0
  78. package/skills/AGENTS.md +290 -0
  79. package/skills/SKILLS-ROADMAP.md +333 -0
  80. package/skills/churn-audit/SKILL.md +385 -0
  81. package/skills/context-detect/SKILL.md +399 -0
  82. package/skills/context-detect/assets/context-profile-template.md +127 -0
  83. package/skills/docs-central/README.md +310 -0
  84. package/skills/docs-central/SKILL.md +423 -0
  85. package/skills/docs-index/SKILL.md +377 -0
  86. package/skills/eng-ai-engineer/SKILL.md +296 -0
  87. package/skills/eng-arch-c4/SKILL.md +358 -0
  88. package/skills/eng-arch-c4/assets/example-code.md +189 -0
  89. package/skills/eng-arch-c4/assets/example-component.md +105 -0
  90. package/skills/eng-arch-c4/assets/example-container.md +104 -0
  91. package/skills/eng-arch-c4/assets/example-context.md +81 -0
  92. package/skills/eng-backend/SKILL.md +776 -0
  93. package/skills/eng-browser-extension-builder/SKILL.md +385 -0
  94. package/skills/eng-cybersecurity/SKILL.md +645 -0
  95. package/skills/eng-data-bi/SKILL.md +199 -0
  96. package/skills/eng-data-debug/SKILL.md +307 -0
  97. package/skills/eng-data-engineer/SKILL.md +256 -0
  98. package/skills/eng-data-onboard/SKILL.md +310 -0
  99. package/skills/eng-data-orchestrator/SKILL.md +426 -0
  100. package/skills/eng-design-system/SKILL.md +619 -0
  101. package/skills/eng-docs-write/SKILL.md +312 -0
  102. package/skills/eng-frontend/SKILL.md +913 -0
  103. package/skills/eng-jira-comment/SKILL.md +17 -0
  104. package/skills/eng-microfrontend/SKILL.md +602 -0
  105. package/skills/eng-ms-trace/SKILL.md +469 -0
  106. package/skills/eng-nestjs/SKILL.md +791 -0
  107. package/skills/eng-performance-engineer/SKILL.md +312 -0
  108. package/skills/eng-pr/SKILL.md +339 -0
  109. package/skills/eng-qa-a11y-audit/SKILL.md +269 -0
  110. package/skills/eng-qa-bug-report/SKILL.md +1088 -0
  111. package/skills/eng-qa-bug-report/TASK_MANAGERS.md +138 -0
  112. package/skills/eng-qa-cypress-e2e/SKILL.md +177 -0
  113. package/skills/eng-qa-dev-guide/SKILL.md +164 -0
  114. package/skills/eng-qa-e2e/SKILL.md +400 -0
  115. package/skills/eng-qa-e2e-spec-writer/SKILL.md +322 -0
  116. package/skills/eng-qa-exploratory/SKILL.md +188 -0
  117. package/skills/eng-qa-gate/SKILL.md +370 -0
  118. package/skills/eng-qa-gate/assets/checklist-validacao.md +291 -0
  119. package/skills/eng-qa-graphql-contract/SKILL.md +256 -0
  120. package/skills/eng-qa-quality-report/SKILL.md +412 -0
  121. package/skills/eng-qa-test-plan/SKILL.md +466 -0
  122. package/skills/eng-qa-test-plan/assets/test-coverage-template.md +92 -0
  123. package/skills/eng-qa-test-plan/assets/test-patterns.md +178 -0
  124. package/skills/eng-qa-testsprite/SKILL.md +325 -0
  125. package/skills/eng-qa-testsprite/references/testsprite-mcp.md +224 -0
  126. package/skills/eng-qa-unit-test/SKILL.md +471 -0
  127. package/skills/eng-rabbitmq/SKILL.md +661 -0
  128. package/skills/eng-scraper/SKILL.md +683 -0
  129. package/skills/eng-scraper-robot-builder/SKILL.md +370 -0
  130. package/skills/eng-security-patch/SKILL.md +378 -0
  131. package/skills/eng-security-triage/SKILL.md +266 -0
  132. package/skills/eng-task-comment/SKILL.md +60 -0
  133. package/skills/eng-tech-analyst/SKILL.md +529 -0
  134. package/skills/eng-threat-model/SKILL.md +161 -0
  135. package/skills/init-jarvis/SKILL.md +1304 -0
  136. package/skills/init-jarvis/assets/mcp-configs.md +389 -0
  137. package/skills/init-jarvis/assets/onboarding-checklist.md +104 -0
  138. package/skills/init-jarvis/assets/setup-guide.md +360 -0
  139. package/skills/lovable-prompt-generator/SKILL.md +304 -0
  140. package/skills/prod-roadmap-report/README.md +303 -0
  141. package/skills/prod-roadmap-report/SKILL.md +198 -0
  142. package/skills/prod-roadmap-report/commands/status.compiled.single.team.md +23 -0
  143. package/skills/prod-roadmap-report/commands/status.list.projects.md +17 -0
  144. package/skills/prod-roadmap-report/commands/status.memory.md +192 -0
  145. package/skills/prod-roadmap-report/commands/status.roadmap.preview.md +94 -0
  146. package/skills/prod-roadmap-report/references/detailed-guide.md +236 -0
  147. package/skills/prod-roadmap-report/rules/detailed-guide.md +237 -0
  148. package/skills/prod-roadmap-report/rules/status-report-rules.md +44 -0
  149. package/skills/prod-roadmap-report/templates/template-multiple-teams-compiled-status.md +53 -0
  150. package/skills/prod-roadmap-report/templates/template-projects-list.md +23 -0
  151. package/skills/prod-roadmap-report/templates/template-single-team-compiled-status.md +60 -0
  152. package/skills/prod-roadmap-report/templates/template-single-team-status.md +49 -0
  153. package/skills/prod-specs/SKILL.md +108 -0
  154. package/skills/prod-specs/references/prod.spec.clarify.md +176 -0
  155. package/skills/prod-specs/references/prod.spec.epic.md +107 -0
  156. package/skills/prod-specs/references/prod.spec.frd.md +135 -0
  157. package/skills/prod-specs/references/prod.spec.issue.md +145 -0
  158. package/skills/prod-specs/references/prod.spec.prd.md +118 -0
  159. package/skills/prod-specs/rules/prod-spec-rules.md +186 -0
  160. package/skills/prod-specs/templates/prod-breakdown-template.md +136 -0
  161. package/skills/prod-specs/templates/prod-epic-template.md +76 -0
  162. package/skills/prod-specs/templates/prod-frd-template.md +172 -0
  163. package/skills/prod-specs/templates/prod-issue-template.md +68 -0
  164. package/skills/prod-specs/templates/prod-prd-full-template.md +159 -0
  165. package/skills/prod-specs/templates/prod-prd-template.md +173 -0
  166. package/skills/prod-specs-update/SKILL.md +272 -0
  167. package/skills/report-issue/SKILL.md +156 -0
  168. package/taxonomy.md +270 -0
  169. package/templates/AGENTS.md +189 -0
  170. package/templates/CDD aplicado a Prompts.md +182 -0
  171. package/templates/ENV-template.md +187 -0
  172. package/templates/engineering/AGENTS-template.md +71 -0
  173. package/templates/engineering/ARD-template.md +193 -0
  174. package/templates/engineering/CONTACTS-template.md +135 -0
  175. package/templates/engineering/PR-template.md +40 -0
  176. package/templates/engineering/RFC-Playbook.md +325 -0
  177. package/templates/engineering/RFC-template.md +199 -0
  178. package/templates/engineering/architecture-template.md +277 -0
  179. package/templates/engineering/breakdown-subtasks-template.md +582 -0
  180. package/templates/engineering/c4-model-template.md +516 -0
  181. package/templates/engineering/data-contract-template.md +135 -0
  182. package/templates/engineering/data-pipeline-template.md +163 -0
  183. package/templates/engineering/plan-template.md +255 -0
  184. package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +311 -0
  185. package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +249 -0
  186. package/templates/engineering/qa/qa.cypress-test-template.md +172 -0
  187. package/templates/engineering/qa/qa.exploratory-session-template.md +148 -0
  188. package/templates/engineering/qa/qa.quality-report-template.md +130 -0
  189. package/templates/engineering/qa/qa.release-signoff-template.md +54 -0
  190. package/templates/engineering/qa/qa.sprint-plan-template.md +49 -0
  191. package/templates/engineering/swagger-template.md +145 -0
  192. package/templates/engineering/tech-spec-template.md +497 -0
  193. package/templates/engineering/work-progress-template.md +155 -0
  194. package/workflows/AGENTS.md +240 -0
  195. package/workflows/README.md +160 -0
  196. package/workflows/all-tools.md +11 -0
  197. package/workflows/engineering/data/data.contract.md +202 -0
  198. package/workflows/engineering/data/data.new-pipeline.md +234 -0
  199. package/workflows/engineering/eng.breakdown-subtasks.md +420 -0
  200. package/workflows/engineering/eng.bug-audit.md +591 -0
  201. package/workflows/engineering/eng.build-tech-spec.md +1116 -0
  202. package/workflows/engineering/eng.create-ard-from-code.md +259 -0
  203. package/workflows/engineering/eng.create-ard.md +382 -0
  204. package/workflows/engineering/eng.create-rfc.md +245 -0
  205. package/workflows/engineering/eng.debug.md +479 -0
  206. package/workflows/engineering/eng.docs.md +40 -0
  207. package/workflows/engineering/eng.light-arch.md +84 -0
  208. package/workflows/engineering/eng.plan.md +213 -0
  209. package/workflows/engineering/eng.pr.md +466 -0
  210. package/workflows/engineering/eng.pre-pr.md +167 -0
  211. package/workflows/engineering/eng.review.md +185 -0
  212. package/workflows/engineering/eng.rpa.robot.md +342 -0
  213. package/workflows/engineering/eng.security-audit.md +312 -0
  214. package/workflows/engineering/eng.security-incident.md +275 -0
  215. package/workflows/engineering/eng.security-pipeline.md +210 -0
  216. package/workflows/engineering/eng.security-review.md +235 -0
  217. package/workflows/engineering/eng.start.md +494 -0
  218. package/workflows/engineering/eng.work.md +558 -0
  219. package/workflows/engineering/frontend/eng.frontend-component.md +190 -0
  220. package/workflows/engineering/frontend/eng.frontend-perf-audit.md +375 -0
  221. package/workflows/engineering/frontend/eng.frontend-review.md +185 -0
  222. package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +51 -0
  223. package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +51 -0
  224. package/workflows/engineering/qa/eng.qa-exploratory-session.md +60 -0
  225. package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +202 -0
  226. package/workflows/engineering/qa/eng.qa-quality-report.md +83 -0
  227. package/workflows/engineering/qa/eng.qa-refinement-entry.md +83 -0
  228. package/workflows/engineering/qa/eng.qa-release-signoff.md +170 -0
  229. package/workflows/engineering/qa/eng.qa-sprint-planning.md +100 -0
  230. package/workflows/engineering/ta/eng.ta.atendimento.md +93 -0
  231. package/workflows/product/prod.roadmap.preview.md +110 -0
  232. package/workflows/product/prod.spec.breakdown.md +163 -0
  233. package/workflows/product/prod.spec.clarify.md +178 -0
  234. package/workflows/product/prod.spec.epic.md +154 -0
  235. package/workflows/product/prod.spec.frd.md +96 -0
  236. package/workflows/product/prod.spec.issue.md +145 -0
  237. package/workflows/product/prod.spec.md +60 -0
  238. package/workflows/product/prod.spec.prd.md +100 -0
  239. package/workflows/taxonomy.md +92 -0
  240. package/workflows/warm-up.md +574 -0
@@ -0,0 +1,582 @@
1
+ # Template de Subtarefa ULTRA DETALHADA
2
+
3
+ > Este é o template que DEVE ser usado para CADA subtarefa gerada pelo workflow `eng.breakdown-subtasks`.
4
+ >
5
+ > **IMPORTANTE:** Este template deve ser preenchido COMPLETAMENTE. Cada seção é obrigatória.
6
+
7
+ ---
8
+
9
+ ## ⚠️ Princípio de Independência
10
+
11
+ Esta subtarefa é uma **unidade de entrega completa e independente**. Será um card no `$TASK_MANAGER` com **sua própria branch, seu próprio commit e seu próprio deploy**.
12
+
13
+ Por isso, ela é uma **fatia vertical** (vertical slice): atravessa todas as camadas necessárias (migration + DTO + use-case + factory + repository + controller + enum + testes, ou — no frontend — componente + estado + integração + estilos + testes) e entrega um fluxo end-to-end funcional.
14
+
15
+ **Valide antes de iniciar a implementação — responda sim para as três perguntas:**
16
+
17
+ 1. [ ] **Posso fazer merge desta branch sem quebrar o sistema?**
18
+ 2. [ ] **Posso testar/demonstrar esta entrega sem depender das próximas subtarefas?**
19
+ 3. [ ] **Esta subtarefa entrega valor observável** (endpoint funcionando, modal usável, tela navegável)?
20
+
21
+ Se qualquer resposta for **não** → pare e reagrupe com a subtarefa seguinte antes de continuar.
22
+
23
+ **Exemplos:**
24
+
25
+ - ✅ Uma subtarefa = um endpoint inteiro (todas as camadas envolvidas)
26
+ - ✅ Uma subtarefa = um modal inteiro no frontend
27
+ - ✅ Uma subtarefa = uma tela inteira ou alteração de uma tela existente
28
+ - ❌ Uma subtarefa só para adicionar valor em enum
29
+ - ❌ Uma subtarefa só para editar um repository
30
+ - ❌ Uma subtarefa só para criar a factory de um use-case
31
+ - ❌ Uma subtarefa só para criar um DTO
32
+
33
+ ---
34
+
35
+ ## 🎯 O Que Você Vai Fazer
36
+
37
+ {Descrição em 2-3 frases do objetivo final desta subtarefa. O que o desenvolvedor terá completado quando terminar?}
38
+
39
+ **Exemplo:**
40
+
41
+ > Criar o endpoint de registro de usuários que recebe email e senha, valida os dados, cria o usuário no banco de dados e retorna um token JWT. Ao finalizar, novos usuários poderão se cadastrar via API.
42
+
43
+ ---
44
+
45
+ ## 📋 Contexto da Tarefa
46
+
47
+ ### Por que isso é necessário?
48
+
49
+ {Explique o motivo de negócio ou técnico para esta subtarefa existir. Por que é importante? O que acontece se não for feito?}
50
+
51
+ **Exemplo:**
52
+
53
+ > O sistema precisa permitir que novos usuários se cadastrem. Este endpoint é a porta de entrada para novos usuários no sistema. Sem ele, não há forma de criar contas e acessar a aplicação.
54
+
55
+ ### Onde isso se encaixa?
56
+
57
+ {Explique como esta subtarefa se conecta com as outras subtarefas e como contribui para a feature final. Mostre as dependências de forma clara.}
58
+
59
+ **Exemplo:**
60
+
61
+ > Esta é a primeira subtarefa do fluxo de autenticação. O frontend de registro (próxima subtarefa) depende deste endpoint estar funcionando. Os testes de integração (subtarefa [QA]) também precisam que este endpoint exista.
62
+
63
+ ### Pré-requisitos
64
+
65
+ {Liste os pré-requisitos que precisam estar prontos ANTES de começar esta subtarefa. Inclua outras subtarefas, configurações, ou ambiente.}
66
+
67
+ - [ ] {Subtarefa anterior concluída - ex: [DATA] Criar migration tabela users}
68
+ - [ ] {Variável de ambiente configurada - ex: JWT_SECRET definido em .env}
69
+ - [ ] {Acesso a recurso específico - ex: Banco de dados local rodando}
70
+
71
+ **Exemplo:**
72
+
73
+ ```
74
+ - [ ] [DATA] Criar migration tabela users - Você precisa da tabela criada no banco
75
+ - [ ] JWT_SECRET configurado em .env - Necessário para gerar tokens
76
+ - [ ] Banco de dados local rodando - `docker-compose up` deve funcionar
77
+ ```
78
+
79
+ ---
80
+
81
+ ## 🛠️ Stack Técnico
82
+
83
+ ### Tecnologias e Versões
84
+
85
+ | Tecnologia | Versão/Especificação | Para que será usada |
86
+ | ---------- | -------------------- | -------------------------------------------- |
87
+ | {Tech 1} | {versão específica} | {descrição detalhada do uso nesta subtarefa} |
88
+ | {Tech 2} | {versão específica} | {descrição detalhada do uso nesta subtarefa} |
89
+
90
+ **Exemplo:**
91
+
92
+ | Tecnologia | Versão | Para que será usada |
93
+ | ----------------- | ------ | -------------------------------------------------------------- |
94
+ | Express.js | 4.18+ | Framework HTTP para criar o endpoint |
95
+ | bcrypt | 5.1+ | Hash seguro da senha do usuário |
96
+ | jsonwebtoken | 9.0+ | Geração e validação de JWT para autenticação |
97
+ | express-validator | 7.0+ | Validação de email, senha e outros campos de entrada |
98
+ | TypeScript | 5.0+ | Tipagem estática para evitar erros em tempo de desenvolvimento |
99
+
100
+ ### Padrões do Projeto a Seguir
101
+
102
+ {Descreva os padrões específicos que DEVEM ser seguidos neste projeto. Nomenclatura, estrutura de pastas, convenções de código, etc.}
103
+
104
+ **Exemplo:**
105
+
106
+ ```bash
107
+ - **Nomenclatura**:
108
+ - Variáveis: camelCase (ex: `passwordHash`)
109
+ - Funções: camelCase (ex: `registerUser()`)
110
+ - Classes: PascalCase (ex: `AuthService`)
111
+ - Constantes: UPPER_SNAKE_CASE (ex: `MAX_PASSWORD_LENGTH`)
112
+
113
+ - **Estrutura de pastas**:
114
+ - Controllers em `src/controllers/`
115
+ - Services em `src/services/`
116
+ - Routes em `src/routes/`
117
+ - Schemas de validação em `src/schemas/`
118
+ - Testes em `src/__tests__/`
119
+
120
+ - **Convenções de código**:
121
+ - Usar Prettier para formatação
122
+ - ESLint deve estar clean
123
+ - TypeScript sem `any`
124
+ - Imports alfabeticamente organizados
125
+ ```
126
+
127
+ ### Arquivos de Referência (COPIE O PADRÃO)
128
+
129
+ {Liste arquivos EXISTENTES no projeto que devem ser usados como referência. Descreva o que você deve copiar de cada um.}
130
+
131
+ **Exemplo:**
132
+
133
+ ```bash
134
+ - `src/controllers/user.controller.ts`
135
+ - Use como base para a estrutura do controller de auth
136
+ - Copie o padrão de error handling
137
+ - Observe como injeta as dependências
138
+
139
+ - `src/services/user.service.ts`
140
+ - Copie a estrutura geral de um service
141
+ - Veja como usa o repository
142
+
143
+ - `src/routes/user.routes.ts`
144
+ - Copie o padrão de definição de rotas
145
+ - Observe o uso de middleware de validação
146
+ ```
147
+
148
+ ---
149
+
150
+ ## 📁 Arquivos a Criar/Modificar
151
+
152
+ {Lista de arquivos que serão criados ou modificados. Seja MUITO específico com os caminhos.}
153
+
154
+ | Arquivo | Ação | Descrição |
155
+ | ------------------------------------ | ------------ | -------------------------------------------------------------- |
156
+ | `src/schemas/auth.schema.ts` | 🆕 Criar | Schema com validação de email e senha usando express-validator |
157
+ | `src/services/auth.service.ts` | 🆕 Criar | Service com lógica de negócio (hash, validação, criação) |
158
+ | `src/controllers/auth.controller.ts` | 🆕 Criar | Controller que recebe a request e chama o service |
159
+ | `src/routes/auth.routes.ts` | 🆕 Criar | Rotas da API de autenticação (POST /api/auth/register) |
160
+ | `src/routes/index.ts` | ✏️ Modificar | Adicionar import e registro das rotas de autenticação |
161
+ | `src/__tests__/auth.spec.ts` | 🆕 Criar | Testes unitários e de integração para o endpoint |
162
+
163
+ ---
164
+
165
+ ## 👣 Passo a Passo de Implementação
166
+
167
+ {Quebrar a implementação em passos específicos e acionáveis. CADA passo deve incluir código COMPLETO.}
168
+
169
+ ### Passo 1: {Título Descritivo}
170
+
171
+ **O que fazer:**
172
+ {Explicação detalhada do que fazer neste passo. Seja específico.}
173
+
174
+ **Exemplo:**
175
+
176
+ > Criar o arquivo de schema que valida os dados de entrada. Este arquivo define as regras de validação para email e senha antes de processar a requisição.
177
+
178
+ **Código:**
179
+
180
+ ```{language}
181
+ // {CAMINHO COMPLETO E EXATO DO ARQUIVO}
182
+
183
+ {CÓDIGO COMPLETO - NÃO USE "..." OU PLACEHOLDER}
184
+ ```
185
+
186
+ **Exemplo:**
187
+
188
+ ```typescript
189
+ // src/schemas/auth.schema.ts
190
+ import { body } from "express-validator";
191
+
192
+ export const registerSchema = [
193
+ body("email").isEmail().withMessage("Email inválido").normalizeEmail(),
194
+ body("password")
195
+ .isLength({ min: 8 })
196
+ .withMessage("Senha deve ter no mínimo 8 caracteres")
197
+ .matches(/[A-Z]/)
198
+ .withMessage("Senha deve conter letra maiúscula")
199
+ .matches(/[0-9]/)
200
+ .withMessage("Senha deve conter número"),
201
+ body("name").trim().notEmpty().withMessage("Nome é obrigatório"),
202
+ ];
203
+ ```
204
+
205
+ **Explicação do código:**
206
+
207
+ {Explique linha a linha as partes importantes. Por que cada linha existe? O que faz?}
208
+
209
+ - Linha X-Y: {O que faz e por quê}
210
+ - Linha A-B: {O que faz e por quê}
211
+
212
+ **Exemplo:**
213
+
214
+ - `body('email')`: Pega o campo 'email' do request body
215
+ - `.isEmail()`: Valida se é um email válido
216
+ - `.normalizeEmail()`: Padroniza o email (lowercase, remove pontos desnecessários)
217
+ - `.isLength({ min: 8 })`: Valida comprimento mínimo de 8 caracteres
218
+ - `.matches(/[A-Z]/)`: Usa regex para exigir pelo menos uma letra maiúscula
219
+ - `.matches(/[0-9]/)`: Usa regex para exigir pelo menos um dígito
220
+
221
+ **Validação deste passo:**
222
+
223
+ {Como verificar se este passo está correto?}
224
+
225
+ - [ ] Arquivo criado em `src/schemas/auth.schema.ts`
226
+ - [ ] Imports estão corretos
227
+ - [ ] Exportação da função/classe funciona
228
+ - [ ] TypeScript compila sem erros
229
+
230
+ ---
231
+
232
+ ### Passo 2: {Título Descritivo}
233
+
234
+ **O que fazer:**
235
+ {Descrição detalhada}
236
+
237
+ **Código:**
238
+
239
+ ```{language}
240
+ // {CAMINHO COMPLETO}
241
+
242
+ {CÓDIGO COMPLETO}
243
+ ```
244
+
245
+ **Explicação do código:**
246
+
247
+ {Explicar linha a linha}
248
+
249
+ **Validação deste passo:**
250
+
251
+ - [ ] {Item 1}
252
+ - [ ] {Item 2}
253
+
254
+ ---
255
+
256
+ ### Passo 3: Continuar com mais passos conforme necessário
257
+
258
+ {Adicionar quantos passos forem necessários. Lembrar: cada passo deve ter código COMPLETO.}
259
+
260
+ ---
261
+
262
+ ## 🧪 Testes Obrigatórios
263
+
264
+ {Fornecer código COMPLETO dos testes. Todos os cenários listados abaixo devem ter testes.}
265
+
266
+ ### Arquivo de teste: `{caminho/do/arquivo.spec.ts}`
267
+
268
+ ```{language}
269
+ // {CAMINHO COMPLETO DO ARQUIVO DE TESTE}
270
+
271
+ {CÓDIGO COMPLETO DOS TESTES COM TODOS OS CENÁRIOS}
272
+ ```
273
+
274
+ **Exemplo:**
275
+
276
+ ```typescript
277
+ // src/__tests__/auth.controller.spec.ts
278
+ import request from "supertest";
279
+ import { app } from "../app";
280
+ import { UserRepository } from "../repositories/user.repository";
281
+
282
+ // Mock do repositório se necessário
283
+ jest.mock("../repositories/user.repository");
284
+
285
+ describe("POST /api/auth/register", () => {
286
+ beforeEach(() => {
287
+ jest.clearAllMocks();
288
+ });
289
+
290
+ it("deve registrar usuário com dados válidos", async () => {
291
+ const response = await request(app).post("/api/auth/register").send({
292
+ email: "newuser@example.com",
293
+ password: "Senha123!",
294
+ name: "New User",
295
+ });
296
+
297
+ expect(response.status).toBe(201);
298
+ expect(response.body).toHaveProperty("token");
299
+ expect(response.body.user).toEqual({
300
+ id: expect.any(String),
301
+ email: "newuser@example.com",
302
+ name: "New User",
303
+ });
304
+ });
305
+
306
+ it("deve retornar 400 para email inválido", async () => {
307
+ const response = await request(app).post("/api/auth/register").send({
308
+ email: "email-sem-arroba",
309
+ password: "Senha123!",
310
+ name: "Test User",
311
+ });
312
+
313
+ expect(response.status).toBe(400);
314
+ expect(response.body.code).toBe("VALIDATION_ERROR");
315
+ expect(response.body.details).toBeDefined();
316
+ });
317
+
318
+ it("deve retornar 400 para senha fraca (< 8 caracteres)", async () => {
319
+ const response = await request(app).post("/api/auth/register").send({
320
+ email: "user@example.com",
321
+ password: "Abc123",
322
+ name: "Test User",
323
+ });
324
+
325
+ expect(response.status).toBe(400);
326
+ expect(response.body.details[0].msg).toContain("8 caracteres");
327
+ });
328
+
329
+ it("deve retornar 409 para email duplicado", async () => {
330
+ // Primeiro registro
331
+ await request(app).post("/api/auth/register").send({
332
+ email: "duplicate@example.com",
333
+ password: "Senha123!",
334
+ name: "User 1",
335
+ });
336
+
337
+ // Segundo registro com mesmo email
338
+ const response = await request(app).post("/api/auth/register").send({
339
+ email: "duplicate@example.com",
340
+ password: "Senha123!",
341
+ name: "User 2",
342
+ });
343
+
344
+ expect(response.status).toBe(409);
345
+ expect(response.body.code).toBe("EMAIL_EXISTS");
346
+ });
347
+ });
348
+ ```
349
+
350
+ ### Cenários a Testar
351
+
352
+ {Lista de TODOS os cenários que precisam ser testados. Inclua casos de sucesso E erro.}
353
+
354
+ | Cenário | Input | Output Esperado | ✓ |
355
+ | -------------------------- | ------------------------------------------- | ------------------------------ | --- |
356
+ | Registro válido | email válido, senha válida, nome preenchido | 201 + token + dados do usuário | [ ] |
357
+ | Email inválido | email sem @ ou incompleto | 400 VALIDATION_ERROR | [ ] |
358
+ | Senha muito fraca | senha com < 8 caracteres | 400 VALIDATION_ERROR | [ ] |
359
+ | Senha sem letra maiúscula | senha sem letra maiúscula (ex: "senha123") | 400 VALIDATION_ERROR | [ ] |
360
+ | Senha sem número | senha sem dígito (ex: "Senha!") | 400 VALIDATION_ERROR | [ ] |
361
+ | Email duplicado | email já cadastrado | 409 EMAIL_EXISTS | [ ] |
362
+ | Nome vazio | name vazio ou whitespace | 400 VALIDATION_ERROR | [ ] |
363
+ | Campo obrigatório faltando | requisição sem campo email/password/name | 400 VALIDATION_ERROR | [ ] |
364
+
365
+ ### Como Executar os Testes
366
+
367
+ ```bash
368
+ {COMANDO ESPECÍFICO PARA RODAR APENAS OS TESTES DESTA SUBTAREFA}
369
+ ```
370
+
371
+ **Exemplo:**
372
+
373
+ ```bash
374
+ # Rodar todos os testes de autenticação
375
+ npm test -- auth.controller.spec.ts
376
+
377
+ # Rodar com cobertura
378
+ npm test -- --coverage auth.controller.spec.ts
379
+
380
+ # Rodar um teste específico
381
+ npm test -- -t "deve registrar usuário com dados válidos"
382
+ ```
383
+
384
+ ---
385
+
386
+ ## ✅ Checklist de Conclusão
387
+
388
+ Antes de marcar esta subtarefa como concluída, verifique TODOS os itens abaixo:
389
+
390
+ ### Implementação
391
+
392
+ - [ ] Código implementado conforme descrito nos passos acima
393
+ - [ ] Nenhum `console.log()` ou `debugger` deixado no código
394
+ - [ ] Nenhum `TODO` ou `FIXME` sem issue linkada
395
+ - [ ] Imports organizados e sem imports não utilizados
396
+ - [ ] Tipagem TypeScript completa (sem `any`, sem tipos implícitos)
397
+ - [ ] Nenhuma variável desnecessária
398
+ - [ ] Código segue o padrão de nomenclatura do projeto
399
+
400
+ ### Qualidade
401
+
402
+ - [ ] Todos os testes unitários passando (`npm test`)
403
+ - [ ] Testes de integração passando (se aplicável)
404
+ - [ ] Linter sem erros (`npm run lint`)
405
+ - [ ] Formatação ok (`npx prettier --write .`)
406
+ - [ ] Build sem erros (`npm run build`)
407
+
408
+ ### Documentação
409
+
410
+ - [ ] Comentários adicionados em código complexo
411
+ - [ ] JSDoc adicionado em funções públicas
412
+ - [ ] README atualizado (se necessário)
413
+ - [ ] Tipos TypeScript exportados se necessário
414
+
415
+ ### Revisão
416
+
417
+ - [ ] Auto-revisão do código feita (reler o próprio código)
418
+ - [ ] PR criado com descrição clara (referenciar esta subtarefa)
419
+ - [ ] Screenshots/vídeos anexados (se houver mudança visual)
420
+ - [ ] Testado manualmente via Postman/Insomnia (se for API)
421
+
422
+ ---
423
+
424
+ ## ⚠️ Riscos e Cuidados
425
+
426
+ {Tabela com riscos identificados, probabilidade, impacto e como evitar.}
427
+
428
+ | Risco | Probabilidade | Impacto | Como Evitar |
429
+ | --------- | ---------------- | ---------------- | ---------------------------- |
430
+ | {Risco 1} | Alta/Média/Baixa | Alto/Médio/Baixo | {Ação preventiva específica} |
431
+ | {Risco 2} | ... | ... | ... |
432
+
433
+ **Exemplo:**
434
+
435
+ | Risco | Probabilidade | Impacto | Como Evitar |
436
+ | ------------------------------- | ------------- | ------- | --------------------------------------------------------- |
437
+ | JWT_SECRET exposto no código | Média | Alto | Sempre usar variáveis de ambiente (.env), NUNCA hardcoded |
438
+ | Senha armazenada em texto plano | Alta | Alto | Sempre usar bcrypt com salt >= 10 rounds |
439
+ | Validação incompleta de email | Média | Médio | Testar casos edge (+, domínios especiais, internacionais) |
440
+
441
+ ### Armadilhas Comuns (NÃO FAÇA ISSO!)
442
+
443
+ {Lista de erros comuns neste tipo de subtarefa e por que são errados.}
444
+
445
+ - ❌ {Erro comum 1 e por que é errado}
446
+ - ❌ {Erro comum 2 e por que é errado}
447
+
448
+ **Exemplo:**
449
+
450
+ - ❌ Não retornar `passwordHash` no response - O cliente nunca deve receber o hash da senha
451
+ - ❌ Usar `salt` < 10 no bcrypt - Menos seguro, mais rápido de quebrar
452
+ - ❌ Colocar `JWT_SECRET` no código - Vai ser exposto no repositório
453
+ - ❌ Não validar email no backend - Cliente pode falsificar dados
454
+ - ❌ Usar `Math.random()` para gerar tokens - Não é criptograficamente seguro
455
+
456
+ ### Dicas de Implementação
457
+
458
+ {Dicas úteis que ajudam a fazer melhor.}
459
+
460
+ - 💡 {Dica útil 1}
461
+ - 💡 {Dica útil 2}
462
+
463
+ **Exemplo:**
464
+
465
+ - 💡 Use o Postman para testar a API manualmente antes de escrever os testes
466
+ - 💡 Configure o `.env.example` com os valores necessários para a documentação
467
+ - 💡 Valide email no backend mesmo que valide no frontend
468
+ - 💡 Use variáveis de ambiente para senhas de acesso (nunca hardcode)
469
+ - 💡 Teste com emails internacionais (não-ASCII) para validação robusta
470
+
471
+ ---
472
+
473
+ ## 🔗 Dependências
474
+
475
+ > ⚠️ **Lembrete**: dependências aqui se referem a **outras fatias verticais completas** — outro endpoint já mergeado, outra tela já navegável, outra configuração de ambiente. **Nunca** camadas isoladas da própria subtarefa. Se você está prestes a listar "schema", "DTO", "migration" ou "enum" como dependência externa, é sinal de que esses itens deveriam estar **dentro desta subtarefa**, não em uma anterior.
476
+
477
+ ### Esta subtarefa depende de
478
+
479
+ {Outras subtarefas (entregáveis verticais completos) que DEVEM estar mergeadas antes de começar.}
480
+
481
+ - `[{STACK}] {Nome da subtarefa anterior — entregável completo}` - {Por que precisa estar pronto}
482
+
483
+ **Exemplo:**
484
+
485
+ - `[BACKEND] Endpoint POST /api/auth/register` - O frontend deste fluxo consome esse endpoint (já pronto e testado)
486
+ - `[INFRA] Configurar variáveis de ambiente JWT` - Pré-requisito de ambiente
487
+
488
+ ### Subtarefas que dependem desta
489
+
490
+ {Quais outras fatias verticais serão desbloqueadas quando esta estiver mergeada.}
491
+
492
+ - `[{STACK}] {Nome da próxima subtarefa — também um entregável completo}` - {O que será desbloqueado}
493
+
494
+ **Exemplo:**
495
+
496
+ - `[FRONTEND] Tela de registro` - Passa a ter endpoint real para consumir
497
+ - `[QA] Testes E2E do fluxo de autenticação` - Fluxo completo torna-se testável
498
+
499
+ ### Pode ser feita em paralelo com
500
+
501
+ {Quais fatias verticais NÃO têm dependência com esta e podem rodar simultaneamente.}
502
+
503
+ - `[{STACK}] {Nome de fatia paralela}` - {Por que não há dependência}
504
+
505
+ **Exemplo:**
506
+
507
+ - `[BACKEND] Endpoint POST /api/auth/logout` - Outra fatia vertical independente do mesmo módulo
508
+ - `[FRONTEND] Tela de recuperação de senha` - Consome outro endpoint, sem dependência com este
509
+
510
+ ---
511
+
512
+ ## 📚 Referências
513
+
514
+ ### Documentação Oficial
515
+
516
+ {Links para documentação oficial das tecnologias usadas.}
517
+
518
+ - [{Nome da documentação}]({URL}) - {Para que usar}
519
+
520
+ **Exemplo:**
521
+
522
+ - [Express.js Documentation](https://expressjs.com/) - Como criar endpoints
523
+ - [bcrypt Documentation](https://www.npmjs.com/package/bcrypt) - Hash de senhas
524
+ - [JWT.io](https://jwt.io/) - Entender estrutura de JWT e debugar tokens
525
+ - [express-validator Guide](https://express-validator.github.io/docs/) - Validação de inputs
526
+
527
+ ### Arquivos de Exemplo no Projeto
528
+
529
+ {Arquivos que existem no projeto e que você deve usar como referência.}
530
+
531
+ - `{caminho/arquivo-exemplo.ts}` - {O que copiar daqui}
532
+
533
+ **Exemplo:**
534
+
535
+ - `src/controllers/user.controller.ts` - Copie a estrutura geral de um controller
536
+ - `src/services/user.service.ts` - Padrão de como estruturar um service
537
+ - `src/__tests__/user.spec.ts` - Exemplo de teste de API com supertest
538
+
539
+ ### Tech Spec Relacionada
540
+
541
+ {Referências para a Tech Spec original que originou esta subtarefa.}
542
+
543
+ - Seção {X.Y} da Tech Spec: {Descrição ou link}
544
+
545
+ **Exemplo:**
546
+
547
+ - Seção 3.1 "Fluxo de Autenticação": Explica o flow de login/registro
548
+ - Seção 4.2 "Decisões de Segurança": Explica por que usar bcrypt e JWT
549
+
550
+ ---
551
+
552
+ ## 🆘 Precisa de Ajuda?
553
+
554
+ Se você ficar preso em algum ponto da implementação, siga estes passos:
555
+
556
+ 1. **Revise os arquivos de referência** listados na seção "Arquivos de Exemplo"
557
+ - Compare sua implementação com o exemplo
558
+ - Copie estruturas que funcionam
559
+
560
+ 2. **Consulte a Tech Spec** original
561
+ - Leia a seção relevante com mais detalhes
562
+ - Procure por diagrama ou exemplo
563
+
564
+ 3. **Pergunte no Slack**
565
+ - Canal: `#{canal-relevante}`
566
+ - Mencione: `@{pessoa-ou-team}`
567
+ - Descreva: O que já tentou e onde ficou preso
568
+
569
+ 4. **Documentação Oficial**
570
+ - {links para docs das tecnologias}
571
+ - {links para docs do projeto}
572
+
573
+ ---
574
+
575
+ ## Notas Importantes
576
+
577
+ - **Não pule nenhum passo** - Cada um é necessário
578
+ - **Siga o template exatamente** - Não improvise estrutura
579
+ - **Código completo** - Não use "..." ou placeholder
580
+ - **Testes obrigatórios** - Todos devem passar
581
+ - **Qualidade antes de velocidade** - Melhor fazer certo do que rápido
582
+ - **Pergunte dúvidas** - Melhor clarificar agora do que fazer errado