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,968 @@
|
|
|
1
|
+
---
|
|
2
|
+
trigger: always_on
|
|
3
|
+
env_file: "@/ENV.md"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> **Applies to:** HUB: all | POSITION: all | AREA: all | SQUAD: all
|
|
7
|
+
|
|
8
|
+
# Regras de Tech Spec e Especificação Técnica
|
|
9
|
+
|
|
10
|
+
## Principais Regras
|
|
11
|
+
|
|
12
|
+
- Nunca invente dados ou informações. Se não souber, **não assuma nada**, pergunte para o usuário.
|
|
13
|
+
- Sempre siga as instruções de criação de tech spec na íntegra, seguindo os templates e workflows.
|
|
14
|
+
- Tech specs devem ser **auto-contidas**: um desenvolvedor deve poder executá-las sem precisar perguntar.
|
|
15
|
+
- Toda **decisão arquitetural deve ter justificativa documentada**.
|
|
16
|
+
- **Subtarefas devem ser fatias verticais completas** (endpoint inteiro, modal inteiro, tela inteira) com **mínimo 4h e máximo 1 dia** de trabalho. Nunca fatias horizontais (só enum, só repository, só factory). Se menor que 4h, agrupar com a próxima (sinal de fatia atômica). Se maior que 1 dia, quebrar em **duas fatias verticais independentes** — nunca em camadas.
|
|
17
|
+
- Sempre documente **riscos e mitigações** de forma explícita.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Localização de Arquivos
|
|
22
|
+
|
|
23
|
+
> **NOTA**: Tech specs NÃO são salvas em `master-docs/`. São salvas na sessão do projeto e anexadas no Jira.
|
|
24
|
+
|
|
25
|
+
Arquivos são referenciados usando `$IDE/` que resolve automaticamente para a pasta do IDE atual (`.windsurf/`, `.claude/`, `.cursor/`).
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Arquivos de Instruções e Comandos
|
|
30
|
+
|
|
31
|
+
Sempre siga as instruções de acordo com as relações abaixo:
|
|
32
|
+
|
|
33
|
+
### Workflows de Tech Spec
|
|
34
|
+
|
|
35
|
+
- **import `$IDE/workflows/engineering/eng.build-tech-spec.md`**: Criação de tech spec a partir de história do Jira
|
|
36
|
+
- **import `$IDE/workflows/engineering/eng.breakdown-subtasks.md`**: Quebra de tech spec em subtarefas executáveis
|
|
37
|
+
- **import `$IDE/workflows/engineering/eng.start.md`**: Início de desenvolvimento de feature (referência)
|
|
38
|
+
- **import `$IDE/workflows/engineering/eng.plan.md`**: Planejamento de execução (referência)
|
|
39
|
+
|
|
40
|
+
### Templates
|
|
41
|
+
|
|
42
|
+
- **import `$IDE/templates/engineering/tech-spec-template.md`**: Template completo de tech spec
|
|
43
|
+
|
|
44
|
+
### Regras
|
|
45
|
+
|
|
46
|
+
- **import `$IDE/rules/engineering/eng.tech-spec-rules.md`**: Regras específicas de tech spec (este arquivo)
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Estrutura de Arquivos de Tech Spec
|
|
51
|
+
|
|
52
|
+
### Localização
|
|
53
|
+
|
|
54
|
+
Tech specs devem ser salvas na **sessão do projeto** (NÃO em master-docs):
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
$SESSION_FOLDER/{TASK_MANAGER_KEY}/tech-spec.md
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
> 📁 **Padrão**: O `TASK_MANAGER_KEY` deve ser o ID do card em **lowercase**.
|
|
61
|
+
|
|
62
|
+
**Exemplos:**
|
|
63
|
+
|
|
64
|
+
- `$SESSIONS_DIR/eng/task-123/tech-spec.md`
|
|
65
|
+
- `$SESSIONS_DIR/eng/story-456/tech-spec.md`
|
|
66
|
+
- `$SESSIONS_DIR/eng/bug-789/tech-spec.md`
|
|
67
|
+
|
|
68
|
+
### Por que na sessão?
|
|
69
|
+
|
|
70
|
+
1. **Anexo no Jira**: A tech spec é anexada diretamente na issue do Jira como fonte da verdade
|
|
71
|
+
2. **Sessão temporária**: A sessão é usada durante o desenvolvimento e pode ser limpa depois
|
|
72
|
+
3. **Evita poluição**: Não cria arquivos permanentes no repositório de código
|
|
73
|
+
4. **Rastreabilidade**: O Jira é o sistema oficial de documentação de tasks
|
|
74
|
+
|
|
75
|
+
### Nomenclatura
|
|
76
|
+
|
|
77
|
+
- **Formato da pasta**: `{jira-key}` em **lowercase** (ex: `TASK-123` → `task-123`)
|
|
78
|
+
- **Arquivo**: Sempre `tech-spec.md` ou `architecture.md`
|
|
79
|
+
- **Exemplo**: `$SESSIONS_DIR/eng/task-123/tech-spec.md`
|
|
80
|
+
|
|
81
|
+
> ⚠️ **IMPORTANTE**: NÃO adicione descrições ou sufixos ao nome da pasta.
|
|
82
|
+
> Use **apenas** o TASK_MANAGER_KEY convertido para lowercase.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Princípios de Tech Spec
|
|
87
|
+
|
|
88
|
+
### 1. Rastreabilidade Total
|
|
89
|
+
|
|
90
|
+
**Princípio**: Toda tech spec deve ser rastreável até a história de negócio original.
|
|
91
|
+
|
|
92
|
+
**O que isso significa:**
|
|
93
|
+
|
|
94
|
+
- Link para história do Jira no topo do documento
|
|
95
|
+
- Referência aos critérios de aceitação de produto
|
|
96
|
+
- Conexão clara entre requisitos de negócio e decisões técnicas
|
|
97
|
+
- IDs de subtarefas vinculadas à história pai
|
|
98
|
+
|
|
99
|
+
**Validação:**
|
|
100
|
+
|
|
101
|
+
- [ ] Link para Jira funciona
|
|
102
|
+
- [ ] Critérios de aceitação de produto estão documentados
|
|
103
|
+
- [ ] Cada subtarefa referencia a tech spec
|
|
104
|
+
- [ ] Tech spec referencia PRD/FRD se existirem
|
|
105
|
+
|
|
106
|
+
**Exemplo:**
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
## ✅ Bom:
|
|
110
|
+
|
|
111
|
+
related_story: STORY-123
|
|
112
|
+
link_task: https://jira.empresa.com/browse/STORY-123
|
|
113
|
+
related_prd: Sistema de Autenticação (link)
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## ❌ Ruim:
|
|
118
|
+
|
|
119
|
+
related_story: história do jira
|
|
120
|
+
link_task: (não preenchido)
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
### 2. Decisões Justificadas
|
|
128
|
+
|
|
129
|
+
**Princípio**: Toda decisão arquitetural deve ter contexto, alternativas e justificativa.
|
|
130
|
+
|
|
131
|
+
**Estrutura Obrigatória para Decisões:**
|
|
132
|
+
|
|
133
|
+
```markdown
|
|
134
|
+
Decisão: {Título da decisão}
|
|
135
|
+
|
|
136
|
+
Contexto:
|
|
137
|
+
{Por que precisamos decidir isso? Qual problema estamos resolvendo?}
|
|
138
|
+
|
|
139
|
+
Opções Consideradas:
|
|
140
|
+
|
|
141
|
+
- Opção A: {descrição}
|
|
142
|
+
- Prós: {vantagens}
|
|
143
|
+
- Contras: {desvantagens}
|
|
144
|
+
- Trade-offs: {o que ganhamos/perdemos}
|
|
145
|
+
|
|
146
|
+
- Opção B: {descrição}
|
|
147
|
+
- Prós: {vantagens}
|
|
148
|
+
- Contras: {desvantagens}
|
|
149
|
+
- Trade-offs: {o que ganhamos/perdemos}
|
|
150
|
+
|
|
151
|
+
Decisão: {Opção escolhida}
|
|
152
|
+
|
|
153
|
+
Justificativa:
|
|
154
|
+
{Por que escolhemos esta opção? Quais critérios usamos?}
|
|
155
|
+
|
|
156
|
+
Consequências:
|
|
157
|
+
{Impactos positivos e negativos desta decisão}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Validação:**
|
|
161
|
+
|
|
162
|
+
- [ ] Pelo menos 2 alternativas foram consideradas
|
|
163
|
+
- [ ] Prós e contras estão documentados
|
|
164
|
+
- [ ] Justificativa é clara e objetiva
|
|
165
|
+
- [ ] Consequências (positivas e negativas) estão documentadas
|
|
166
|
+
|
|
167
|
+
**Exemplo:**
|
|
168
|
+
|
|
169
|
+
```markdown
|
|
170
|
+
✅ Bom:
|
|
171
|
+
Decisão: Armazenamento de Tokens JWT
|
|
172
|
+
|
|
173
|
+
Contexto: Precisamos decidir onde armazenar tokens JWT no frontend
|
|
174
|
+
para manter usuários autenticados.
|
|
175
|
+
|
|
176
|
+
Opções Consideradas:
|
|
177
|
+
|
|
178
|
+
- Opção A: localStorage
|
|
179
|
+
- Prós: Persistente, simples de implementar
|
|
180
|
+
- Contras: Vulnerável a XSS, não expira automaticamente
|
|
181
|
+
- Trade-offs: Conveniência vs. Segurança
|
|
182
|
+
|
|
183
|
+
- Opção B: httpOnly cookies
|
|
184
|
+
- Prós: Proteção contra XSS, gerenciado pelo browser
|
|
185
|
+
- Contras: Vulnerável a CSRF (mitigável), requer backend configurado
|
|
186
|
+
- Trade-offs: Segurança vs. Complexidade
|
|
187
|
+
|
|
188
|
+
Decisão: httpOnly cookies
|
|
189
|
+
|
|
190
|
+
Justificativa: Segurança é prioridade P0. CSRF pode ser mitigado com
|
|
191
|
+
tokens CSRF. XSS é vetor de ataque mais comum e perigoso.
|
|
192
|
+
|
|
193
|
+
Consequências:
|
|
194
|
+
|
|
195
|
+
- (+) Proteção robusta contra XSS
|
|
196
|
+
- (+) Tokens expiram automaticamente
|
|
197
|
+
- (-) Requer implementação de proteção CSRF
|
|
198
|
+
- (-) Mais complexo em ambientes multi-domínio
|
|
199
|
+
|
|
200
|
+
❌ Ruim:
|
|
201
|
+
Decisão: Usar JWT
|
|
202
|
+
Justificativa: É melhor que sessões.
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
### 3. Subtarefas Executáveis
|
|
208
|
+
|
|
209
|
+
**Princípio**: Cada subtarefa é um **entregável completo e independente** (fatia vertical), executável por um desenvolvedor em **4h a 1 dia** sem precisar de contexto adicional. Terá sua própria branch, seu próprio commit e seu próprio deploy — portanto, precisa ser mergeável isoladamente sem quebrar o sistema.
|
|
210
|
+
|
|
211
|
+
**Características de Subtarefa Bem Definida:**
|
|
212
|
+
|
|
213
|
+
1. **Entregabilidade Independente (fatia vertical)** — PRÉ-REQUISITO ABSOLUTO
|
|
214
|
+
- É um entregável completo end-to-end: endpoint inteiro, modal inteiro, tela inteira
|
|
215
|
+
- Atravessa todas as camadas necessárias na MESMA subtarefa (migration + DTO + enum + use-case + factory + repository + controller + testes; ou tipos + hooks + integração + componente + estilos + testes no frontend)
|
|
216
|
+
- Mergeada isoladamente, a aplicação continua funcionando
|
|
217
|
+
- A entrega é observável: testável, demonstrável ou verificável
|
|
218
|
+
- **Nunca** é uma fatia horizontal (só enum, só repository, só factory, só DTO, só contratos)
|
|
219
|
+
|
|
220
|
+
2. **Título Claro e Acionável**
|
|
221
|
+
- Usa verbo de ação: Criar, Implementar, Adicionar, Atualizar
|
|
222
|
+
- Específico sobre o que fazer
|
|
223
|
+
- Não genérico ou vago
|
|
224
|
+
|
|
225
|
+
3. **Descrição Completa**
|
|
226
|
+
- O QUE fazer
|
|
227
|
+
- COMO fazer (direcionalmente)
|
|
228
|
+
- POR QUE fazer (contexto)
|
|
229
|
+
|
|
230
|
+
4. **Arquivos Explícitos**
|
|
231
|
+
- Lista de arquivos a modificar/criar
|
|
232
|
+
- Tipo de mudança (Modificação/Criação/Remoção)
|
|
233
|
+
- Breve descrição da mudança
|
|
234
|
+
|
|
235
|
+
5. **Critérios Testáveis**
|
|
236
|
+
- Critérios de aceitação verificáveis
|
|
237
|
+
- Como validar que está pronto
|
|
238
|
+
- Não vago ("funcionar bem")
|
|
239
|
+
|
|
240
|
+
6. **Testes Definidos**
|
|
241
|
+
- Quais testes unitários criar
|
|
242
|
+
- Quais testes de integração criar
|
|
243
|
+
- Casos de teste específicos
|
|
244
|
+
|
|
245
|
+
7. **Dependências Mapeadas**
|
|
246
|
+
- O que precisa estar pronto antes (outras fatias verticais completas, nunca camadas isoladas)
|
|
247
|
+
- O que esta subtarefa bloqueia
|
|
248
|
+
|
|
249
|
+
**Template de Validação:**
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
[ ] É uma fatia vertical completa (endpoint inteiro, modal inteiro, tela inteira)
|
|
253
|
+
[ ] Mergeada isoladamente, o sistema continua funcionando
|
|
254
|
+
[ ] A entrega é observável (testável ou demonstrável)
|
|
255
|
+
[ ] Título é específico e acionável
|
|
256
|
+
[ ] Descrição tem O QUE, COMO e POR QUE
|
|
257
|
+
[ ] Arquivos afetados estão listados
|
|
258
|
+
[ ] Critérios de aceitação são testáveis
|
|
259
|
+
[ ] Testes necessários estão definidos
|
|
260
|
+
[ ] Dependências estão mapeadas (outras fatias verticais, não camadas)
|
|
261
|
+
[ ] Estimativa entre 4h e 1 dia
|
|
262
|
+
[ ] Um dev pode executar sem perguntas adicionais
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**Exemplo:**
|
|
266
|
+
|
|
267
|
+
```markdown
|
|
268
|
+
✅ Bom:
|
|
269
|
+
|
|
270
|
+
### SUBTASK-003: Criar endpoint POST /api/users com validação de email
|
|
271
|
+
|
|
272
|
+
Descrição:
|
|
273
|
+
Implementar endpoint de criação de usuários que valida formato de email
|
|
274
|
+
antes de persistir no banco. Retorna 400 se email inválido.
|
|
275
|
+
|
|
276
|
+
Arquivos a Modificar/Criar:
|
|
277
|
+
|
|
278
|
+
- `backend/routes/users.py` - [Criação] - Novo endpoint POST /api/users
|
|
279
|
+
- `backend/validators/email.py` - [Criação] - Função de validação de email
|
|
280
|
+
- `backend/tests/test_users.py` - [Criação] - Testes do endpoint
|
|
281
|
+
|
|
282
|
+
Critérios de Aceitação:
|
|
283
|
+
|
|
284
|
+
- [ ] POST /api/users aceita {name, email, password}
|
|
285
|
+
- [ ] Valida formato de email com regex padrão RFC 5322
|
|
286
|
+
- [ ] Retorna 400 com mensagem se email inválido
|
|
287
|
+
- [ ] Retorna 201 com user criado se válido
|
|
288
|
+
- [ ] Hash de senha usando bcrypt
|
|
289
|
+
|
|
290
|
+
Testes Requeridos:
|
|
291
|
+
|
|
292
|
+
- [ ] test_create_user_valid_email() - email válido retorna 201
|
|
293
|
+
- [ ] test_create_user_invalid_email() - email inválido retorna 400
|
|
294
|
+
- [ ] test_create_user_duplicate_email() - email duplicado retorna 409
|
|
295
|
+
|
|
296
|
+
Dependências: SUBTASK-002 (migration users)
|
|
297
|
+
Estimativa: 1.5h
|
|
298
|
+
|
|
299
|
+
❌ Ruim:
|
|
300
|
+
|
|
301
|
+
### SUBTASK-003: Implementar API de usuários
|
|
302
|
+
|
|
303
|
+
Descrição: Criar API para gerenciar usuários
|
|
304
|
+
|
|
305
|
+
Critérios: API deve funcionar
|
|
306
|
+
Testes: Testar tudo
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
### 4. Riscos Documentados
|
|
312
|
+
|
|
313
|
+
**Princípio**: Riscos devem ser identificados proativamente com mitigações e planos B.
|
|
314
|
+
|
|
315
|
+
**Estrutura de Documentação de Riscos:**
|
|
316
|
+
|
|
317
|
+
| Risco | Probabilidade | Impacto | Mitigação | Plano B |
|
|
318
|
+
| ---------------------- | ---------------- | ---------------- | --------------------- | ------------------------ |
|
|
319
|
+
| {Descrição específica} | Alta/Média/Baixa | Alto/Médio/Baixo | {Como reduzir/evitar} | {Alternativa se ocorrer} |
|
|
320
|
+
|
|
321
|
+
**Categorias de Riscos Comuns:**
|
|
322
|
+
|
|
323
|
+
1. **Riscos Técnicos**
|
|
324
|
+
- Performance degradada
|
|
325
|
+
- Complexidade subestimada
|
|
326
|
+
- Incompatibilidade de bibliotecas
|
|
327
|
+
- Débito técnico introduzido
|
|
328
|
+
|
|
329
|
+
2. **Riscos de Dependências**
|
|
330
|
+
- API de terceiros instável
|
|
331
|
+
- Mudanças em dependências externas
|
|
332
|
+
- Bloqueios por outras histórias
|
|
333
|
+
|
|
334
|
+
3. **Riscos de Dados**
|
|
335
|
+
- Migração complexa
|
|
336
|
+
- Perda de dados
|
|
337
|
+
- Inconsistência de estado
|
|
338
|
+
|
|
339
|
+
4. **Riscos de Segurança**
|
|
340
|
+
- Vulnerabilidades introduzidas
|
|
341
|
+
- Dados sensíveis expostos
|
|
342
|
+
- Autenticação/Autorização mal implementada
|
|
343
|
+
|
|
344
|
+
**Validação:**
|
|
345
|
+
|
|
346
|
+
- [ ] Pelo menos 3 riscos identificados
|
|
347
|
+
- [ ] Probabilidade e impacto avaliados
|
|
348
|
+
- [ ] Mitigação definida para cada risco
|
|
349
|
+
- [ ] Plano B existe para riscos críticos (Alto impacto)
|
|
350
|
+
|
|
351
|
+
**Exemplo:**
|
|
352
|
+
|
|
353
|
+
```markdown
|
|
354
|
+
✅ Bom:
|
|
355
|
+
| Risco | Probabilidade | Impacto | Mitigação | Plano B |
|
|
356
|
+
|-------|---------------|---------|-----------|---------|
|
|
357
|
+
| API de pagamento de terceiros instável causa timeouts | Média | Alto | Implementar retry com backoff exponencial (3 tentativas). Timeout de 5s. Circuit breaker após 5 falhas. | Fila assíncrona: salvar pagamento pendente, processar em background, notificar usuário quando concluir |
|
|
358
|
+
| Migration de dados falha em produção deixando DB inconsistente | Baixa | Crítico | Testar migration em cópia de prod. Criar script de rollback. Backup antes de executar. Validação pós-migration. | Script de rollback automático. Restore de backup. Feature flag para desabilitar feature. |
|
|
359
|
+
|
|
360
|
+
❌ Ruim:
|
|
361
|
+
| Risco | Probabilidade | Impacto | Mitigação | Plano B |
|
|
362
|
+
|-------|---------------|---------|-----------|---------|
|
|
363
|
+
| Algo pode dar errado | Não sei | Alto | Testar bem | Voltar atrás |
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
### 5. Estimativas Realistas
|
|
369
|
+
|
|
370
|
+
**Princípio**: Estimativas devem incluir implementação, testes, code review e buffer para imprevistos.
|
|
371
|
+
|
|
372
|
+
**Componentes da Estimativa:**
|
|
373
|
+
|
|
374
|
+
```
|
|
375
|
+
Estimativa de Subtarefa =
|
|
376
|
+
+ Tempo de implementação
|
|
377
|
+
+ Tempo de testes (unitários + integração)
|
|
378
|
+
+ Tempo de code review e ajustes
|
|
379
|
+
+ Buffer (10-20%)
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
**Regras:**
|
|
383
|
+
|
|
384
|
+
- **Mínimo por subtarefa**: 4h (abaixo disso é sinal forte de fatia horizontal atômica; agrupar com a próxima)
|
|
385
|
+
- **Máximo por subtarefa**: até 1 dia de trabalho
|
|
386
|
+
- **Ideal**: 4-6h
|
|
387
|
+
|
|
388
|
+
**Se > 1 dia** → quebrar em **duas fatias verticais independentes** (ex: dois endpoints distintos, duas telas distintas), **nunca** em fatias horizontais (camada de dados vs camada de API).
|
|
389
|
+
|
|
390
|
+
**Se < 4h** → agrupar com a próxima subtarefa até ultrapassar 4h formando uma fatia vertical completa.
|
|
391
|
+
|
|
392
|
+
**Estimativa Total:**
|
|
393
|
+
|
|
394
|
+
```
|
|
395
|
+
Estimativa Bruta = Soma de todas as subtarefas
|
|
396
|
+
Buffer = 25-30% (para imprevistos, discussões, blockers)
|
|
397
|
+
Estimativa Final = Estimativa Bruta * 1.25
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
**Validação:**
|
|
401
|
+
|
|
402
|
+
- [ ] Cada subtarefa tem estimativa em horas
|
|
403
|
+
- [ ] Toda subtarefa tem ≥ 4h e ≤ 1 dia
|
|
404
|
+
- [ ] Toda subtarefa é uma fatia vertical completa (nunca horizontal)
|
|
405
|
+
- [ ] Estimativa total inclui buffer de 25-30%
|
|
406
|
+
- [ ] Estimativa total bate com expectativa da história original
|
|
407
|
+
|
|
408
|
+
**Exemplo:**
|
|
409
|
+
|
|
410
|
+
```markdown
|
|
411
|
+
✅ Bom:
|
|
412
|
+
Fase 1: Setup (3.5h)
|
|
413
|
+
|
|
414
|
+
- SUBTASK-001: Instalar dependências - 0.5h
|
|
415
|
+
- SUBTASK-002: Criar migration - 1h
|
|
416
|
+
- SUBTASK-003: Configurar env vars - 1h
|
|
417
|
+
- SUBTASK-004: Testes de setup - 1h
|
|
418
|
+
|
|
419
|
+
Total Fases: 18h
|
|
420
|
+
Buffer (25%): +4.5h
|
|
421
|
+
Estimativa Final: 22.5h (~3 dias úteis)
|
|
422
|
+
|
|
423
|
+
❌ Ruim:
|
|
424
|
+
Fase 1: Setup
|
|
425
|
+
|
|
426
|
+
- SUBTASK-001: Fazer setup do backend - 5h (muito grande!)
|
|
427
|
+
- SUBTASK-002: Configurar coisas - ??? (sem estimativa)
|
|
428
|
+
|
|
429
|
+
Total: Uns 3 dias (vago, sem quebra)
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
### 6. Testes Abrangentes
|
|
435
|
+
|
|
436
|
+
**Princípio**: Estratégia de testes deve cobrir unitário, integração e E2E com critérios claros.
|
|
437
|
+
|
|
438
|
+
**Pirâmide de Testes Esperada:**
|
|
439
|
+
|
|
440
|
+
```
|
|
441
|
+
/\
|
|
442
|
+
/ \ E2E (10-20%)
|
|
443
|
+
/ \
|
|
444
|
+
/______\ Integração (20-30%)
|
|
445
|
+
/ \
|
|
446
|
+
/__________\ Unitários (50-70%)
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
**Para Cada Nível:**
|
|
450
|
+
|
|
451
|
+
**Testes Unitários:**
|
|
452
|
+
|
|
453
|
+
- [ ] Testar funções/métodos isoladamente
|
|
454
|
+
- [ ] Mockar dependências externas
|
|
455
|
+
- [ ] Cobertura mínima: 80% do código novo
|
|
456
|
+
- [ ] Casos: caminho feliz + edge cases + erros
|
|
457
|
+
|
|
458
|
+
**Testes de Integração:**
|
|
459
|
+
|
|
460
|
+
- [ ] Testar integração entre módulos
|
|
461
|
+
- [ ] Testar integrações com banco (usar DB de teste)
|
|
462
|
+
- [ ] Testar integrações com APIs externas (mockar ou sandbox)
|
|
463
|
+
- [ ] Validar contratos entre componentes
|
|
464
|
+
|
|
465
|
+
**Testes E2E:**
|
|
466
|
+
|
|
467
|
+
- [ ] Testar fluxos críticos de usuário
|
|
468
|
+
- [ ] Usar dados realistas
|
|
469
|
+
- [ ] Validar funcionalidade completa
|
|
470
|
+
- [ ] Automatizar cenários de regressão
|
|
471
|
+
|
|
472
|
+
**Testes de Performance** (se aplicável):
|
|
473
|
+
|
|
474
|
+
- [ ] Load testing: simular N usuários concorrentes
|
|
475
|
+
- [ ] Stress testing: encontrar limite do sistema
|
|
476
|
+
- [ ] Validar SLAs (ex: API < 200ms p95)
|
|
477
|
+
|
|
478
|
+
**Testes de Segurança** (se aplicável):
|
|
479
|
+
|
|
480
|
+
- [ ] OWASP Top 10 verificado
|
|
481
|
+
- [ ] Scan de vulnerabilidades
|
|
482
|
+
- [ ] Penetration testing básico
|
|
483
|
+
|
|
484
|
+
**Exemplo:**
|
|
485
|
+
|
|
486
|
+
```markdown
|
|
487
|
+
✅ Bom:
|
|
488
|
+
|
|
489
|
+
### Estratégia de Testes
|
|
490
|
+
|
|
491
|
+
**Cobertura Alvo**: 85%
|
|
492
|
+
|
|
493
|
+
**Testes Unitários** (15 testes):
|
|
494
|
+
|
|
495
|
+
- `test_validate_email_valid()` - Email válido retorna True
|
|
496
|
+
- `test_validate_email_invalid_format()` - Email sem @ retorna False
|
|
497
|
+
- `test_validate_email_empty()` - Email vazio levanta ValueError
|
|
498
|
+
- `test_hash_password()` - Senha é hasheada com bcrypt
|
|
499
|
+
- `test_verify_password_correct()` - Senha correta retorna True
|
|
500
|
+
- ... (mais 10 testes)
|
|
501
|
+
|
|
502
|
+
**Testes de Integração** (5 testes):
|
|
503
|
+
|
|
504
|
+
- `test_create_user_persists_to_db()` - User criado é salvo no DB
|
|
505
|
+
- `test_create_user_duplicate_email_raises()` - Email duplicado levanta IntegrityError
|
|
506
|
+
- `test_login_returns_jwt()` - Login bem-sucedido retorna JWT válido
|
|
507
|
+
- ... (mais 2 testes)
|
|
508
|
+
|
|
509
|
+
**Testes E2E** (3 testes):
|
|
510
|
+
|
|
511
|
+
- `test_user_signup_and_login_flow()` - Signup → Login → Acessa dashboard
|
|
512
|
+
- `test_password_reset_flow()` - Reset → Email → Nova senha → Login
|
|
513
|
+
- `test_invalid_login_shows_error()` - Credenciais erradas → Mensagem de erro
|
|
514
|
+
|
|
515
|
+
**Testes de Performance**:
|
|
516
|
+
|
|
517
|
+
- Load: 100 usuários concorrentes fazendo login
|
|
518
|
+
- Meta: p95 < 500ms, p99 < 1s
|
|
519
|
+
- Ferramenta: k6
|
|
520
|
+
|
|
521
|
+
❌ Ruim:
|
|
522
|
+
Testes: Vamos testar tudo bem.
|
|
523
|
+
Cobertura: O máximo possível.
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
---
|
|
527
|
+
|
|
528
|
+
### 7. Documentação Completa
|
|
529
|
+
|
|
530
|
+
**Princípio**: Documentação deve ser atualizada como parte da implementação, não depois.
|
|
531
|
+
|
|
532
|
+
**Documentação Obrigatória:**
|
|
533
|
+
|
|
534
|
+
**README.md:**
|
|
535
|
+
|
|
536
|
+
- [ ] Atualizar se feature muda setup
|
|
537
|
+
- [ ] Adicionar novas variáveis de ambiente
|
|
538
|
+
- [ ] Atualizar instruções de instalação
|
|
539
|
+
|
|
540
|
+
**API.md (se aplicável):**
|
|
541
|
+
|
|
542
|
+
- [ ] Documentar novos endpoints
|
|
543
|
+
- [ ] Especificar request/response
|
|
544
|
+
- [ ] Exemplos de uso
|
|
545
|
+
- [ ] Códigos de erro
|
|
546
|
+
|
|
547
|
+
**ARCHITECTURE.md (se mudança arquitetural):**
|
|
548
|
+
|
|
549
|
+
- [ ] Atualizar diagramas
|
|
550
|
+
- [ ] Documentar novas decisões
|
|
551
|
+
- [ ] Explicar trade-offs
|
|
552
|
+
|
|
553
|
+
**CHANGELOG.md:**
|
|
554
|
+
|
|
555
|
+
- [ ] Adicionar entry para a versão
|
|
556
|
+
- [ ] Seguir formato Keep a Changelog
|
|
557
|
+
|
|
558
|
+
**Comentários no Código:**
|
|
559
|
+
|
|
560
|
+
- [ ] Decisões não-óbvias explicadas
|
|
561
|
+
- [ ] Algoritmos complexos comentados
|
|
562
|
+
- [ ] TODOs com contexto e deadline
|
|
563
|
+
- [ ] Evitar comentários óbvios
|
|
564
|
+
|
|
565
|
+
**Validação:**
|
|
566
|
+
|
|
567
|
+
- [ ] Documentação é parte dos critérios de aceitação
|
|
568
|
+
- [ ] Links para docs externas funcionam
|
|
569
|
+
- [ ] Exemplos de código são válidos e testados
|
|
570
|
+
- [ ] Linguagem clara e objetiva
|
|
571
|
+
|
|
572
|
+
**Exemplo:**
|
|
573
|
+
|
|
574
|
+
```markdown
|
|
575
|
+
✅ Bom (em subtarefa):
|
|
576
|
+
Critérios de Aceitação:
|
|
577
|
+
|
|
578
|
+
- [ ] Código implementado e revisado
|
|
579
|
+
- [ ] Testes passando
|
|
580
|
+
- [ ] README.md atualizado com nova env var JWT_SECRET
|
|
581
|
+
- [ ] API.md documentado com endpoint POST /auth/login
|
|
582
|
+
- [ ] CHANGELOG.md atualizado
|
|
583
|
+
|
|
584
|
+
❌ Ruim:
|
|
585
|
+
Critérios de Aceitação:
|
|
586
|
+
|
|
587
|
+
- [ ] Código pronto
|
|
588
|
+
- [ ] Testes ok
|
|
589
|
+
(documentação esquecida)
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
---
|
|
593
|
+
|
|
594
|
+
## Formato Markdown e Estrutura
|
|
595
|
+
|
|
596
|
+
### Metadados de Tech Spec
|
|
597
|
+
|
|
598
|
+
Use formato YAML frontmatter:
|
|
599
|
+
|
|
600
|
+
```yaml
|
|
601
|
+
---
|
|
602
|
+
name: { nome descritivo da tech spec }
|
|
603
|
+
id: { TECH-001 }
|
|
604
|
+
related_story: { STORY-XXX do Jira }
|
|
605
|
+
epic_related: { EPIC-XXX se existir }
|
|
606
|
+
link_task: { URL da história no Jira }
|
|
607
|
+
created_at: { YYYY-MM-DD }
|
|
608
|
+
updated_at: { YYYY-MM-DD }
|
|
609
|
+
status: { Draft, In Review, Approved, Implemented }
|
|
610
|
+
author: { nome do autor }
|
|
611
|
+
reviewers: { lista de revisores }
|
|
612
|
+
---
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
### Diagramas Mermaid
|
|
616
|
+
|
|
617
|
+
Use Mermaid para visualizações:
|
|
618
|
+
|
|
619
|
+
**Diagrama de Arquitetura:**
|
|
620
|
+
|
|
621
|
+
```mermaid
|
|
622
|
+
graph TD
|
|
623
|
+
A[Frontend] --> B[API Gateway]
|
|
624
|
+
B --> C[Auth Service]
|
|
625
|
+
B --> D[User Service]
|
|
626
|
+
C --> E[Database]
|
|
627
|
+
D --> E
|
|
628
|
+
```
|
|
629
|
+
|
|
630
|
+
**Diagrama de Sequência:**
|
|
631
|
+
|
|
632
|
+
```mermaid
|
|
633
|
+
sequenceDiagram
|
|
634
|
+
participant U as User
|
|
635
|
+
participant F as Frontend
|
|
636
|
+
participant A as API
|
|
637
|
+
participant D as Database
|
|
638
|
+
|
|
639
|
+
U->>F: Click Login
|
|
640
|
+
F->>A: POST /auth/login
|
|
641
|
+
A->>D: Validate credentials
|
|
642
|
+
D-->>A: User data
|
|
643
|
+
A-->>F: JWT token
|
|
644
|
+
F-->>U: Redirect to dashboard
|
|
645
|
+
```
|
|
646
|
+
|
|
647
|
+
**Diagrama de Fluxo:**
|
|
648
|
+
|
|
649
|
+
```mermaid
|
|
650
|
+
flowchart TD
|
|
651
|
+
Start([User submits form]) --> Validate{Valid?}
|
|
652
|
+
Validate -->|Yes| Save[Save to DB]
|
|
653
|
+
Validate -->|No| Error[Show error]
|
|
654
|
+
Save --> Success[Return 201]
|
|
655
|
+
Error --> End([End])
|
|
656
|
+
Success --> End
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
### Tabelas
|
|
660
|
+
|
|
661
|
+
Use tabelas para informações estruturadas:
|
|
662
|
+
|
|
663
|
+
**Componentes Afetados:**
|
|
664
|
+
| Componente | Tipo de Mudança | Impacto | Prioridade |
|
|
665
|
+
|------------|-----------------|---------|------------|
|
|
666
|
+
| Auth Service | Modificação | Alto | P0 |
|
|
667
|
+
| User API | Criação | Médio | P1 |
|
|
668
|
+
|
|
669
|
+
**Riscos:**
|
|
670
|
+
| Risco | Probabilidade | Impacto | Mitigação | Plano B |
|
|
671
|
+
|-------|---------------|---------|-----------|---------|
|
|
672
|
+
| ... | ... | ... | ... | ... |
|
|
673
|
+
|
|
674
|
+
### Code Blocks
|
|
675
|
+
|
|
676
|
+
Use blocos de código com linguagem especificada:
|
|
677
|
+
|
|
678
|
+
```python
|
|
679
|
+
# Bom
|
|
680
|
+
def validate_email(email: str) -> bool:
|
|
681
|
+
"""Valida formato de email usando regex."""
|
|
682
|
+
pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'
|
|
683
|
+
return re.match(pattern, email) is not None
|
|
684
|
+
```
|
|
685
|
+
|
|
686
|
+
### Links
|
|
687
|
+
|
|
688
|
+
Use links markdown para referências:
|
|
689
|
+
|
|
690
|
+
```markdown
|
|
691
|
+
- [PRD: Sistema de Autenticação](../product/auth-prd.md)
|
|
692
|
+
- [ADR-001: Escolha de JWT](../technical/adr/001-jwt-auth.md)
|
|
693
|
+
- [História Original](https://jira.empresa.com/browse/STORY-123)
|
|
694
|
+
```
|
|
695
|
+
|
|
696
|
+
---
|
|
697
|
+
|
|
698
|
+
## Validação de Tech Spec
|
|
699
|
+
|
|
700
|
+
### Checklist de Revisão
|
|
701
|
+
|
|
702
|
+
Use este checklist antes de finalizar uma tech spec:
|
|
703
|
+
|
|
704
|
+
**Conteúdo Obrigatório:**
|
|
705
|
+
|
|
706
|
+
- [ ] Metadados completos (frontmatter YAML)
|
|
707
|
+
- [ ] Contexto da história de negócio
|
|
708
|
+
- [ ] Análise técnica detalhada
|
|
709
|
+
- [ ] Componentes afetados identificados
|
|
710
|
+
- [ ] Decisões arquiteturais documentadas com justificativas
|
|
711
|
+
- [ ] Plano de implementação faseado
|
|
712
|
+
- [ ] Subtarefas detalhadas (fatia vertical, 4h a 1 dia cada)
|
|
713
|
+
- [ ] Dependências mapeadas
|
|
714
|
+
- [ ] Riscos identificados com mitigações
|
|
715
|
+
- [ ] Estratégia de testes definida
|
|
716
|
+
- [ ] Considerações de segurança
|
|
717
|
+
- [ ] Considerações de performance
|
|
718
|
+
- [ ] Documentação a atualizar
|
|
719
|
+
|
|
720
|
+
**Qualidade:**
|
|
721
|
+
|
|
722
|
+
- [ ] Linguagem clara e objetiva
|
|
723
|
+
- [ ] Sem jargões sem definição
|
|
724
|
+
- [ ] Diagramas úteis e legíveis
|
|
725
|
+
- [ ] Links funcionam
|
|
726
|
+
- [ ] Exemplos de código são válidos
|
|
727
|
+
- [ ] Estimativas realistas
|
|
728
|
+
- [ ] Sem ambiguidades críticas
|
|
729
|
+
- [ ] Rastreável até história original
|
|
730
|
+
|
|
731
|
+
**Subtarefas:**
|
|
732
|
+
|
|
733
|
+
- [ ] Todas têm entre 4h e 1 dia de trabalho
|
|
734
|
+
- [ ] Todas são fatias verticais completas (nenhuma horizontal)
|
|
735
|
+
- [ ] Títulos claros e acionáveis
|
|
736
|
+
- [ ] Descrições completas (O QUE, COMO, POR QUE)
|
|
737
|
+
- [ ] Arquivos afetados listados
|
|
738
|
+
- [ ] Critérios de aceitação testáveis
|
|
739
|
+
- [ ] Testes definidos
|
|
740
|
+
- [ ] Dependências mapeadas
|
|
741
|
+
|
|
742
|
+
**Decisões:**
|
|
743
|
+
|
|
744
|
+
- [ ] Pelo menos 2 alternativas consideradas
|
|
745
|
+
- [ ] Prós e contras documentados
|
|
746
|
+
- [ ] Justificativa clara
|
|
747
|
+
- [ ] Consequências documentadas
|
|
748
|
+
|
|
749
|
+
**Riscos:**
|
|
750
|
+
|
|
751
|
+
- [ ] Pelo menos 3 riscos identificados
|
|
752
|
+
- [ ] Probabilidade e impacto avaliados
|
|
753
|
+
- [ ] Mitigação para cada risco
|
|
754
|
+
- [ ] Plano B para riscos críticos
|
|
755
|
+
|
|
756
|
+
---
|
|
757
|
+
|
|
758
|
+
## Integração com Jira
|
|
759
|
+
|
|
760
|
+
### Criação de Subtarefas
|
|
761
|
+
|
|
762
|
+
**Formato de Descrição no Jira:**
|
|
763
|
+
|
|
764
|
+
Use markdown compatível com Jira:
|
|
765
|
+
|
|
766
|
+
```markdown
|
|
767
|
+
h2. Descrição
|
|
768
|
+
{Descrição técnica detalhada}
|
|
769
|
+
|
|
770
|
+
h2. Arquivos a Modificar/Criar
|
|
771
|
+
|
|
772
|
+
- {{path/to/file1.py}} - _[Modificação]_ - {Descrição}
|
|
773
|
+
- {{path/to/file2.tsx}} - _[Criação]_ - {Descrição}
|
|
774
|
+
|
|
775
|
+
h2. Critérios de Aceitação
|
|
776
|
+
|
|
777
|
+
- {color:green}✓{color} {Critério 1}
|
|
778
|
+
- {color:green}✓{color} {Critério 2}
|
|
779
|
+
|
|
780
|
+
h2. Testes Requeridos
|
|
781
|
+
_Unitários:_
|
|
782
|
+
|
|
783
|
+
- {{test_funcao()}} - {descrição}
|
|
784
|
+
|
|
785
|
+
h2. Dependências
|
|
786
|
+
|
|
787
|
+
- Depende de: [SUBTASK-XXX|https://jira.../SUBTASK-XXX]
|
|
788
|
+
|
|
789
|
+
h2. Referências
|
|
790
|
+
|
|
791
|
+
- [Tech Spec|{link}]
|
|
792
|
+
- [História Original|{link}]
|
|
793
|
+
```
|
|
794
|
+
|
|
795
|
+
### Metadados de Subtarefa no Jira
|
|
796
|
+
|
|
797
|
+
- **Tipo**: Subtarefa
|
|
798
|
+
- **História Pai**: STORY-XXX
|
|
799
|
+
- **Prioridade**: P0/P1/P2/P3
|
|
800
|
+
- **Estimativa**: Xh (em horas)
|
|
801
|
+
- **Labels**: `tech-spec`, `{área}` (backend, frontend, etc.), `{tipo}` (feature, bugfix, etc.)
|
|
802
|
+
- **Componentes**: {Componente do sistema afetado}
|
|
803
|
+
- **Sprint**: {Sprint atual ou próximo}
|
|
804
|
+
|
|
805
|
+
### Vinculação de Dependências
|
|
806
|
+
|
|
807
|
+
Use links do Jira para dependências:
|
|
808
|
+
|
|
809
|
+
- **Blocks**: Esta subtarefa bloqueia SUBTASK-XXX
|
|
810
|
+
- **Is Blocked By**: Esta subtarefa é bloqueada por SUBTASK-XXX
|
|
811
|
+
- **Relates To**: Esta subtarefa se relaciona com SUBTASK-XXX
|
|
812
|
+
|
|
813
|
+
---
|
|
814
|
+
|
|
815
|
+
## Manutenção de Tech Specs
|
|
816
|
+
|
|
817
|
+
### Quando Atualizar
|
|
818
|
+
|
|
819
|
+
Tech specs devem ser atualizadas quando:
|
|
820
|
+
|
|
821
|
+
- [ ] Decisões arquiteturais mudam durante implementação
|
|
822
|
+
- [ ] Novos riscos são identificados
|
|
823
|
+
- [ ] Escopo da história muda
|
|
824
|
+
- [ ] Dependências são alteradas
|
|
825
|
+
- [ ] Estimativas provam estar incorretas
|
|
826
|
+
|
|
827
|
+
### Versionamento
|
|
828
|
+
|
|
829
|
+
Use seção de **Histórico de Revisões**:
|
|
830
|
+
|
|
831
|
+
| Data | Versão | Autor | Mudanças |
|
|
832
|
+
| ---------- | ------ | ------------ | ----------------------------------------------------- |
|
|
833
|
+
| 2024-01-15 | 1.0 | João Silva | Versão inicial |
|
|
834
|
+
| 2024-01-20 | 1.1 | Maria Santos | Adicionado risco de performance, ajustado estimativas |
|
|
835
|
+
| 2024-01-25 | 2.0 | João Silva | Mudança arquitetural: JWT → OAuth2 |
|
|
836
|
+
|
|
837
|
+
### Status do Documento
|
|
838
|
+
|
|
839
|
+
Atualize o status no frontmatter:
|
|
840
|
+
|
|
841
|
+
- **Draft**: Em elaboração
|
|
842
|
+
- **In Review**: Aguardando revisão
|
|
843
|
+
- **Approved**: Aprovado para implementação
|
|
844
|
+
- **Implemented**: Implementação concluída
|
|
845
|
+
- **Archived**: Arquivado (histórico)
|
|
846
|
+
|
|
847
|
+
---
|
|
848
|
+
|
|
849
|
+
## Antipadrões - O Que Evitar
|
|
850
|
+
|
|
851
|
+
### ❌ Tech Spec Genérica
|
|
852
|
+
|
|
853
|
+
```markdown
|
|
854
|
+
# Tech Spec: Implementar Login
|
|
855
|
+
|
|
856
|
+
Vamos implementar login de usuários.
|
|
857
|
+
|
|
858
|
+
Subtarefas:
|
|
859
|
+
|
|
860
|
+
- Fazer backend
|
|
861
|
+
- Fazer frontend
|
|
862
|
+
- Testar
|
|
863
|
+
```
|
|
864
|
+
|
|
865
|
+
**Problemas:**
|
|
866
|
+
|
|
867
|
+
- Sem contexto de negócio
|
|
868
|
+
- Sem decisões arquiteturais
|
|
869
|
+
- Subtarefas muito vagas e grandes
|
|
870
|
+
- Sem critérios de aceitação
|
|
871
|
+
- Sem riscos identificados
|
|
872
|
+
|
|
873
|
+
---
|
|
874
|
+
|
|
875
|
+
### ❌ Decisões Sem Justificativa
|
|
876
|
+
|
|
877
|
+
```markdown
|
|
878
|
+
Decisão: Vamos usar MongoDB
|
|
879
|
+
|
|
880
|
+
Justificativa: Porque é NoSQL e escalável.
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
**Problemas:**
|
|
884
|
+
|
|
885
|
+
- Sem alternativas consideradas
|
|
886
|
+
- Justificativa superficial
|
|
887
|
+
- Sem trade-offs documentados
|
|
888
|
+
- Sem contexto do porquê NoSQL
|
|
889
|
+
|
|
890
|
+
---
|
|
891
|
+
|
|
892
|
+
### ❌ Subtarefas Muito Grandes
|
|
893
|
+
|
|
894
|
+
```markdown
|
|
895
|
+
SUBTASK-001: Implementar sistema de autenticação completo (3 dias)
|
|
896
|
+
```
|
|
897
|
+
|
|
898
|
+
**Problemas:**
|
|
899
|
+
|
|
900
|
+
- Muito grande (> 1 dia) — múltiplos endpoints e telas em uma única subtarefa
|
|
901
|
+
- Não específica
|
|
902
|
+
- Difícil de estimar
|
|
903
|
+
- Difícil de testar incrementalmente
|
|
904
|
+
|
|
905
|
+
**Correção**: dividir em fatias verticais independentes, ex: `[BACKEND] Endpoint POST /auth/register`, `[BACKEND] Endpoint POST /auth/login`, `[FRONTEND] Tela de registro`, `[FRONTEND] Tela de login` — **nunca** em camadas (`[BACKEND] Schemas`, `[BACKEND] Controllers`, etc).
|
|
906
|
+
|
|
907
|
+
---
|
|
908
|
+
|
|
909
|
+
### ❌ Estimativas Sem Base
|
|
910
|
+
|
|
911
|
+
```markdown
|
|
912
|
+
Estimativa Total: Uns 2-3 dias
|
|
913
|
+
```
|
|
914
|
+
|
|
915
|
+
**Problemas:**
|
|
916
|
+
|
|
917
|
+
- Sem quebra por subtarefa
|
|
918
|
+
- Sem buffer
|
|
919
|
+
- Muito vaga
|
|
920
|
+
|
|
921
|
+
---
|
|
922
|
+
|
|
923
|
+
### ❌ Riscos Ignorados
|
|
924
|
+
|
|
925
|
+
```markdown
|
|
926
|
+
Riscos: Nenhum identificado.
|
|
927
|
+
```
|
|
928
|
+
|
|
929
|
+
**Problemas:**
|
|
930
|
+
|
|
931
|
+
- Todo projeto tem riscos
|
|
932
|
+
- Falta de análise crítica
|
|
933
|
+
- Equipe não preparada para problemas
|
|
934
|
+
|
|
935
|
+
---
|
|
936
|
+
|
|
937
|
+
## Recursos e Referências
|
|
938
|
+
|
|
939
|
+
### Templates
|
|
940
|
+
|
|
941
|
+
- import `$IDE/templates/engineering/tech-spec-template.md`
|
|
942
|
+
|
|
943
|
+
### Workflows
|
|
944
|
+
|
|
945
|
+
- import `$IDE/workflows/engineering/eng.build-tech-spec.md`
|
|
946
|
+
- import `$IDE/workflows/engineering/eng.breakdown-subtasks.md`
|
|
947
|
+
|
|
948
|
+
### Documentação Relacionada
|
|
949
|
+
|
|
950
|
+
- import `$IDE/rules/product/prod-rules.md` - Regras de produto (complementar)
|
|
951
|
+
- `docs/technical/adr/` - Architecture Decision Records
|
|
952
|
+
|
|
953
|
+
### Ferramentas
|
|
954
|
+
|
|
955
|
+
- **Mermaid**: https://mermaid.js.org/
|
|
956
|
+
- **Jira**: Sistema de task management
|
|
957
|
+
- **Markdown**: Formato de documentação
|
|
958
|
+
|
|
959
|
+
---
|
|
960
|
+
|
|
961
|
+
## Exemplo Completo
|
|
962
|
+
|
|
963
|
+
Ver arquivo de template:
|
|
964
|
+
import `$IDE/templates/engineering/tech-spec-template.md`
|
|
965
|
+
|
|
966
|
+
---
|
|
967
|
+
|
|
968
|
+
**Lembre-se**: Uma tech spec bem feita economiza horas de discussão e retrabalho. Invista tempo na elaboração.
|