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.
- package/AGENTS.md +416 -0
- package/LICENSE +21 -0
- package/README.md +190 -0
- package/agents/AGENTS.md +234 -0
- package/agents/README.md +309 -0
- package/agents/engineering/data/eng.data-engineer.agent.md +309 -0
- package/agents/engineering/eng.agent.md +303 -0
- package/agents/engineering/eng.bug-hunter.md +386 -0
- package/agents/engineering/eng.cybersecurity.agent.md +503 -0
- package/agents/engineering/eng.dev-code-reviewer.md +148 -0
- package/agents/engineering/eng.docs-writer.md +152 -0
- package/agents/engineering/eng.frontend.agent.md +117 -0
- package/agents/engineering/eng.rpa.agent.md +215 -0
- package/agents/engineering/eng.tech-analyst.agent.md +102 -0
- package/agents/engineering/eng.ux-designer.agent.md +193 -0
- package/agents/engineering/qa/eng.qa.cypress-specialist.md +109 -0
- package/agents/engineering/qa/eng.qa.quality-champion-task-agent.md +85 -0
- package/agents/engineering/qa/eng.qa.quality-strategist.md +111 -0
- package/agents/engineering/qa/eng.qa.test-architect.md +400 -0
- package/agents/engineering/qa/eng.qa.test-planner.md +477 -0
- package/agents/engineering/qa/eng.qa.testing-engineer.md +339 -0
- package/agents/product/prod.pm-checker.md +52 -0
- package/bin/commands/docs-publish.js +184 -0
- package/bin/commands/docs-sync.js +139 -0
- package/bin/commands/info.js +87 -0
- package/bin/commands/init.js +237 -0
- package/bin/commands/install-rtk.js +90 -0
- package/bin/commands/list.js +48 -0
- package/bin/commands/qa-signoff.js +112 -0
- package/bin/commands/whoami.js +43 -0
- package/bin/jarvis.js +159 -0
- package/bin/lib/auth/session.js +56 -0
- package/bin/lib/config/constants.js +123 -0
- package/bin/lib/config/ide-config.js +233 -0
- package/bin/lib/core/scanner.js +124 -0
- package/bin/lib/core/sync-engine.js +551 -0
- package/bin/lib/docs/fetch-file.sh +41 -0
- package/bin/lib/docs/publish-file.sh +284 -0
- package/bin/lib/docs/validate-frontmatter.js +157 -0
- package/bin/lib/env-loader.js +198 -0
- package/bin/lib/tasks/comment.js +131 -0
- package/bin/lib/utils/git-parser.js +145 -0
- package/bin/lib/utils/logger.js +104 -0
- package/bin/lib/utils/npmrc-parser.js +106 -0
- package/bin/lib/utils/paths.js +55 -0
- package/bin/lib/utils/ui.js +59 -0
- package/bin/lib/vcs/api.js +312 -0
- package/bin/lib/vcs/create-issue.js +43 -0
- package/bin/lib/vcs/create-merge.js +43 -0
- package/bin/lib/vcs/fetch-raw.js +30 -0
- package/bin/postinstall.js +41 -0
- package/members.md +25 -0
- package/package.json +55 -0
- package/rules/AGENTS.md +205 -0
- package/rules/engineering/data/data-rules.md +200 -0
- package/rules/engineering/eng-rules.md +243 -0
- package/rules/engineering/eng-security-rules.md +186 -0
- package/rules/engineering/eng.breakdown-subtasks-rules.md +585 -0
- package/rules/engineering/eng.bump-rules.md +27 -0
- package/rules/engineering/eng.docs-scraping-rules.md +64 -0
- package/rules/engineering/eng.downstream-flow-rules.md +297 -0
- package/rules/engineering/eng.integrations-rules.md +73 -0
- package/rules/engineering/eng.plan-rules.md +333 -0
- package/rules/engineering/eng.pr-rules.md +359 -0
- package/rules/engineering/eng.pre-pr-rules.md +103 -0
- package/rules/engineering/eng.start-rules.md +246 -0
- package/rules/engineering/eng.tech-spec-rules.md +968 -0
- package/rules/engineering/eng.work-rules.md +312 -0
- package/rules/engineering/frontend/eng.frontend-rules.md +147 -0
- package/rules/engineering/qa/eng.qa.cypress-standards-rules.md +259 -0
- package/rules/engineering/qa/eng.qa.exploratory-session-rules.md +137 -0
- package/rules/engineering/qa/eng.qa.quality-gate-scoring-rules.md +181 -0
- package/rules/engineering/qa/eng.qa.tech-spec-validation-criteria-rules.md +120 -0
- package/rules/engineering/rpa/eng.rpa-rules.md +230 -0
- package/rules/product/README.md +24 -0
- package/rules/product/prod-rules.md +151 -0
- package/rules/rtk-rules.md +68 -0
- package/skills/AGENTS.md +290 -0
- package/skills/SKILLS-ROADMAP.md +333 -0
- package/skills/churn-audit/SKILL.md +385 -0
- package/skills/context-detect/SKILL.md +399 -0
- package/skills/context-detect/assets/context-profile-template.md +127 -0
- package/skills/docs-central/README.md +310 -0
- package/skills/docs-central/SKILL.md +423 -0
- package/skills/docs-index/SKILL.md +377 -0
- package/skills/eng-ai-engineer/SKILL.md +296 -0
- package/skills/eng-arch-c4/SKILL.md +358 -0
- package/skills/eng-arch-c4/assets/example-code.md +189 -0
- package/skills/eng-arch-c4/assets/example-component.md +105 -0
- package/skills/eng-arch-c4/assets/example-container.md +104 -0
- package/skills/eng-arch-c4/assets/example-context.md +81 -0
- package/skills/eng-backend/SKILL.md +776 -0
- package/skills/eng-browser-extension-builder/SKILL.md +385 -0
- package/skills/eng-cybersecurity/SKILL.md +645 -0
- package/skills/eng-data-bi/SKILL.md +199 -0
- package/skills/eng-data-debug/SKILL.md +307 -0
- package/skills/eng-data-engineer/SKILL.md +256 -0
- package/skills/eng-data-onboard/SKILL.md +310 -0
- package/skills/eng-data-orchestrator/SKILL.md +426 -0
- package/skills/eng-design-system/SKILL.md +619 -0
- package/skills/eng-docs-write/SKILL.md +312 -0
- package/skills/eng-frontend/SKILL.md +913 -0
- package/skills/eng-jira-comment/SKILL.md +17 -0
- package/skills/eng-microfrontend/SKILL.md +602 -0
- package/skills/eng-ms-trace/SKILL.md +469 -0
- package/skills/eng-nestjs/SKILL.md +791 -0
- package/skills/eng-performance-engineer/SKILL.md +312 -0
- package/skills/eng-pr/SKILL.md +339 -0
- package/skills/eng-qa-a11y-audit/SKILL.md +269 -0
- package/skills/eng-qa-bug-report/SKILL.md +1088 -0
- package/skills/eng-qa-bug-report/TASK_MANAGERS.md +138 -0
- package/skills/eng-qa-cypress-e2e/SKILL.md +177 -0
- package/skills/eng-qa-dev-guide/SKILL.md +164 -0
- package/skills/eng-qa-e2e/SKILL.md +400 -0
- package/skills/eng-qa-e2e-spec-writer/SKILL.md +322 -0
- package/skills/eng-qa-exploratory/SKILL.md +188 -0
- package/skills/eng-qa-gate/SKILL.md +370 -0
- package/skills/eng-qa-gate/assets/checklist-validacao.md +291 -0
- package/skills/eng-qa-graphql-contract/SKILL.md +256 -0
- package/skills/eng-qa-quality-report/SKILL.md +412 -0
- package/skills/eng-qa-test-plan/SKILL.md +466 -0
- package/skills/eng-qa-test-plan/assets/test-coverage-template.md +92 -0
- package/skills/eng-qa-test-plan/assets/test-patterns.md +178 -0
- package/skills/eng-qa-testsprite/SKILL.md +325 -0
- package/skills/eng-qa-testsprite/references/testsprite-mcp.md +224 -0
- package/skills/eng-qa-unit-test/SKILL.md +471 -0
- package/skills/eng-rabbitmq/SKILL.md +661 -0
- package/skills/eng-scraper/SKILL.md +683 -0
- package/skills/eng-scraper-robot-builder/SKILL.md +370 -0
- package/skills/eng-security-patch/SKILL.md +378 -0
- package/skills/eng-security-triage/SKILL.md +266 -0
- package/skills/eng-task-comment/SKILL.md +60 -0
- package/skills/eng-tech-analyst/SKILL.md +529 -0
- package/skills/eng-threat-model/SKILL.md +161 -0
- package/skills/init-jarvis/SKILL.md +1304 -0
- package/skills/init-jarvis/assets/mcp-configs.md +389 -0
- package/skills/init-jarvis/assets/onboarding-checklist.md +104 -0
- package/skills/init-jarvis/assets/setup-guide.md +360 -0
- package/skills/lovable-prompt-generator/SKILL.md +304 -0
- package/skills/prod-roadmap-report/README.md +303 -0
- package/skills/prod-roadmap-report/SKILL.md +198 -0
- package/skills/prod-roadmap-report/commands/status.compiled.single.team.md +23 -0
- package/skills/prod-roadmap-report/commands/status.list.projects.md +17 -0
- package/skills/prod-roadmap-report/commands/status.memory.md +192 -0
- package/skills/prod-roadmap-report/commands/status.roadmap.preview.md +94 -0
- package/skills/prod-roadmap-report/references/detailed-guide.md +236 -0
- package/skills/prod-roadmap-report/rules/detailed-guide.md +237 -0
- package/skills/prod-roadmap-report/rules/status-report-rules.md +44 -0
- package/skills/prod-roadmap-report/templates/template-multiple-teams-compiled-status.md +53 -0
- package/skills/prod-roadmap-report/templates/template-projects-list.md +23 -0
- package/skills/prod-roadmap-report/templates/template-single-team-compiled-status.md +60 -0
- package/skills/prod-roadmap-report/templates/template-single-team-status.md +49 -0
- package/skills/prod-specs/SKILL.md +108 -0
- package/skills/prod-specs/references/prod.spec.clarify.md +176 -0
- package/skills/prod-specs/references/prod.spec.epic.md +107 -0
- package/skills/prod-specs/references/prod.spec.frd.md +135 -0
- package/skills/prod-specs/references/prod.spec.issue.md +145 -0
- package/skills/prod-specs/references/prod.spec.prd.md +118 -0
- package/skills/prod-specs/rules/prod-spec-rules.md +186 -0
- package/skills/prod-specs/templates/prod-breakdown-template.md +136 -0
- package/skills/prod-specs/templates/prod-epic-template.md +76 -0
- package/skills/prod-specs/templates/prod-frd-template.md +172 -0
- package/skills/prod-specs/templates/prod-issue-template.md +68 -0
- package/skills/prod-specs/templates/prod-prd-full-template.md +159 -0
- package/skills/prod-specs/templates/prod-prd-template.md +173 -0
- package/skills/prod-specs-update/SKILL.md +272 -0
- package/skills/report-issue/SKILL.md +156 -0
- package/taxonomy.md +270 -0
- package/templates/AGENTS.md +189 -0
- package/templates/CDD aplicado a Prompts.md +182 -0
- package/templates/ENV-template.md +187 -0
- package/templates/engineering/AGENTS-template.md +71 -0
- package/templates/engineering/ARD-template.md +193 -0
- package/templates/engineering/CONTACTS-template.md +135 -0
- package/templates/engineering/PR-template.md +40 -0
- package/templates/engineering/RFC-Playbook.md +325 -0
- package/templates/engineering/RFC-template.md +199 -0
- package/templates/engineering/architecture-template.md +277 -0
- package/templates/engineering/breakdown-subtasks-template.md +582 -0
- package/templates/engineering/c4-model-template.md +516 -0
- package/templates/engineering/data-contract-template.md +135 -0
- package/templates/engineering/data-pipeline-template.md +163 -0
- package/templates/engineering/plan-template.md +255 -0
- package/templates/engineering/qa/eng.qa.quality-gate-examples-template.md +311 -0
- package/templates/engineering/qa/eng.qa.quality-gate-report-template.md +249 -0
- package/templates/engineering/qa/qa.cypress-test-template.md +172 -0
- package/templates/engineering/qa/qa.exploratory-session-template.md +148 -0
- package/templates/engineering/qa/qa.quality-report-template.md +130 -0
- package/templates/engineering/qa/qa.release-signoff-template.md +54 -0
- package/templates/engineering/qa/qa.sprint-plan-template.md +49 -0
- package/templates/engineering/swagger-template.md +145 -0
- package/templates/engineering/tech-spec-template.md +497 -0
- package/templates/engineering/work-progress-template.md +155 -0
- package/workflows/AGENTS.md +240 -0
- package/workflows/README.md +160 -0
- package/workflows/all-tools.md +11 -0
- package/workflows/engineering/data/data.contract.md +202 -0
- package/workflows/engineering/data/data.new-pipeline.md +234 -0
- package/workflows/engineering/eng.breakdown-subtasks.md +420 -0
- package/workflows/engineering/eng.bug-audit.md +591 -0
- package/workflows/engineering/eng.build-tech-spec.md +1116 -0
- package/workflows/engineering/eng.create-ard-from-code.md +259 -0
- package/workflows/engineering/eng.create-ard.md +382 -0
- package/workflows/engineering/eng.create-rfc.md +245 -0
- package/workflows/engineering/eng.debug.md +479 -0
- package/workflows/engineering/eng.docs.md +40 -0
- package/workflows/engineering/eng.light-arch.md +84 -0
- package/workflows/engineering/eng.plan.md +213 -0
- package/workflows/engineering/eng.pr.md +466 -0
- package/workflows/engineering/eng.pre-pr.md +167 -0
- package/workflows/engineering/eng.review.md +185 -0
- package/workflows/engineering/eng.rpa.robot.md +342 -0
- package/workflows/engineering/eng.security-audit.md +312 -0
- package/workflows/engineering/eng.security-incident.md +275 -0
- package/workflows/engineering/eng.security-pipeline.md +210 -0
- package/workflows/engineering/eng.security-review.md +235 -0
- package/workflows/engineering/eng.start.md +494 -0
- package/workflows/engineering/eng.work.md +558 -0
- package/workflows/engineering/frontend/eng.frontend-component.md +190 -0
- package/workflows/engineering/frontend/eng.frontend-perf-audit.md +375 -0
- package/workflows/engineering/frontend/eng.frontend-review.md +185 -0
- package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +51 -0
- package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +51 -0
- package/workflows/engineering/qa/eng.qa-exploratory-session.md +60 -0
- package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +202 -0
- package/workflows/engineering/qa/eng.qa-quality-report.md +83 -0
- package/workflows/engineering/qa/eng.qa-refinement-entry.md +83 -0
- package/workflows/engineering/qa/eng.qa-release-signoff.md +170 -0
- package/workflows/engineering/qa/eng.qa-sprint-planning.md +100 -0
- package/workflows/engineering/ta/eng.ta.atendimento.md +93 -0
- package/workflows/product/prod.roadmap.preview.md +110 -0
- package/workflows/product/prod.spec.breakdown.md +163 -0
- package/workflows/product/prod.spec.clarify.md +178 -0
- package/workflows/product/prod.spec.epic.md +154 -0
- package/workflows/product/prod.spec.frd.md +96 -0
- package/workflows/product/prod.spec.issue.md +145 -0
- package/workflows/product/prod.spec.md +60 -0
- package/workflows/product/prod.spec.prd.md +100 -0
- package/workflows/taxonomy.md +92 -0
- 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
|