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,585 @@
|
|
|
1
|
+
---
|
|
2
|
+
trigger: always_on
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
> **Applies to:** HUB: all | POSITION: all | AREA: all | SQUAD: all
|
|
6
|
+
|
|
7
|
+
# Regras do Workflow Breakdown Subtasks
|
|
8
|
+
|
|
9
|
+
## Propósito
|
|
10
|
+
|
|
11
|
+
O workflow `breakdown-subtasks` tem como objetivo **quebrar uma Tech Spec em subtarefas que sejam entregáveis completos e independentes** (fatias verticais), cada uma detalhada o suficiente para que um desenvolvedor júnior execute sem perguntar nada.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## ⚠️ REGRA INVIOLÁVEL: PRINCÍPIO DE INDEPENDÊNCIA
|
|
16
|
+
|
|
17
|
+
> **Cada subtarefa é uma unidade de entrega completa e independente.**
|
|
18
|
+
> Cada subtarefa será um card no `$TASK_MANAGER` com **sua própria branch, seu próprio commit e seu próprio deploy**.
|
|
19
|
+
> Por isso, a subtarefa precisa ser **mergeável isoladamente sem quebrar o sistema**.
|
|
20
|
+
|
|
21
|
+
**Toda subtarefa deve ser uma fatia vertical completa (vertical slice):**
|
|
22
|
+
|
|
23
|
+
- ✅ Atravessa todas as camadas técnicas necessárias (DB, backend, frontend, testes — tudo que for preciso para a entrega ficar de pé)
|
|
24
|
+
- ✅ Implementa um fluxo end-to-end mínimo funcional, não um componente técnico isolado
|
|
25
|
+
- ✅ Quando mergeada sozinha, a aplicação continua funcionando
|
|
26
|
+
- ✅ A entrega é observável: testável, demonstrável ou verificável
|
|
27
|
+
|
|
28
|
+
### Teste de Validação (obrigatório para cada subtarefa)
|
|
29
|
+
|
|
30
|
+
Responda **sim** para as três perguntas. Se qualquer uma for **não** → reagrupar com a próxima subtarefa até formar uma fatia vertical completa.
|
|
31
|
+
|
|
32
|
+
1. **Posso fazer merge desta branch sem quebrar o sistema?**
|
|
33
|
+
2. **Posso testar/demonstrar esta entrega sem depender das próximas subtarefas?**
|
|
34
|
+
3. **Esta subtarefa entrega valor observável (endpoint funcionando, modal usável, tela navegável)?**
|
|
35
|
+
|
|
36
|
+
### Exemplos Canônicos
|
|
37
|
+
|
|
38
|
+
| ❌ Fatia horizontal (PROIBIDA) | ✅ Fatia vertical (OBRIGATÓRIA) |
|
|
39
|
+
|---|---|
|
|
40
|
+
| Subtask só para editar um enum | Subtask que implementa o endpoint X inteiro — use-case + factory + enum + repository + contratos + testes |
|
|
41
|
+
| Subtask só para criar um repository | Subtask que implementa outro endpoint Y completo com a mesma estrutura |
|
|
42
|
+
| Subtask só para construir um use-case | Subtask que edita um endpoint existente (+ estrutura associada na aplicação) |
|
|
43
|
+
| Subtask só para construir a factory do use-case | Subtask que implementa um modal inteiro no frontend (componente + estado + integração + estilos + testes) |
|
|
44
|
+
| Subtask só para criar um DTO | Subtask que altera uma tela inteira no frontend |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## ⚠️ REGRA CRÍTICA: DETALHAMENTO EXTREMO
|
|
49
|
+
|
|
50
|
+
> **Cada subtarefa deve ser um TUTORIAL PASSO-A-PASSO COMPLETO**
|
|
51
|
+
>
|
|
52
|
+
> Se um dev júnior não conseguir implementar seguindo sua description, ela está RUIM.
|
|
53
|
+
|
|
54
|
+
O princípio de independência define **o escopo** de cada subtarefa; o detalhamento extremo define **como ela é descrita**. Os dois se somam — um sem o outro não resolve.
|
|
55
|
+
|
|
56
|
+
**O texto deve responder:**
|
|
57
|
+
|
|
58
|
+
- ✅ Exatamente O QUE fazer (descrição em 2-3 frases)
|
|
59
|
+
- ✅ POR QUÊ fazer (contexto de negócio/técnico)
|
|
60
|
+
- ✅ ONDE fazer (arquivos específicos)
|
|
61
|
+
- ✅ COMO fazer (código COMPLETO + explicação linha a linha)
|
|
62
|
+
- ✅ COMO TESTAR (cenários com input/output)
|
|
63
|
+
- ✅ COMO VERIFICAR (checklist acionável)
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Princípios Fundamentais
|
|
68
|
+
|
|
69
|
+
### 1. Granularidade Obrigatória
|
|
70
|
+
|
|
71
|
+
**Tempo por subtarefa: mínimo 4h, máximo 1 dia de trabalho**
|
|
72
|
+
|
|
73
|
+
A granularidade é guiada **primeiro pela independência (fatia vertical completa)** e só depois pelo tempo. Tempo é um sanity check — independência é lei.
|
|
74
|
+
|
|
75
|
+
Regras de divisão:
|
|
76
|
+
|
|
77
|
+
- Se a subtarefa não passa no **Teste de Validação** acima → reagrupar com a próxima até formar uma fatia vertical
|
|
78
|
+
- Se o entregável completo leva > 1 dia → dividir em **duas entregas verticais independentes** (ex: dois endpoints distintos, não "camada de dados" vs "camada de API")
|
|
79
|
+
- Se a subtarefa cabe em menos de 4h → sinal forte de **fatia horizontal atômica** (enum isolado, DTO isolado, factory isolada) → **agrupar obrigatoriamente** com a próxima até ultrapassar 4h formando uma fatia vertical
|
|
80
|
+
|
|
81
|
+
**Exemplo:**
|
|
82
|
+
|
|
83
|
+
- ❌ "[BACKEND] Implementar sistema de pagamento inteiro" — MUITO grande (múltiplos endpoints = múltiplos entregáveis)
|
|
84
|
+
- ❌ "[BACKEND] Criar schema de validação Stripe" + "[BACKEND] Implementar endpoint POST /api/payment/create" + "[QA] Testes" — fatiamento horizontal PROIBIDO (cada peça sozinha não entrega valor)
|
|
85
|
+
- ✅ "[BACKEND] Implementar endpoint POST /api/payment/create (schema + validação + use-case + repository + testes)" + "[BACKEND] Implementar endpoint POST /api/payment/refund (mesma estrutura)"
|
|
86
|
+
|
|
87
|
+
### 2. Ordem Lógica de Implementação (não separação por camada)
|
|
88
|
+
|
|
89
|
+
Quando múltiplas subtarefas irmãs existem, sugira a **ordem lógica** de implementação abaixo. **Essa ordem não separa cada subtarefa em uma camada diferente** — uma única subtarefa pode (e geralmente precisa) tocar várias camadas ao mesmo tempo.
|
|
90
|
+
|
|
91
|
+
1. **[DATA]** — Subtarefas cujo entregável predominante é dado persistido (ex: nova tabela + migration + seed que já é útil por si só)
|
|
92
|
+
2. **[BACKEND]** — Endpoints/workers completos (incluindo migration, schema, DTO, use-case, factory, repository, controller e testes na mesma subtarefa)
|
|
93
|
+
3. **[FRONTEND]** — Telas, modais ou fluxos completos (incluindo tipos, hooks, integração com API, componentes e testes na mesma subtarefa)
|
|
94
|
+
4. **[QA]** — Testes de integração/E2E que cruzam fronteiras de várias subtarefas já entregues
|
|
95
|
+
|
|
96
|
+
> ⚠️ **Atenção**: as subtarefas `[BACKEND]` e `[FRONTEND]` **não são "uma para cada camada"**. O prefixo indica a stack **predominante** do entregável, mas o escopo inclui tudo que for necessário para a fatia ficar de pé.
|
|
97
|
+
|
|
98
|
+
### 3. Prefixos de Stack (OBRIGATÓRIO)
|
|
99
|
+
|
|
100
|
+
**CADA título deve começar com um prefixo indicando a stack PREDOMINANTE do entregável** (não a única camada tocada):
|
|
101
|
+
|
|
102
|
+
| Prefixo | Owner | Uso |
|
|
103
|
+
| ---------------- | ------------------ | ------------------------------------------------------------------------------------------------ |
|
|
104
|
+
| `[DATA]` | Dev (back) | Entregáveis cujo valor principal é dado estruturado (migrations + seeds de referência úteis) |
|
|
105
|
+
| `[BACKEND]` | Dev (back) | Endpoint, worker ou job completo (inclui migration, schema, DTO, use-case, factory, repo, testes unitários) |
|
|
106
|
+
| `[FRONTEND]` | Dev (front) | Tela, modal ou fluxo UI completo (inclui tipos, hooks, integração, componente, estilos, testes unitários) |
|
|
107
|
+
| `[QA-BACKEND]` | Dev (back) | Testes de integração ou contrato específicos do backend que extrapolam o escopo de uma única subtarefa `[BACKEND]` |
|
|
108
|
+
| `[QA-FRONTEND]` | Dev (front) | Testes de componente ou fluxo UI específicos do frontend que extrapolam o escopo de uma única subtarefa `[FRONTEND]` |
|
|
109
|
+
| `[QA]` | QA Engineer | Testes E2E e de integração que cruzam fronteiras de múltiplas subtarefas já mergeadas — exclusivo para QA Engineer |
|
|
110
|
+
| `[INFRA]` | Dev / DevOps | Mudança completa de pipeline, config de ambiente ou deployment |
|
|
111
|
+
| `[DOCS]` | Autor da entrega | Documentação independente (não parte de uma subtarefa de código) |
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## ⚠️ REGRA DE OWNERSHIP DE QA
|
|
116
|
+
|
|
117
|
+
> **Testes são responsabilidade de quem entregou o código — salvo quando cruzam fronteiras.**
|
|
118
|
+
|
|
119
|
+
Ao gerar subtarefas com escopo de QA/testes, aplique a seguinte divisão **obrigatória**:
|
|
120
|
+
|
|
121
|
+
| Escopo do teste | Prefixo correto | Owner |
|
|
122
|
+
|---|---|---|
|
|
123
|
+
| Testes unitários de um endpoint/worker | Incluir dentro do próprio `[BACKEND]` | Dev de back |
|
|
124
|
+
| Testes unitários de um componente/tela | Incluir dentro do próprio `[FRONTEND]` | Dev de front |
|
|
125
|
+
| Testes de integração ou contrato apenas do backend (multi-subtarefa) | `[QA-BACKEND]` | Dev de back |
|
|
126
|
+
| Testes de componente ou fluxo apenas do frontend (multi-subtarefa) | `[QA-FRONTEND]` | Dev de front |
|
|
127
|
+
| Testes E2E ou integração que cruzam backend + frontend (multi-subtarefa) | `[QA]` | QA Engineer |
|
|
128
|
+
|
|
129
|
+
**Regras práticas:**
|
|
130
|
+
|
|
131
|
+
- ✅ Testes unitários **nunca** viram subtarefa separada — ficam dentro da subtarefa de código correspondente
|
|
132
|
+
- ✅ `[QA-BACKEND]` e `[QA-FRONTEND]` só existem quando o escopo de validação **ultrapassa** uma única subtarefa de código (ex: validar que dois endpoints novos interagem corretamente)
|
|
133
|
+
- ✅ `[QA]` é exclusivo do **QA Engineer** e cobre apenas cenários que cruzam frontend + backend + dados ao mesmo tempo
|
|
134
|
+
- ❌ Nunca criar um `[QA]` para testar algo que é responsabilidade exclusiva do dev (ex: `[QA] Testar endpoint POST /users` — isso é `[BACKEND]` com testes incluídos)
|
|
135
|
+
|
|
136
|
+
**Exemplos:**
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
❌ ERRADO
|
|
140
|
+
[BACKEND] Criar endpoint POST /api/payments/create
|
|
141
|
+
[QA] Testar endpoint POST /api/payments/create ← errado: teste de backend vira [BACKEND]
|
|
142
|
+
|
|
143
|
+
✅ CORRETO
|
|
144
|
+
[BACKEND] Criar endpoint POST /api/payments/create ← inclui os testes unitários do endpoint
|
|
145
|
+
|
|
146
|
+
[BACKEND] Criar endpoint POST /api/payments/create
|
|
147
|
+
[BACKEND] Criar endpoint POST /api/payments/refund
|
|
148
|
+
[QA-BACKEND] Validar integração entre /create e /refund ← só se necessário testar os dois juntos
|
|
149
|
+
|
|
150
|
+
[BACKEND] Criar endpoint POST /api/payments/create
|
|
151
|
+
[FRONTEND] Criar modal de pagamento
|
|
152
|
+
[QA] Fluxo E2E de pagamento completo (do modal ao banco) ← QA Engineer, cruza fronteiras
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Estrutura de Subtarefa
|
|
158
|
+
|
|
159
|
+
**TODAS as subtarefas DEVEM seguir este template EXATAMENTE:**
|
|
160
|
+
|
|
161
|
+
```markdown
|
|
162
|
+
## 🎯 O Que Você Vai Fazer
|
|
163
|
+
|
|
164
|
+
{Descrição em 2-3 frases do objetivo final. O que o dev terá ao finalizar?}
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## 📋 Contexto da Tarefa
|
|
169
|
+
|
|
170
|
+
### Por que isso é necessário?
|
|
171
|
+
|
|
172
|
+
{Explique o motivo de negócio ou técnico}
|
|
173
|
+
|
|
174
|
+
### Onde isso se encaixa?
|
|
175
|
+
|
|
176
|
+
{Como se conecta com outras subtarefas e a feature final}
|
|
177
|
+
|
|
178
|
+
### Pré-requisitos
|
|
179
|
+
|
|
180
|
+
- [ ] {Subtarefa anterior, se houver}
|
|
181
|
+
- [ ] {Ambiente/config, se necessário}
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 🛠️ Stack Técnico
|
|
186
|
+
|
|
187
|
+
| Tecnologia | Versão | Para que |
|
|
188
|
+
| ---------- | ------ | -------- |
|
|
189
|
+
| {Tech 1} | {ver} | {uso} |
|
|
190
|
+
|
|
191
|
+
### Padrões do Projeto a Seguir
|
|
192
|
+
|
|
193
|
+
- **Nomenclatura**: {padrão específico do projeto}
|
|
194
|
+
- **Estrutura**: {organização de pastas}
|
|
195
|
+
- **Convenções**: {eslint, prettier, etc}
|
|
196
|
+
|
|
197
|
+
### Arquivos de Referência (COPIE O PADRÃO)
|
|
198
|
+
|
|
199
|
+
- `{caminho/arquivo.ts}` - Use como base para {o quê}
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 📁 Arquivos a Criar/Modificar
|
|
204
|
+
|
|
205
|
+
| Arquivo | Ação | Descrição |
|
|
206
|
+
| -------- | ------------------------ | ----------- |
|
|
207
|
+
| `{path}` | 🆕 Criar ou ✏️ Modificar | {O que faz} |
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## 👣 Passo a Passo de Implementação
|
|
212
|
+
|
|
213
|
+
### Passo 1: {Título descritivo}
|
|
214
|
+
|
|
215
|
+
**O que fazer:**
|
|
216
|
+
{Explicação detalhada}
|
|
217
|
+
|
|
218
|
+
**Código:**
|
|
219
|
+
|
|
220
|
+
\`\`\`{language}
|
|
221
|
+
// {caminho/do/arquivo.ts}
|
|
222
|
+
|
|
223
|
+
{CÓDIGO COMPLETO - NÃO use "..." ou placeholder}
|
|
224
|
+
\`\`\`
|
|
225
|
+
|
|
226
|
+
**Explicação do código:**
|
|
227
|
+
|
|
228
|
+
- Linha X: {explica o que faz e por quê}
|
|
229
|
+
- Linha Y: {explica o que faz e por quê}
|
|
230
|
+
|
|
231
|
+
**Validação deste passo:**
|
|
232
|
+
|
|
233
|
+
- [ ] {Como verificar}
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
### Passo 2: ...
|
|
238
|
+
|
|
239
|
+
{Continuar com mais passos}
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## 🧪 Testes Obrigatórios
|
|
244
|
+
|
|
245
|
+
**Arquivo: `{caminho/arquivo.spec.ts}`**
|
|
246
|
+
|
|
247
|
+
\`\`\`{language}
|
|
248
|
+
// {CÓDIGO DE TESTE COMPLETO}
|
|
249
|
+
\`\`\`
|
|
250
|
+
|
|
251
|
+
### Cenários a Testar
|
|
252
|
+
|
|
253
|
+
| Cenário | Input | Output | ✓ |
|
|
254
|
+
| -------- | ---------------- | --------------- | --- |
|
|
255
|
+
| {caso 1} | {input} | {output} | [ ] |
|
|
256
|
+
| {erro 1} | {input inválido} | {erro esperado} | [ ] |
|
|
257
|
+
|
|
258
|
+
### Como Executar
|
|
259
|
+
|
|
260
|
+
\`\`\`bash
|
|
261
|
+
{comando específico para testar esta subtarefa}
|
|
262
|
+
\`\`\`
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## ✅ Checklist de Conclusão
|
|
267
|
+
|
|
268
|
+
### Implementação
|
|
269
|
+
|
|
270
|
+
- [ ] Código implementado conforme os passos
|
|
271
|
+
- [ ] Sem `console.log` de debug
|
|
272
|
+
- [ ] Sem `TODO` ou `FIXME` sem issue
|
|
273
|
+
- [ ] Imports organizados
|
|
274
|
+
- [ ] Tipagem TypeScript completa (sem `any`)
|
|
275
|
+
|
|
276
|
+
### Qualidade
|
|
277
|
+
|
|
278
|
+
- [ ] Testes passando
|
|
279
|
+
- [ ] Linter sem erros (`npm run lint`)
|
|
280
|
+
- [ ] Build sem erros (`npm run build`)
|
|
281
|
+
|
|
282
|
+
### Documentação
|
|
283
|
+
|
|
284
|
+
- [ ] Comentários em código complexo
|
|
285
|
+
- [ ] JSDoc em funções públicas
|
|
286
|
+
- [ ] README atualizado (se necessário)
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## ⚠️ Riscos e Cuidados
|
|
291
|
+
|
|
292
|
+
| Risco | Como Evitar |
|
|
293
|
+
| --------- | ----------- |
|
|
294
|
+
| {risco 1} | {mitigação} |
|
|
295
|
+
|
|
296
|
+
### ❌ Não Faça Isso
|
|
297
|
+
|
|
298
|
+
- ❌ {Erro comum 1 e por que é errado}
|
|
299
|
+
|
|
300
|
+
### 💡 Dicas
|
|
301
|
+
|
|
302
|
+
- 💡 {Dica útil}
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## 🔗 Dependências
|
|
307
|
+
|
|
308
|
+
### Esta subtarefa depende de:
|
|
309
|
+
|
|
310
|
+
- `[{STACK}] {Nome da subtarefa anterior}` - {O que precisa estar pronto}
|
|
311
|
+
|
|
312
|
+
### Desbloqueia:
|
|
313
|
+
|
|
314
|
+
- `[{STACK}] {Nome da próxima subtarefa}` - {O que será desbloqueado}
|
|
315
|
+
|
|
316
|
+
### Pode ser feita em paralelo com:
|
|
317
|
+
|
|
318
|
+
- `[{STACK}] {Nome de subtarefa paralela}` - {Por que não há dependência}
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## 📚 Referências
|
|
323
|
+
|
|
324
|
+
### Documentação Oficial
|
|
325
|
+
|
|
326
|
+
- [{Nome da doc}]({link}) - {Para que usar}
|
|
327
|
+
|
|
328
|
+
### Arquivos de Exemplo
|
|
329
|
+
|
|
330
|
+
- `{caminho/arquivo-exemplo.ts}` - {O que copiar daqui}
|
|
331
|
+
|
|
332
|
+
### Tech Spec Relacionada
|
|
333
|
+
|
|
334
|
+
- Seção {X.Y}: {descrição}
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## 🆘 Precisa de Ajuda?
|
|
339
|
+
|
|
340
|
+
1. **Revise os arquivos de referência** listados acima
|
|
341
|
+
2. **Consulte a Tech Spec** seção relevante
|
|
342
|
+
3. **Pergunte no Slack** canal #{canal}
|
|
343
|
+
4. **Documentação**: {links úteis}
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## Regras de Qualidade CRÍTICAS
|
|
349
|
+
|
|
350
|
+
### ✅ Uma subtarefa BEM mastigada tem
|
|
351
|
+
|
|
352
|
+
| Característica | Descrição | BOM | RUIM |
|
|
353
|
+
| ---------------------------- | --------------------------------- | --------------------------------------------------- | -------------------------------- |
|
|
354
|
+
| **Título específico** | Descreve exatamente o que fazer | "[BACKEND] Criar endpoint POST /api/users/register" | "[BACKEND] Criar API de usuário" |
|
|
355
|
+
| **Código COMPLETO** | TODO o código, sem "..." | Código com imports, função, tipos | "Implemente a função X" |
|
|
356
|
+
| **Explicação linha a linha** | Explica POR QUÊ existe | "bcrypt.hash com salt 10 para..." | Código sem explicação |
|
|
357
|
+
| **Cenários de teste** | TODOS os casos | Tabela input/output | "Escreva testes" |
|
|
358
|
+
| **Referências concretas** | Aponta arquivos reais para copiar | "Copie user.controller.ts" | "Siga o padrão" |
|
|
359
|
+
| **Checklist verificável** | Itens específicos | "Linter sem erros: npm run lint" | "Código limpo" |
|
|
360
|
+
|
|
361
|
+
### ❌ REJEITE subtarefas que
|
|
362
|
+
|
|
363
|
+
- Sejam **fatias horizontais** (só enum, só repository, só factory, só DTO, só contratos/interfaces sem implementação funcional)
|
|
364
|
+
- **Não passem no Teste de Validação de independência** (não mergeáveis isoladamente sem quebrar o sistema)
|
|
365
|
+
- Usem termos vagos: "implementar", "criar" sem detalhes
|
|
366
|
+
- Não tenham código de exemplo
|
|
367
|
+
- Não listem arquivos específicos
|
|
368
|
+
- Não expliquem o contexto e o porquê
|
|
369
|
+
- Assumam conhecimento que o dev pode não ter
|
|
370
|
+
- Usem "..." ou "// rest of code"
|
|
371
|
+
- Caibam em **menos de 4h** — é sinal forte de fatia horizontal atômica; agrupar com a próxima subtarefa
|
|
372
|
+
- Excedam 1 dia de trabalho (nesse caso, dividir em **duas fatias verticais independentes**, nunca em fatias horizontais)
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
376
|
+
## Formato de Saída: JSON
|
|
377
|
+
|
|
378
|
+
### Estrutura Obrigatória
|
|
379
|
+
|
|
380
|
+
```json
|
|
381
|
+
{
|
|
382
|
+
"subtasks": [
|
|
383
|
+
{
|
|
384
|
+
"summary": "[STACK] Título específico da subtarefa",
|
|
385
|
+
"description": "Template completo com:\n\n## 🎯 O Que Você Vai Fazer\n\n... (resto conforme template acima)"
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
"summary": "[STACK] Próxima subtarefa",
|
|
389
|
+
"description": "..."
|
|
390
|
+
}
|
|
391
|
+
]
|
|
392
|
+
}
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
### Regras CRÍTICAS para o JSON
|
|
396
|
+
|
|
397
|
+
1. **APENAS JSON** - Sem texto antes ou depois
|
|
398
|
+
2. **Use `\n` para quebras de linha** dentro das strings
|
|
399
|
+
3. **Escape aspas com `\"`** dentro das strings
|
|
400
|
+
4. **Todos os títulos com [STACK]** - Obrigatório
|
|
401
|
+
5. **Description ULTRA DETALHADA** - Siga o template COMPLETAMENTE
|
|
402
|
+
6. **Código COMPLETO** - Não use "..." ou placeholder
|
|
403
|
+
7. **Caminhos reais** - Use paths que existem no projeto
|
|
404
|
+
8. **Valide JSON** - Antes de retornar
|
|
405
|
+
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
## Mapeamento de Dependências
|
|
409
|
+
|
|
410
|
+
### Padrão de Dependência (fatias verticais, não camadas)
|
|
411
|
+
|
|
412
|
+
Cada nó abaixo é uma subtarefa **completa e independente** — endpoint inteiro, modal inteiro, tela inteira. As setas indicam dependência real de dados/contratos entre entregáveis, não split por camada.
|
|
413
|
+
|
|
414
|
+
```
|
|
415
|
+
[BACKEND] Endpoint POST /X (migration + use-case + factory + repo + testes)
|
|
416
|
+
↓ (fornece contrato de API)
|
|
417
|
+
[FRONTEND] Modal de criação de X (componente + integração + testes)
|
|
418
|
+
|
|
419
|
+
[BACKEND] Endpoint GET /Y (fatia vertical completa) ←── pode rodar em paralelo
|
|
420
|
+
[FRONTEND] Tela de listagem de Y (fatia vertical) ←── pode rodar em paralelo
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
> ⚠️ Se você está montando uma cadeia do tipo `[DATA] tabela → [BACKEND] DTO → [BACKEND] repository → [BACKEND] use-case → [BACKEND] controller`, **pare**: isso é fatia horizontal. Reagrupe tudo em uma única subtarefa `[BACKEND] Endpoint POST /X`.
|
|
424
|
+
|
|
425
|
+
### Como Documentar
|
|
426
|
+
|
|
427
|
+
Cada subtarefa deve ter seção "🔗 Dependências" indicando:
|
|
428
|
+
|
|
429
|
+
- ✅ **Depende de**: qual subtarefa precisa estar pronta (ex: endpoint pronto antes da tela que o consome)
|
|
430
|
+
- ✅ **Desbloqueia**: qual subtarefa será desbloqueada
|
|
431
|
+
- ✅ **Paralela com**: qual pode ser feita simultaneamente (geralmente outro entregável vertical independente)
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
## Checklist de Qualidade Final
|
|
436
|
+
|
|
437
|
+
Antes de retornar o JSON, valide CADA subtarefa:
|
|
438
|
+
|
|
439
|
+
### ✅ Completude
|
|
440
|
+
|
|
441
|
+
- [ ] Cobre TODAS as partes da Tech Spec
|
|
442
|
+
- [ ] Setup, implementação, testes incluídos
|
|
443
|
+
- [ ] Cada subtarefa é um "tutorial completo"
|
|
444
|
+
|
|
445
|
+
### ✅ Granularidade
|
|
446
|
+
|
|
447
|
+
- [ ] TODAS as subtarefas têm entre 4h e 1 dia de trabalho
|
|
448
|
+
- [ ] Subtarefas são autocontidas
|
|
449
|
+
- [ ] Nenhuma é vaga
|
|
450
|
+
|
|
451
|
+
### ✅ Independência (fatia vertical)
|
|
452
|
+
|
|
453
|
+
- [ ] Cada subtarefa, mergeada isoladamente, deixa a aplicação funcionando
|
|
454
|
+
- [ ] A entrega de cada subtarefa é observável (testável ou demonstrável)
|
|
455
|
+
- [ ] Nenhuma subtarefa é apenas contrato, interface, tipo, enum ou repository isolado
|
|
456
|
+
- [ ] Cadeia `[DATA] → [BACKEND] DTO → [BACKEND] repo → [BACKEND] use-case` foi consolidada em UMA subtarefa por endpoint
|
|
457
|
+
|
|
458
|
+
### ✅ Ownership de QA
|
|
459
|
+
|
|
460
|
+
- [ ] Testes unitários de backend estão dentro do próprio `[BACKEND]` — não viraram `[QA]` separado
|
|
461
|
+
- [ ] Testes unitários de frontend estão dentro do próprio `[FRONTEND]` — não viraram `[QA]` separado
|
|
462
|
+
- [ ] Subtarefas `[QA-BACKEND]` existem **apenas** quando o escopo ultrapassa uma única subtarefa de backend
|
|
463
|
+
- [ ] Subtarefas `[QA-FRONTEND]` existem **apenas** quando o escopo ultrapassa uma única subtarefa de frontend
|
|
464
|
+
- [ ] Subtarefas `[QA]` são exclusivamente E2E ou integração cruzando backend + frontend — ownership do QA Engineer
|
|
465
|
+
|
|
466
|
+
### ✅ Detalhamento
|
|
467
|
+
|
|
468
|
+
- [ ] Código COMPLETO em cada passo
|
|
469
|
+
- [ ] Explicações de código
|
|
470
|
+
- [ ] Arquivos específicos listados
|
|
471
|
+
- [ ] Cenários de teste com input/output
|
|
472
|
+
- [ ] Checklist verificável
|
|
473
|
+
|
|
474
|
+
### ✅ Dependências
|
|
475
|
+
|
|
476
|
+
- [ ] Ordem de execução clara
|
|
477
|
+
- [ ] Dependências mapeadas
|
|
478
|
+
- [ ] Paralelas identificadas
|
|
479
|
+
|
|
480
|
+
### ✅ Validação
|
|
481
|
+
|
|
482
|
+
- [ ] JSON é válido
|
|
483
|
+
- [ ] Nenhuma subtarefa vaga
|
|
484
|
+
- [ ] Toda subtarefa tem ≥ 4h e ≤ 1 dia de trabalho
|
|
485
|
+
- [ ] Nenhuma fatia horizontal (split por camada)
|
|
486
|
+
- [ ] Todas passam no Teste de Validação de independência
|
|
487
|
+
- [ ] Todos os títulos com [STACK]
|
|
488
|
+
- [ ] Nenhum "..."
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## Integração com Outros Workflows
|
|
493
|
+
|
|
494
|
+
### Entrada (de onde vem)
|
|
495
|
+
|
|
496
|
+
```
|
|
497
|
+
eng.build-tech-spec → tech-spec.md → eng.breakdown-subtasks
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
### Saída (para onde vai)
|
|
501
|
+
|
|
502
|
+
```
|
|
503
|
+
eng.breakdown-subtasks → subtasks JSON → Jira
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
### Relação com Outros Workflows
|
|
507
|
+
|
|
508
|
+
| Workflow | Relação |
|
|
509
|
+
| -------------------- | ---------------------------------- |
|
|
510
|
+
| `build-tech-spec` | Cria a Tech Spec que será quebrada |
|
|
511
|
+
| `breakdown-subtasks` | Quebra em subtarefas executáveis |
|
|
512
|
+
| `start` | Cria a architecture.md |
|
|
513
|
+
| `plan` | Usa as fases (não as subtarefas) |
|
|
514
|
+
|
|
515
|
+
---
|
|
516
|
+
|
|
517
|
+
## Erros Comuns a Evitar
|
|
518
|
+
|
|
519
|
+
### ❌ Anti-padrões
|
|
520
|
+
|
|
521
|
+
1. **Fatia horizontal (split por camada)** — o erro mais comum
|
|
522
|
+
- ❌ `[DATA] Criar migration users` + `[BACKEND] Criar DTO` + `[BACKEND] Criar repository` + `[BACKEND] Criar use-case` + `[BACKEND] Criar controller` (5 cards, nenhum entrega valor sozinho)
|
|
523
|
+
- ❌ `[BACKEND] Adicionar valor ao enum StatusPagamento`
|
|
524
|
+
- ❌ `[BACKEND] Criar factory do use-case X`
|
|
525
|
+
- ✅ `[BACKEND] Criar endpoint POST /api/payments/create` — uma subtarefa contendo migration + DTO + repository + use-case + factory + controller + enum + testes
|
|
526
|
+
|
|
527
|
+
2. **Subtarefa muito grande (múltiplos entregáveis juntos)**
|
|
528
|
+
- ❌ "[BACKEND] Implementar todo o sistema de pagamento" (múltiplos endpoints = múltiplos entregáveis)
|
|
529
|
+
- ✅ "[BACKEND] Endpoint POST /api/payment/create" + "[BACKEND] Endpoint POST /api/payment/refund" (duas fatias verticais independentes)
|
|
530
|
+
|
|
531
|
+
3. **Título vago**
|
|
532
|
+
- ❌ "[BACKEND] Implementar feature"
|
|
533
|
+
- ✅ "[BACKEND] Criar endpoint POST /api/payment/process"
|
|
534
|
+
|
|
535
|
+
4. **Sem código de exemplo**
|
|
536
|
+
- ❌ "Crie um serviço para..."
|
|
537
|
+
- ✅ Código COMPLETO com imports, tipos, implementação
|
|
538
|
+
|
|
539
|
+
5. **Sem arquivos específicos**
|
|
540
|
+
- ❌ "Siga o padrão do projeto"
|
|
541
|
+
- ✅ "Copie a estrutura de `src/services/user.service.ts`"
|
|
542
|
+
|
|
543
|
+
6. **Sem checklist**
|
|
544
|
+
- ❌ "Código pronto"
|
|
545
|
+
- ✅ Lista verificável de itens
|
|
546
|
+
|
|
547
|
+
---
|
|
548
|
+
|
|
549
|
+
## Exemplo de Subtarefa BEM FEITA vs MAL FEITA
|
|
550
|
+
|
|
551
|
+
### ❌ MAL FEITA
|
|
552
|
+
|
|
553
|
+
```json
|
|
554
|
+
{
|
|
555
|
+
"summary": "[BACKEND] Criar autenticação",
|
|
556
|
+
"description": "Implementar o sistema de autenticação com JWT.\n\nFaça: Login, registro e validação.\n\nUse bcrypt para senha e JWT para token.\n\nRetorne o usuário no login."
|
|
557
|
+
}
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
**Problemas:**
|
|
561
|
+
|
|
562
|
+
- Título vago
|
|
563
|
+
- Sem detalhamento
|
|
564
|
+
- Sem código
|
|
565
|
+
- Sem arquivos específicos
|
|
566
|
+
- Sem testes
|
|
567
|
+
|
|
568
|
+
### ✅ BEM FEITA
|
|
569
|
+
|
|
570
|
+
````json
|
|
571
|
+
{
|
|
572
|
+
"summary": "[BACKEND] Criar endpoint POST /api/auth/register com validação",
|
|
573
|
+
"description": "## 🎯 O Que Você Vai Fazer\n\nCriar o endpoint de registro que recebe email/senha, valida dados, cria usuário no banco e retorna JWT.\n\n---\n\n## 📋 Contexto\n\n### Por que?\nSistema precisa permitir novos usuários se cadastrem.\n\n### Pré-requisitos\n- [ ] Migration de usuários ([DATA] Criar migration tabela users)\n\n---\n\n## 🛠️ Stack\n\n| Tech | Versão | Para |\n|------|--------|------|\n| Express | 4.18+ | Framework HTTP |\n| bcrypt | 5.1+ | Hash de senha |\n| JWT | 9.0+ | Tokens |\n\n---\n\n## 📁 Arquivos\n\n| Arquivo | Ação | Descrição |\n|---------|------|--------|\n| `src/controllers/auth.controller.ts` | 🆕 | Controlador |\n| `src/services/auth.service.ts` | 🆕 | Lógica de negócio |\n| `src/routes/auth.ts` | 🆕 | Rotas |\n| `src/__tests__/auth.spec.ts` | 🆕 | Testes |\n\n---\n\n## 👣 Passos\n\n### Passo 1: Criar schema de validação\n\n```typescript\n// src/schemas/auth.schema.ts\nimport { body } from 'express-validator';\n\nexport const registerSchema = [\n body('email')\n .isEmail()\n .withMessage('Email inválido')\n .normalizeEmail(),\n body('password')\n .isLength({ min: 8 })\n .withMessage('Mínimo 8 caracteres')\n .matches(/[A-Z]/)\n .withMessage('Precisa letra maiúscula'),\n];\n```\n\n**Explicação:**\n- `isEmail()`: Valida formato\n- `normalizeEmail()`: Padroniza\n- `matches(/[A-Z]/)`: Regex para maiúscula\n\n---\n\n### Passo 2: Criar AuthService\n\n```typescript\n// src/services/auth.service.ts\nimport bcrypt from 'bcrypt';\nimport jwt from 'jsonwebtoken';\n\nexport class AuthService {\n async register(email: string, password: string) {\n // Hash da senha\n const hash = await bcrypt.hash(password, 10);\n \n // Criar usuário (assumindo repo existe)\n const user = await this.userRepo.create({\n email,\n passwordHash: hash,\n });\n \n // Gerar token\n const token = jwt.sign(\n { userId: user.id },\n process.env.JWT_SECRET!,\n { expiresIn: '24h' }\n );\n \n return { user, token };\n }\n}\n```\n\n**Explicação:**\n- `bcrypt.hash(password, 10)`: 10 salt rounds é seguro\n- `jwt.sign()`: Cria token que expira em 24h\n- Não retornamos passwordHash no response\n\n---\n\n## 🧪 Testes\n\n```typescript\n// src/__tests__/auth.spec.ts\nimport request from 'supertest';\nimport { app } from '../app';\n\ndescribe('POST /api/auth/register', () => {\n it('deve registrar com email e senha válidos', async () => {\n const response = await request(app)\n .post('/api/auth/register')\n .send({\n email: 'test@example.com',\n password: 'Senha123!',\n });\n \n expect(response.status).toBe(201);\n expect(response.body).toHaveProperty('token');\n });\n \n it('deve retornar 400 para email inválido', async () => {\n const response = await request(app)\n .post('/api/auth/register')\n .send({\n email: 'invalid',\n password: 'Senha123!',\n });\n \n expect(response.status).toBe(400);\n });\n});\n```\n\n### Cenários\n\n| Cenário | Input | Output |\n|---------|-------|--------|\n| Válido | email + senha válidos | 201 + token |\n| Email inválido | email sem @ | 400 VALIDATION_ERROR |\n| Senha fraca | < 8 chars | 400 VALIDATION_ERROR |\n\n---\n\n## ✅ Checklist\n\n- [ ] Schema criado\n- [ ] AuthService implementado\n- [ ] AuthController implementado\n- [ ] Rotas configuradas\n- [ ] Testes passando\n- [ ] Linter clean\n- [ ] Build ok\n\n---\n\n## ⚠️ Riscos\n\n| Risco | Como Evitar |\n|-------|-------------|\n| JWT_SECRET exposto | Usar .env, nunca commitar |\n| Senha em log | Não logar req.body |\n\n---\n\n## 🔗 Dependências\n\n**Depende de:** [DATA] Criar migration tabela users\n**Desbloqueia:** [FRONTEND] Criar tela de registro\n**Paralela com:** [INFRA] Configurar variáveis JWT\n"
|
|
574
|
+
}
|
|
575
|
+
````
|
|
576
|
+
|
|
577
|
+
**Diferenças:**
|
|
578
|
+
|
|
579
|
+
- ✅ Título específico
|
|
580
|
+
- ✅ Código COMPLETO
|
|
581
|
+
- ✅ Explicação linha a linha
|
|
582
|
+
- ✅ Testes com cenários
|
|
583
|
+
- ✅ Arquivos específicos
|
|
584
|
+
- ✅ Checklist verificável
|
|
585
|
+
- ✅ Dependências mapeadas
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: modelo de versionamento de codigo
|
|
3
|
+
auto_execution_mode: 3
|
|
4
|
+
env_file: "@/ENV.md"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
> **Applies to:** HUB: all | POSITION: all | AREA: ENGINEERING | SQUAD: all
|
|
8
|
+
|
|
9
|
+
Vamos preparar isso para um release aumentando o número da versão.
|
|
10
|
+
|
|
11
|
+
Siga estas regras para versionamento x.y.z:
|
|
12
|
+
|
|
13
|
+
- x (Versão major): Incremente quando você fizer mudanças incompatíveis na API ou feature. Exemplos incluem:
|
|
14
|
+
Mudanças que quebram APIs públicas (ex.: remover ou renomear métodos).
|
|
15
|
+
Reescritas majors ou refatoração que alteram comportamento.
|
|
16
|
+
Mudanças que requerem que usuários atualizem seu código ou dependências para manter compatibilidade.
|
|
17
|
+
- y (Versão minor): Incremente quando você adicionar novas features ou melhorias de forma retrocompatível. Exemplos incluem:
|
|
18
|
+
Adicionando novos métodos, ponto de acessos, ou features.
|
|
19
|
+
Depreciar features (mas não removê-las ainda).
|
|
20
|
+
Melhorias que não quebram features existentes.
|
|
21
|
+
- z (Versão patch): Incremente quando você fizer correções de bugs retrocompatíveis ou pequenas atualizações. Exemplos incluem:
|
|
22
|
+
Corrigir bugs sem alterar feature pretendida.
|
|
23
|
+
Pequenas melhorias de performance.
|
|
24
|
+
Atualizações de documentação ou mudanças de metadata.
|
|
25
|
+
|
|
26
|
+
Altere a versão no pyproject.toml.
|
|
27
|
+
Então, execute `uv sync --all-extras` para regenerar o lock file.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
> **Applies to:** HUB: all | POSITION: all | AREA: ENGINEERING | SQUAD: all
|
|
2
|
+
|
|
3
|
+
# Eng Docs Scraping Rules — Documentação de Robôs de Scraping
|
|
4
|
+
|
|
5
|
+
## Objetivo
|
|
6
|
+
|
|
7
|
+
Definir o padrão de documentação técnica para robôs de scraping do projeto.
|
|
8
|
+
|
|
9
|
+
## Escopo
|
|
10
|
+
|
|
11
|
+
Aplicável sempre que um robô novo for implementado, um bug estrutural for resolvido, ou descobertas relevantes sobre o site-alvo forem feitas.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Regras
|
|
16
|
+
|
|
17
|
+
### Obrigatório
|
|
18
|
+
|
|
19
|
+
#### Localização
|
|
20
|
+
|
|
21
|
+
- Sempre criar em `docs/engineering/robots/{robot-tag}-robot.md`
|
|
22
|
+
- Exemplos: `docs/engineering/robots/ba-robot.md`, `docs/engineering/robots/sp-robot.md`
|
|
23
|
+
|
|
24
|
+
#### Conteúdo obrigatório
|
|
25
|
+
|
|
26
|
+
Todo arquivo `{robot-tag}-robot.md` deve conter:
|
|
27
|
+
|
|
28
|
+
| Seção | O que documentar |
|
|
29
|
+
|---|---|
|
|
30
|
+
| **Visão Geral** | O que o robô coleta e o que **não** coleta (limitações por design) |
|
|
31
|
+
| **Fluxo de Execução** | Sequência de chamadas HTTP com URLs completas de cada etapa |
|
|
32
|
+
| **Fontes de Dados** | Cada fonte (PDF, HTML, API) com mapeamento de campos/colunas |
|
|
33
|
+
| **Campos Extraídos** | Tabela por `situation` (ex: IMPOSTA vs AGUARDANDO IMPOSICAO) — quais campos existem em cada uma e a fonte |
|
|
34
|
+
| **Limitações Conhecidas** | Campos indisponíveis na fonte do DETRAN/órgão — documentar por que não é possível extrair |
|
|
35
|
+
| **Histórico de Bugs** | Bugs resolvidos com referência ao Jira key, sintoma, causa e fix aplicado |
|
|
36
|
+
| **Checklist de Troubleshooting** | Tabela: sintoma → causa provável → ação |
|
|
37
|
+
|
|
38
|
+
#### Quando atualizar
|
|
39
|
+
|
|
40
|
+
- Ao implementar um robô novo
|
|
41
|
+
- Ao resolver qualquer bug estrutural (ex: campo retornando vazio, matching falho)
|
|
42
|
+
- Ao fazer descobertas relevantes sobre o comportamento do site-alvo (ex: estrutura de colunas HTML, campos disponíveis por situação de multa)
|
|
43
|
+
- Sempre referenciar o Jira key no histórico de bugs
|
|
44
|
+
|
|
45
|
+
### Proibido
|
|
46
|
+
|
|
47
|
+
- ❌ Criar em `docs/robots/` — pasta incorreta, usar `docs/engineering/robots/`
|
|
48
|
+
- ❌ Omitir a seção de **Limitações Conhecidas** — é fundamental para evitar que outros devs tentem implementar algo impossível
|
|
49
|
+
- ❌ Omitir o **Histórico de Bugs** — descobertas custam tempo; documentar evita retrabalho
|
|
50
|
+
|
|
51
|
+
### Recomendado
|
|
52
|
+
|
|
53
|
+
- Chamar `/docs-index` após criar ou atualizar qualquer `{robot-tag}-robot.md` para manter o índice atualizado
|
|
54
|
+
- Incluir o índice de colunas da tabela HTML (com numeração `[0]`, `[1]`, etc.) sempre que for inspecionado via log
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Exceções
|
|
59
|
+
|
|
60
|
+
Nenhuma — todo robô deve ter sua documentação, independente do tamanho ou complexidade.
|
|
61
|
+
|
|
62
|
+
## Referências
|
|
63
|
+
|
|
64
|
+
- `docs/engineering/robots/{robot-tag}-robot.md` — referência de implementação completa
|