adi_dev_workflow 1.0.0 → 1.1.1
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/bin/index.js +0 -0
- package/frameworks/agents/qa-staff-engineer.md +311 -0
- package/frameworks/agents/qa-validation-expert.md +458 -0
- package/frameworks/agents/tech-review-conformance.md +200 -0
- package/frameworks/commands/generate-project-profile.md +68 -0
- package/frameworks/commands/generate-prompt.md +33 -98
- package/frameworks/commands/ministack/README.md +61 -46
- package/frameworks/commands/ministack/code-review.md +36 -49
- package/frameworks/commands/ministack/generate-intent.md +25 -2
- package/frameworks/commands/ministack/generate-scope.md +30 -6
- package/frameworks/commands/ministack/generate-tasks.md +191 -6
- package/frameworks/commands/ministack/generate-tech-direction.md +43 -0
- package/frameworks/commands/ministack/run-ministack-tasks.md +352 -33
- package/frameworks/commands/ministack/run-ministack-withlinear.md +23 -22
- package/frameworks/commands/ministack/status.md +153 -0
- package/frameworks/commands/sdd/code-review.md +10 -10
- package/frameworks/commands/sdd/generate-prd.md +32 -2
- package/frameworks/commands/sdd/generate-task-plan.md +199 -5
- package/frameworks/commands/sdd/generate-tech-direction.md +43 -0
- package/frameworks/commands/sdd/generate-tech-spec.md +218 -0
- package/frameworks/commands/sdd/generate-tests.md +2 -2
- package/frameworks/commands/sdd/run_tasks.md +391 -43
- package/frameworks/commands/sdd/run_tasks_withlinear.md +276 -37
- package/frameworks/commands/sdd/status.md +160 -0
- package/frameworks/commands/sdd/validate-sdd.md +18 -2
- package/frameworks/commands/sync-tasks-to-linear.md +588 -588
- package/frameworks/commands/taskcard/generate-taskcard.md +113 -25
- package/frameworks/commands/taskcard/run-taskcard.md +203 -34
- package/frameworks/skills/ministack-intent-expert/SKILL.md +16 -3
- package/frameworks/skills/ministack-intent-expert/templates/intent-template.md +1 -1
- package/frameworks/skills/ministack-scope-expert/SKILL.md +19 -11
- package/frameworks/skills/ministack-scope-expert/templates/scope-template.md +1 -1
- package/frameworks/skills/ministack-tasks-expert/SKILL.md +204 -0
- package/frameworks/skills/ministack-tasks-expert/templates/task_plan_template.md +78 -0
- package/frameworks/skills/ministack-tasks-expert/templates/task_template.md +103 -0
- package/frameworks/skills/ministack-tech-direction-expert/SKILL.md +230 -0
- package/frameworks/skills/ministack-tech-direction-expert/evals/evals.json +1 -0
- package/frameworks/skills/ministack-tech-direction-expert/templates/tech_direction-template.md +17 -0
- package/frameworks/skills/prompt-engineer-expert/SKILL.md +232 -0
- package/frameworks/skills/prompt-engineer-expert/templates/prompt_template.md +139 -0
- package/frameworks/skills/sdd-prd-expert/SKILL.md +155 -95
- package/frameworks/skills/sdd-prd-expert/evals/evals.json +59 -0
- package/frameworks/skills/sdd-prd-expert/templates/prd_template.md +46 -46
- package/frameworks/skills/sdd-prd-expert/templates/tech_direction-template.md +23 -0
- package/frameworks/skills/sdd-task-plan-expert/SKILL.md +191 -201
- package/frameworks/skills/sdd-task-plan-expert/evals/evals.json +109 -0
- package/frameworks/skills/sdd-task-plan-expert/templates/task_plan_template.md +33 -33
- package/frameworks/skills/sdd-task-plan-expert/templates/task_template.md +58 -32
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/benchmark.json +99 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/benchmark.md +64 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/eval_metadata.json +12 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/with_skill/grading.json +32 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/with_skill/outputs/response.md +134 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/with_skill/outputs/transcript.md +68 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/with_skill/timing.json +5 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/without_skill/grading.json +32 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/without_skill/outputs/response.md +525 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/without_skill/outputs/transcript.md +30 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/without_skill/timing.json +5 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/eval_metadata.json +12 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/with_skill/grading.json +32 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/with_skill/outputs/response.md +1126 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/with_skill/outputs/transcript.md +131 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/with_skill/timing.json +5 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/without_skill/grading.json +32 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/without_skill/outputs/response.md +452 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/without_skill/outputs/transcript.md +78 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/without_skill/timing.json +5 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/eval_metadata.json +12 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/with_skill/grading.json +32 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/with_skill/outputs/response.md +101 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/with_skill/outputs/transcript.md +133 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/with_skill/timing.json +5 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/without_skill/grading.json +32 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/without_skill/outputs/response.md +248 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/without_skill/outputs/transcript.md +49 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/without_skill/timing.json +5 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/review.html +1325 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/benchmark.json +94 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/benchmark.md +67 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/eval_metadata.json +12 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/with_skill/grading.json +32 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/with_skill/outputs/response.md +117 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/with_skill/outputs/transcript.md +91 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/with_skill/timing.json +1 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/without_skill/grading.json +32 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/without_skill/outputs/response.md +694 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/without_skill/outputs/transcript.md +45 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/without_skill/timing.json +1 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/eval_metadata.json +12 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/with_skill/grading.json +32 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/with_skill/outputs/response.md +1087 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/with_skill/outputs/transcript.md +124 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/with_skill/timing.json +1 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/without_skill/grading.json +32 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/without_skill/outputs/response.md +458 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/without_skill/outputs/transcript.md +84 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/without_skill/timing.json +1 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/eval_metadata.json +12 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/with_skill/grading.json +32 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/with_skill/outputs/response.md +70 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/with_skill/outputs/transcript.md +148 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/with_skill/timing.json +1 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/without_skill/grading.json +32 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/without_skill/outputs/response.md +249 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/without_skill/outputs/transcript.md +80 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/without_skill/timing.json +1 -0
- package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/review.html +1325 -0
- package/frameworks/skills/sdd-tech-direction-expert/SKILL.md +235 -0
- package/frameworks/skills/sdd-tech-direction-expert/evals/evals.json +1 -0
- package/frameworks/skills/sdd-tech-direction-expert/templates/tech_direction-template.md +23 -0
- package/frameworks/skills/sdd-tech-spec-expert/SKILL.md +317 -0
- package/frameworks/skills/sdd-tech-spec-expert/evals/evals.json +199 -0
- package/frameworks/skills/sdd-tech-spec-expert/templates/spec_tech_template.md +290 -0
- package/frameworks/skills/sdd-tech-spec-expert/templates/tech_direction-template.md +23 -0
- package/frameworks/skills/taskcard-expert/SKILL.md +40 -77
- package/frameworks/skills/taskcard-expert/templates/template.md +0 -2
- package/frameworks/templates/prompt_template.md +44 -1
- package/package.json +1 -1
- package/frameworks/commands/ministack/generate-tests.md +0 -37
- package/frameworks/commands/sdd/generate-spec-tech.md +0 -37
- package/frameworks/commands/taskcard/generate-tests.md +0 -37
- package/frameworks/skills/ministack-expert/SKILL.md +0 -415
- package/frameworks/skills/ministack-expert/templates/tasks-template.md +0 -141
- package/frameworks/skills/ministack-qa-expert/SKILL.md +0 -273
- package/frameworks/skills/ministack-qa-expert/templates/task_tests_template.md +0 -24
- package/frameworks/skills/ministack-qa-expert/templates/test_strategy_template.md +0 -75
- package/frameworks/skills/sdd-qa-expert/SKILL.md +0 -284
- package/frameworks/skills/sdd-qa-expert/templates/task_tests_template.md +0 -24
- package/frameworks/skills/sdd-qa-expert/templates/test_strategy_template.md +0 -75
- package/frameworks/skills/sdd-spec-tech-expert/SKILL.md +0 -387
- package/frameworks/skills/sdd-spec-tech-expert/templates/spec_tech_template.md +0 -246
- package/frameworks/skills/sdd-spec-tech-expert/templates/tech_direction-template.md +0 -23
- package/frameworks/skills/taskcard-qa-expert/SKILL.md +0 -265
- package/frameworks/skills/taskcard-qa-expert/templates/task_tests_template.md +0 -78
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Transcript de Tools Chamadas — Eval 2: Spec Simples (with_skill)
|
|
2
|
+
|
|
3
|
+
## Data: 2026-03-07
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Leitura do Skill e Templates
|
|
8
|
+
|
|
9
|
+
### Tool: Read (3 chamadas em paralelo)
|
|
10
|
+
1. **Read** `.claude/skills/sdd-task-plan-expert/SKILL.md`
|
|
11
|
+
- Resultado: Skill completo lido (384 linhas). Contém instrucoes do framework SDD para geracao de TASK PLAN, processo interativo, guardrails, templates e regras.
|
|
12
|
+
|
|
13
|
+
2. **Read** `.claude/skills/sdd-task-plan-expert/templates/task_plan_template.md`
|
|
14
|
+
- Resultado: Template do task_plan.md lido (84 linhas). Contém 9 secoes: Identificacao, Objetivo, Macro-Fases, Lista de Tasks, Rastreabilidade, Dependencias, Criterios de Conclusao, Riscos, Checklist.
|
|
15
|
+
|
|
16
|
+
3. **Read** `.claude/skills/sdd-task-plan-expert/templates/task_template.md`
|
|
17
|
+
- Resultado: Template da task individual lido (90 linhas). Contém 8 secoes: Identificacao, Objetivo, Descricao Detalhada, Aceite Tecnico, Arquivos Impactados, Testes, Notas, Checklist.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 2. Exploracao do Codebase — Estrutura de Arquivos
|
|
22
|
+
|
|
23
|
+
### Tool: Glob (4 chamadas em paralelo)
|
|
24
|
+
1. **Glob** `internal/**/*.go` — Encontrados 17 arquivos Go no projeto
|
|
25
|
+
2. **Glob** `internal/db/migrations/*.sql` — Encontrado 1 arquivo: `001_create_usuarios.sql`
|
|
26
|
+
3. **Glob** `internal/db/queries/*.sql` — Nenhum arquivo encontrado (queries estao em `internal/db/sqlc/queries/`)
|
|
27
|
+
4. **Glob** `api/proto/**/*.proto` — Encontrado 1 arquivo: `api/proto/v1/user.proto`
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 3. Leitura dos Arquivos do Projeto (7 chamadas em paralelo)
|
|
32
|
+
|
|
33
|
+
### Tool: Read
|
|
34
|
+
1. **Read** `internal/db/migrations/001_create_usuarios.sql`
|
|
35
|
+
- Resultado: Schema da tabela `usuarios` com colunas: id, nome, email, senha_hash, data_criacao, data_atualizacao. NAO possui coluna `telefone`.
|
|
36
|
+
|
|
37
|
+
2. **Read** `internal/repository/user_repository.go`
|
|
38
|
+
- Resultado: Struct User (sem Phone), interface UserRepository (Create, GetByID), implementacao sqlcUserRepository, funcao toUser. Modulo FX.
|
|
39
|
+
|
|
40
|
+
3. **Read** `internal/service/user_service.go`
|
|
41
|
+
- Resultado: CreateUserInput (sem Phone), interface UserService (CreateUser, GetUser — SEM UpdateUser), implementacao userServiceImpl. Modulo FX.
|
|
42
|
+
|
|
43
|
+
4. **Read** `internal/handler/grpc/user_handler.go`
|
|
44
|
+
- Resultado: UserHandler com CreateUser e GetUser (SEM UpdateUser). Funcao mapServiceError. NAO retorna campo phone.
|
|
45
|
+
|
|
46
|
+
5. **Read** `api/proto/v1/user.proto`
|
|
47
|
+
- Resultado: Messages CreateUserRequest (3 campos), CreateUserResponse (4 campos), GetUserRequest, GetUserResponse (5 campos). Service com CreateUser e GetUser. SEM UpdateUser. SEM campo phone.
|
|
48
|
+
|
|
49
|
+
6. **Read** `internal/service/user_service_test.go`
|
|
50
|
+
- Resultado: MockUserRepository (Create, GetByID — sem Update). Testes table-driven com testify/mock. 10 testes cobrindo CreateUser e GetUser.
|
|
51
|
+
|
|
52
|
+
7. **Read** `internal/handler/grpc/user_handler_test.go`
|
|
53
|
+
- Resultado: MockUserService (CreateUser, GetUser — sem UpdateUser). 11 testes cobrindo handler CreateUser e GetUser com gRPC status codes.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 4. Leitura das Queries SQLC e Configuracao
|
|
58
|
+
|
|
59
|
+
### Tool: Glob (2 chamadas em paralelo)
|
|
60
|
+
1. **Glob** `internal/db/**/*.sql` — Encontrados: `001_create_usuarios.sql` e `internal/db/sqlc/queries/user.sql`
|
|
61
|
+
2. **Glob** `internal/db/sqlc/*` — Encontrado: `internal/db/sqlc/sqlc.yaml`
|
|
62
|
+
|
|
63
|
+
### Tool: Read (4 chamadas em paralelo)
|
|
64
|
+
1. **Read** `internal/db/sqlc/queries/user.sql`
|
|
65
|
+
- Resultado: 2 queries — CreateUser (INSERT com 6 colunas, sem telefone) e GetUserByID (SELECT * por id).
|
|
66
|
+
|
|
67
|
+
2. **Read** `internal/db/sqlc/sqlc.yaml`
|
|
68
|
+
- Resultado: Configuracao SQLC v2, engine sqlite, queries em `queries/`, schema em `../migrations/`.
|
|
69
|
+
|
|
70
|
+
3. **Read** `internal/infra/grpc/server.go`
|
|
71
|
+
- Resultado: Struct Params com fx.In, NewGRPCServer registra UserServiceServer. Modulo FX com lifecycle hooks.
|
|
72
|
+
|
|
73
|
+
4. **Read** `internal/infra/di/fx.go`
|
|
74
|
+
- Resultado: AppModule compoe config, logger, database, repository, service, grpchandler, grpcserver.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 5. Leitura do Handler FX
|
|
79
|
+
|
|
80
|
+
### Tool: Read
|
|
81
|
+
1. **Read** `internal/handler/grpc/fx.go`
|
|
82
|
+
- Resultado: Modulo FX que provê NewUserHandler como pb.UserServiceServer via fx.Annotate/fx.As.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 6. Verificacao da Skill QA
|
|
87
|
+
|
|
88
|
+
### Tool: Glob
|
|
89
|
+
1. **Glob** `.claude/skills/sdd-qa-expert/**/*`
|
|
90
|
+
- Resultado: 3 arquivos encontrados — SKILL.md, task_tests_template.md, test_strategy_template.md. Skill QA disponivel para subagente.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 7. Criacao do Diretorio de Output
|
|
95
|
+
|
|
96
|
+
### Tool: Bash
|
|
97
|
+
1. **Bash** `mkdir -p ".claude/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/with_skill/outputs"`
|
|
98
|
+
- Resultado: Diretorio criado com sucesso.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 8. Escrita dos Arquivos de Saida
|
|
103
|
+
|
|
104
|
+
### Tool: Write
|
|
105
|
+
1. **Write** `.claude/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/with_skill/outputs/response.md`
|
|
106
|
+
- Resultado: Resposta completa com TASK PLAN + 6 tasks individuais.
|
|
107
|
+
|
|
108
|
+
2. **Write** `.claude/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/with_skill/outputs/transcript.md`
|
|
109
|
+
- Resultado: Este transcript.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Resumo de Chamadas
|
|
114
|
+
|
|
115
|
+
| Tool | Quantidade | Descricao |
|
|
116
|
+
|--------|:----------:|-------------------------------------------------|
|
|
117
|
+
| Read | 14 | Leitura de skill, templates e arquivos do projeto |
|
|
118
|
+
| Glob | 7 | Busca de arquivos no codebase |
|
|
119
|
+
| Bash | 1 | Criacao de diretorio de output |
|
|
120
|
+
| Write | 2 | Escrita dos arquivos de saida |
|
|
121
|
+
| **Total** | **24** | |
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Observacoes sobre o Processo
|
|
126
|
+
|
|
127
|
+
1. **Analise do projeto foi feita ANTES de planejar tasks** (conforme regra do skill "PONTO CRITICO: Analise Obrigatoria do Projeto")
|
|
128
|
+
2. **Descoberta critica**: O SPEC_TECH menciona UpdateUser, mas o endpoint NAO existe no codebase. Isso foi identificado na analise e impactou o escopo das tasks.
|
|
129
|
+
3. **Subagente QA**: Em uma execucao real, a secao 6 de cada task seria delegada a um subagente QA via ferramenta `Task`. Nesta simulacao (eval), a secao 6 foi preenchida diretamente com base nos padroes de teste observados no projeto.
|
|
130
|
+
4. **Paralelismo identificado**: T1 e T5 podem rodar em paralelo (migracao e proto sao independentes).
|
|
131
|
+
5. **Separacao de documentos respeitada**: O task_plan.md contem apenas referencia/indice; o detalhamento esta nas tasks individuais.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"eval_id": 2,
|
|
3
|
+
"eval_name": "spec-tech-simples-alteracao-pontual",
|
|
4
|
+
"configuration": "without_skill",
|
|
5
|
+
"expectations": [
|
|
6
|
+
{
|
|
7
|
+
"text": "Gera um numero proporcional de tasks (entre 3 e 6) — nao over-engineers com tasks demais para uma alteracao simples",
|
|
8
|
+
"passed": false,
|
|
9
|
+
"evidence": "Gerou 12 tasks para uma feature simples de adicionar um campo. Over-engineered com tasks separadas para 'regenerar codigo SQLC' (TASK-3), 'regenerar codigo Proto' (TASK-7), e 'configurar UpdateUser como rota protegida' (TASK-9) que poderiam ser subtasks."
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"text": "Respeita a ordem de dependencias das camadas (migracao > SQLC > repository > service > handler > proto)",
|
|
13
|
+
"passed": true,
|
|
14
|
+
"evidence": "Grafo de dependencias mostra TASK-1(migracao)->TASK-2(SQLC)->TASK-3(generate)->TASK-4(repo)->TASK-5(service)->TASK-8(handler). Proto em paralelo (TASK-6). Ordem correta."
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"text": "Mapeia a US-10 na tabela de rastreabilidade do task_plan",
|
|
18
|
+
"passed": false,
|
|
19
|
+
"evidence": "Nao ha tabela de rastreabilidade mapeando US-10 para tasks. A US-10 nao e mencionada no task plan."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"text": "Cada task segue o template completo (secoes 1-8) ou marca secoes N/A com justificativa",
|
|
23
|
+
"passed": false,
|
|
24
|
+
"evidence": "Tasks usam formato ad-hoc (Camada, Arquivo, Descricao, Criterio de aceite, Dependencias) em vez do template oficial com secoes 1-8 (Identificacao, Objetivo, Descricao Detalhada, Aceite Tecnico, Arquivos Impactados, Testes, Notas, Checklist)."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"text": "Salva task_plan.md como documento de REFERENCIA (sem corpo detalhado de tasks dentro dele)",
|
|
28
|
+
"passed": false,
|
|
29
|
+
"evidence": "Todo o conteudo detalhado das tasks esta inline no mesmo documento. Nao ha separacao entre task_plan (referencia) e tasks individuais."
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
# TASK PLAN — Adicionar Telefone ao Usuario v1
|
|
2
|
+
|
|
3
|
+
## 1. Identificacao
|
|
4
|
+
|
|
5
|
+
| Campo | Valor |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| **Feature** | Adicionar Telefone ao Modulo de Usuario |
|
|
8
|
+
| **Versao** | v1 |
|
|
9
|
+
| **Data** | 2026-03-07 |
|
|
10
|
+
| **SPEC_TECH** | docs/feature-telefone-usuario/v1/spec_tech.md |
|
|
11
|
+
| **Branch base** | user-feature |
|
|
12
|
+
|
|
13
|
+
## 2. Resumo
|
|
14
|
+
|
|
15
|
+
Adicionar o campo opcional `telefone` na tabela `usuarios` e propagar a mudanca por todas as camadas: migracao SQL, queries SQLC, repository, service, proto e handler gRPC. Inclui validacao opcional (10-15 caracteres quando informado) e testes unitarios.
|
|
16
|
+
|
|
17
|
+
## 3. Tarefas
|
|
18
|
+
|
|
19
|
+
### TASK-1: Criar migracao SQL para adicionar coluna telefone
|
|
20
|
+
|
|
21
|
+
**Camada:** Banco de Dados
|
|
22
|
+
**Arquivo a criar:** `internal/db/migrations/002_add_telefone_usuarios.sql`
|
|
23
|
+
**Descricao:**
|
|
24
|
+
Criar nova migracao com `ALTER TABLE usuarios ADD COLUMN telefone TEXT;`. Conforme regra de imutabilidade, nao editar a migracao 001 existente.
|
|
25
|
+
|
|
26
|
+
**Conteudo esperado:**
|
|
27
|
+
```sql
|
|
28
|
+
ALTER TABLE usuarios ADD COLUMN telefone TEXT;
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Criterio de aceite:**
|
|
32
|
+
- Arquivo criado em `internal/db/migrations/002_add_telefone_usuarios.sql`
|
|
33
|
+
- Migracao 001 inalterada
|
|
34
|
+
- Coluna `telefone` do tipo `TEXT` (nullable/opcional)
|
|
35
|
+
|
|
36
|
+
**Dependencias:** Nenhuma
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
### TASK-2: Atualizar queries SQLC para incluir telefone
|
|
41
|
+
|
|
42
|
+
**Camada:** SQLC Queries
|
|
43
|
+
**Arquivo a editar:** `internal/db/sqlc/queries/user.sql`
|
|
44
|
+
**Descricao:**
|
|
45
|
+
Adicionar a coluna `telefone` na query `CreateUser` (INSERT e parametros) e criar uma nova query `UpdateUser` que permita atualizar nome e telefone.
|
|
46
|
+
|
|
47
|
+
**Alteracoes esperadas:**
|
|
48
|
+
|
|
49
|
+
Query `CreateUser` atualizada:
|
|
50
|
+
```sql
|
|
51
|
+
-- name: CreateUser :one
|
|
52
|
+
INSERT INTO usuarios (id, nome, email, senha_hash, telefone, data_criacao, data_atualizacao)
|
|
53
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
54
|
+
RETURNING *;
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Nova query `UpdateUser`:
|
|
58
|
+
```sql
|
|
59
|
+
-- name: UpdateUser :one
|
|
60
|
+
UPDATE usuarios SET nome = ?, telefone = ?, data_atualizacao = ?
|
|
61
|
+
WHERE id = ?
|
|
62
|
+
RETURNING *;
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Criterio de aceite:**
|
|
66
|
+
- Query `CreateUser` inclui coluna `telefone`
|
|
67
|
+
- Nova query `UpdateUser` criada
|
|
68
|
+
- Executar `make generate` (ou `make sqlc`) apos a edicao para regenerar codigo
|
|
69
|
+
|
|
70
|
+
**Dependencias:** TASK-1
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
### TASK-3: Regenerar codigo SQLC
|
|
75
|
+
|
|
76
|
+
**Camada:** Codigo Gerado
|
|
77
|
+
**Descricao:**
|
|
78
|
+
Executar `make generate` para que o SQLC regenere os arquivos Go em `internal/db/sqlc/` com a nova coluna `telefone` e a nova query `UpdateUser`.
|
|
79
|
+
|
|
80
|
+
**Comando:**
|
|
81
|
+
```bash
|
|
82
|
+
make generate
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Criterio de aceite:**
|
|
86
|
+
- Struct `Usuario` gerada inclui campo `Telefone`
|
|
87
|
+
- Struct `CreateUserParams` inclui campo `Telefone`
|
|
88
|
+
- Struct `UpdateUserParams` gerada
|
|
89
|
+
- Funcao `UpdateUser` gerada em queries
|
|
90
|
+
|
|
91
|
+
**Dependencias:** TASK-1, TASK-2
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### TASK-4: Atualizar modelo e repository do usuario
|
|
96
|
+
|
|
97
|
+
**Camada:** Repository
|
|
98
|
+
**Arquivo a editar:** `internal/repository/user_repository.go`
|
|
99
|
+
**Descricao:**
|
|
100
|
+
Adicionar campo `Phone` ao modelo `User`. Atualizar o mapeamento na funcao `toUser` para converter `telefone` (banco) para `Phone` (Go). Atualizar `Create` para passar `telefone` nos parametros SQLC. Adicionar metodo `Update` na interface e implementacao.
|
|
101
|
+
|
|
102
|
+
**Alteracoes esperadas:**
|
|
103
|
+
|
|
104
|
+
1. Adicionar campo na struct:
|
|
105
|
+
```go
|
|
106
|
+
type User struct {
|
|
107
|
+
ID string
|
|
108
|
+
Name string
|
|
109
|
+
Email string
|
|
110
|
+
PasswordHash string
|
|
111
|
+
Phone string // novo campo
|
|
112
|
+
CreatedAt time.Time
|
|
113
|
+
UpdatedAt time.Time
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
2. Atualizar interface:
|
|
118
|
+
```go
|
|
119
|
+
type UserRepository interface {
|
|
120
|
+
Create(ctx context.Context, user *User) (*User, error)
|
|
121
|
+
GetByID(ctx context.Context, id string) (*User, error)
|
|
122
|
+
Update(ctx context.Context, user *User) (*User, error) // novo metodo
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
3. Atualizar `Create` para incluir `Telefone` nos params SQLC
|
|
127
|
+
4. Implementar metodo `Update` usando `r.queries.UpdateUser`
|
|
128
|
+
5. Atualizar funcao `toUser` para mapear `Telefone` -> `Phone`
|
|
129
|
+
|
|
130
|
+
**Criterio de aceite:**
|
|
131
|
+
- Campo `Phone` presente no modelo `User`
|
|
132
|
+
- Mapeamento `Telefone` <-> `Phone` funcional em `toUser`
|
|
133
|
+
- Metodo `Update` implementado
|
|
134
|
+
- `Create` passa `telefone` para o SQLC
|
|
135
|
+
|
|
136
|
+
**Dependencias:** TASK-3
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
### TASK-5: Atualizar service do usuario
|
|
141
|
+
|
|
142
|
+
**Camada:** Service
|
|
143
|
+
**Arquivo a editar:** `internal/service/user_service.go`
|
|
144
|
+
**Descricao:**
|
|
145
|
+
Adicionar campo `Phone` ao `CreateUserInput`. Criar struct `UpdateUserInput`. Adicionar metodo `UpdateUser` na interface e implementacao. Implementar validacao: se `phone` informado, deve ter entre 10 e 15 caracteres.
|
|
146
|
+
|
|
147
|
+
**Alteracoes esperadas:**
|
|
148
|
+
|
|
149
|
+
1. Atualizar input de criacao:
|
|
150
|
+
```go
|
|
151
|
+
type CreateUserInput struct {
|
|
152
|
+
Name string
|
|
153
|
+
Email string
|
|
154
|
+
Password string
|
|
155
|
+
Phone string // novo, opcional
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
2. Criar input de atualizacao:
|
|
160
|
+
```go
|
|
161
|
+
type UpdateUserInput struct {
|
|
162
|
+
ID string
|
|
163
|
+
Name string
|
|
164
|
+
Phone string // opcional
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
3. Atualizar interface:
|
|
169
|
+
```go
|
|
170
|
+
type UserService interface {
|
|
171
|
+
CreateUser(ctx context.Context, input CreateUserInput) (*repository.User, error)
|
|
172
|
+
GetUser(ctx context.Context, id string) (*repository.User, error)
|
|
173
|
+
UpdateUser(ctx context.Context, input UpdateUserInput) (*repository.User, error) // novo
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
4. Adicionar validacao de telefone (reutilizavel em Create e Update):
|
|
178
|
+
```go
|
|
179
|
+
func validatePhone(phone string) error {
|
|
180
|
+
if phone != "" && (len(phone) < 10 || len(phone) > 15) {
|
|
181
|
+
return errors.New("telefone deve ter entre 10 e 15 caracteres")
|
|
182
|
+
}
|
|
183
|
+
return nil
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
5. Chamar `validatePhone` em `CreateUser` e `UpdateUser`
|
|
188
|
+
6. Passar `Phone` para `repository.User` em `CreateUser`
|
|
189
|
+
7. Implementar `UpdateUser` com busca por ID + chamada ao repo
|
|
190
|
+
|
|
191
|
+
**Criterio de aceite:**
|
|
192
|
+
- Campo `Phone` aceito em `CreateUser`
|
|
193
|
+
- Metodo `UpdateUser` implementado
|
|
194
|
+
- Validacao de telefone (10-15 chars) funcional
|
|
195
|
+
- Telefone vazio e aceito (campo opcional)
|
|
196
|
+
|
|
197
|
+
**Dependencias:** TASK-4
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
### TASK-6: Atualizar definicao Proto
|
|
202
|
+
|
|
203
|
+
**Camada:** Proto/gRPC
|
|
204
|
+
**Arquivo a editar:** `api/proto/v1/user.proto`
|
|
205
|
+
**Descricao:**
|
|
206
|
+
Adicionar campo `string phone` nas mensagens `CreateUserRequest`, `CreateUserResponse`, `GetUserResponse`. Criar mensagens `UpdateUserRequest` e `UpdateUserResponse`. Adicionar RPC `UpdateUser` ao service.
|
|
207
|
+
|
|
208
|
+
**Alteracoes esperadas:**
|
|
209
|
+
|
|
210
|
+
1. Adicionar `string phone = 4;` em `CreateUserRequest`
|
|
211
|
+
2. Adicionar `string phone = 4;` em `CreateUserResponse` (apos `email`, ajustar numeracao de `created_at` para 5)
|
|
212
|
+
3. Adicionar `string phone = 4;` em `GetUserResponse` (apos `email`, ajustar numeracao: `phone=4`, `created_at=5`, `updated_at=6`)
|
|
213
|
+
|
|
214
|
+
> **ATENCAO:** A numeracao dos campos existentes NAO pode ser alterada sem quebrar compatibilidade. Verificar a numeracao atual antes de definir os novos numeros. Dado que `CreateUserResponse` ja usa campos 1-4 e `GetUserResponse` usa 1-5, o campo `phone` deve usar o proximo numero disponivel em cada mensagem.
|
|
215
|
+
|
|
216
|
+
Numeracao correta baseada no proto atual:
|
|
217
|
+
- `CreateUserRequest`: `string phone = 4;` (campos existentes: 1=name, 2=email, 3=password)
|
|
218
|
+
- `CreateUserResponse`: `string phone = 5;` (campos existentes: 1=id, 2=name, 3=email, 4=created_at)
|
|
219
|
+
- `GetUserResponse`: `string phone = 6;` (campos existentes: 1=id, 2=name, 3=email, 4=created_at, 5=updated_at)
|
|
220
|
+
|
|
221
|
+
4. Criar mensagens novas:
|
|
222
|
+
```proto
|
|
223
|
+
message UpdateUserRequest {
|
|
224
|
+
string id = 1;
|
|
225
|
+
string name = 2;
|
|
226
|
+
string phone = 3;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
message UpdateUserResponse {
|
|
230
|
+
string id = 1;
|
|
231
|
+
string name = 2;
|
|
232
|
+
string email = 3;
|
|
233
|
+
string phone = 4;
|
|
234
|
+
string updated_at = 5;
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
5. Adicionar ao service:
|
|
239
|
+
```proto
|
|
240
|
+
rpc UpdateUser(UpdateUserRequest) returns (UpdateUserResponse);
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Criterio de aceite:**
|
|
244
|
+
- Campo `phone` adicionado nas mensagens existentes com numeracao correta
|
|
245
|
+
- Mensagens `UpdateUserRequest`/`UpdateUserResponse` criadas
|
|
246
|
+
- RPC `UpdateUser` registrado no service
|
|
247
|
+
- Numeracao de campos existentes NAO alterada
|
|
248
|
+
|
|
249
|
+
**Dependencias:** Nenhuma (pode ser feita em paralelo com TASK-1 a TASK-5)
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
### TASK-7: Regenerar codigo Proto
|
|
254
|
+
|
|
255
|
+
**Camada:** Codigo Gerado
|
|
256
|
+
**Descricao:**
|
|
257
|
+
Executar `make generate` (buf generate) para regenerar o codigo Go em `gen/proto/v1/`.
|
|
258
|
+
|
|
259
|
+
**Comando:**
|
|
260
|
+
```bash
|
|
261
|
+
make generate
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Criterio de aceite:**
|
|
265
|
+
- Structs Go geradas incluem campo `Phone`
|
|
266
|
+
- Interface `UserServiceServer` inclui metodo `UpdateUser`
|
|
267
|
+
- Compilacao sem erros
|
|
268
|
+
|
|
269
|
+
**Dependencias:** TASK-6
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
### TASK-8: Atualizar handler gRPC do usuario
|
|
274
|
+
|
|
275
|
+
**Camada:** Handler
|
|
276
|
+
**Arquivo a editar:** `internal/handler/grpc/user_handler.go`
|
|
277
|
+
**Descricao:**
|
|
278
|
+
Atualizar `CreateUser` para passar `Phone` do request para o service input e incluir `phone` na response. Implementar metodo `UpdateUser`. Atualizar `GetUser` para incluir `phone` na response.
|
|
279
|
+
|
|
280
|
+
**Alteracoes esperadas:**
|
|
281
|
+
|
|
282
|
+
1. Em `CreateUser`:
|
|
283
|
+
- Adicionar `Phone: req.GetPhone()` ao `CreateUserInput`
|
|
284
|
+
- Adicionar `Phone: user.Phone` na response
|
|
285
|
+
|
|
286
|
+
2. Em `GetUser`:
|
|
287
|
+
- Adicionar `Phone: user.Phone` na response
|
|
288
|
+
|
|
289
|
+
3. Novo metodo `UpdateUser`:
|
|
290
|
+
```go
|
|
291
|
+
func (h *UserHandler) UpdateUser(ctx context.Context, req *pb.UpdateUserRequest) (*pb.UpdateUserResponse, error) {
|
|
292
|
+
input := service.UpdateUserInput{
|
|
293
|
+
ID: req.GetId(),
|
|
294
|
+
Name: req.GetName(),
|
|
295
|
+
Phone: req.GetPhone(),
|
|
296
|
+
}
|
|
297
|
+
user, err := h.userService.UpdateUser(ctx, input)
|
|
298
|
+
if err != nil {
|
|
299
|
+
return nil, mapServiceError(err)
|
|
300
|
+
}
|
|
301
|
+
return &pb.UpdateUserResponse{
|
|
302
|
+
Id: user.ID,
|
|
303
|
+
Name: user.Name,
|
|
304
|
+
Email: user.Email,
|
|
305
|
+
Phone: user.Phone,
|
|
306
|
+
UpdatedAt: user.UpdatedAt.Format(time.RFC3339),
|
|
307
|
+
}, nil
|
|
308
|
+
}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
**Criterio de aceite:**
|
|
312
|
+
- `CreateUser` repassa e retorna `phone`
|
|
313
|
+
- `GetUser` retorna `phone`
|
|
314
|
+
- `UpdateUser` implementado e funcional
|
|
315
|
+
- Erros mapeados corretamente
|
|
316
|
+
|
|
317
|
+
**Dependencias:** TASK-5, TASK-7
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
### TASK-9: Configurar UpdateUser como rota protegida
|
|
322
|
+
|
|
323
|
+
**Camada:** Configuracao
|
|
324
|
+
**Arquivo a verificar:** `configs/config.yaml`
|
|
325
|
+
**Descricao:**
|
|
326
|
+
Verificar que `UpdateUser` NAO esta em `skip_methods` (ou seja, requer autenticacao). Apenas `CreateUser` deve ser publico. Se necessario, nenhuma alteracao e necessaria, apenas confirmar.
|
|
327
|
+
|
|
328
|
+
**Criterio de aceite:**
|
|
329
|
+
- `UpdateUser` exige autenticacao (Bearer token)
|
|
330
|
+
- Nenhuma rota protegida acidentalmente exposta
|
|
331
|
+
|
|
332
|
+
**Dependencias:** TASK-8
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
### TASK-10: Atualizar testes unitarios do service
|
|
337
|
+
|
|
338
|
+
**Camada:** Testes
|
|
339
|
+
**Arquivo a editar:** `internal/service/user_service_test.go`
|
|
340
|
+
**Descricao:**
|
|
341
|
+
Atualizar mock do repository para incluir metodo `Update`. Adicionar testes para:
|
|
342
|
+
|
|
343
|
+
1. `TestCreateUser_WithPhone_Success` — criacao com telefone valido
|
|
344
|
+
2. `TestCreateUser_WithInvalidPhone_TooShort` — telefone com menos de 10 chars
|
|
345
|
+
3. `TestCreateUser_WithInvalidPhone_TooLong` — telefone com mais de 15 chars
|
|
346
|
+
4. `TestCreateUser_WithEmptyPhone_Success` — telefone vazio (opcional)
|
|
347
|
+
5. `TestUpdateUser_Success` — atualizacao com dados validos
|
|
348
|
+
6. `TestUpdateUser_WithPhone_Success` — atualizacao com telefone valido
|
|
349
|
+
7. `TestUpdateUser_InvalidPhone` — telefone invalido na atualizacao
|
|
350
|
+
8. `TestUpdateUser_NotFound` — usuario nao encontrado
|
|
351
|
+
|
|
352
|
+
**Criterio de aceite:**
|
|
353
|
+
- Mock atualizado com metodo `Update`
|
|
354
|
+
- Todos os cenarios de telefone cobertos (valido, vazio, curto, longo)
|
|
355
|
+
- Testes de `UpdateUser` adicionados
|
|
356
|
+
- Todos os testes passam: `CGO_ENABLED=1 go test ./internal/service/... -v`
|
|
357
|
+
|
|
358
|
+
**Dependencias:** TASK-5
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
### TASK-11: Atualizar testes unitarios do handler
|
|
363
|
+
|
|
364
|
+
**Camada:** Testes
|
|
365
|
+
**Arquivo a editar:** `internal/handler/grpc/user_handler_test.go`
|
|
366
|
+
**Descricao:**
|
|
367
|
+
Atualizar mock do service para incluir metodo `UpdateUser`. Adicionar testes para:
|
|
368
|
+
|
|
369
|
+
1. `TestUserHandler_CreateUser_WithPhone` — verifica que phone e repassado e retornado
|
|
370
|
+
2. `TestUserHandler_GetUser_WithPhone` — verifica que phone e retornado
|
|
371
|
+
3. `TestUserHandler_UpdateUser_Success` — atualizacao com sucesso
|
|
372
|
+
4. `TestUserHandler_UpdateUser_NotFound` — usuario nao encontrado
|
|
373
|
+
5. `TestUserHandler_UpdateUser_InvalidPhone` — telefone invalido
|
|
374
|
+
|
|
375
|
+
**Criterio de aceite:**
|
|
376
|
+
- Mock atualizado com metodo `UpdateUser`
|
|
377
|
+
- Testes de phone no CreateUser e GetUser
|
|
378
|
+
- Testes de UpdateUser cobrindo sucesso e erros
|
|
379
|
+
- Todos os testes passam: `CGO_ENABLED=1 go test ./internal/handler/grpc/... -v`
|
|
380
|
+
|
|
381
|
+
**Dependencias:** TASK-8
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
### TASK-12: Teste de integracao e validacao final
|
|
386
|
+
|
|
387
|
+
**Camada:** Validacao
|
|
388
|
+
**Descricao:**
|
|
389
|
+
Executar build e suite completa de testes para garantir que tudo funciona junto.
|
|
390
|
+
|
|
391
|
+
**Comandos:**
|
|
392
|
+
```bash
|
|
393
|
+
make build
|
|
394
|
+
make test
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
**Criterio de aceite:**
|
|
398
|
+
- Build compila sem erros
|
|
399
|
+
- Todos os testes passam
|
|
400
|
+
- Nenhuma regressao nos testes existentes
|
|
401
|
+
|
|
402
|
+
**Dependencias:** TASK-10, TASK-11
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## 4. Grafo de Dependencias
|
|
407
|
+
|
|
408
|
+
```
|
|
409
|
+
TASK-1 (migracao SQL)
|
|
410
|
+
└─> TASK-2 (queries SQLC)
|
|
411
|
+
└─> TASK-3 (make generate - SQLC)
|
|
412
|
+
└─> TASK-4 (repository)
|
|
413
|
+
└─> TASK-5 (service)
|
|
414
|
+
├─> TASK-8 (handler) [+ TASK-7]
|
|
415
|
+
└─> TASK-10 (testes service)
|
|
416
|
+
|
|
417
|
+
TASK-6 (proto) [paralelo com TASK-1..5]
|
|
418
|
+
└─> TASK-7 (make generate - proto)
|
|
419
|
+
└─> TASK-8 (handler)
|
|
420
|
+
├─> TASK-9 (config auth)
|
|
421
|
+
└─> TASK-11 (testes handler)
|
|
422
|
+
|
|
423
|
+
TASK-10 + TASK-11
|
|
424
|
+
└─> TASK-12 (validacao final)
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
## 5. Ordem de Execucao Sugerida
|
|
428
|
+
|
|
429
|
+
| Fase | Tasks | Descricao |
|
|
430
|
+
|------|-------|-----------|
|
|
431
|
+
| **Fase 1** | TASK-1, TASK-6 | Migracao SQL + Proto (paralelo) |
|
|
432
|
+
| **Fase 2** | TASK-2 | Queries SQLC |
|
|
433
|
+
| **Fase 3** | TASK-3, TASK-7 | Regenerar codigo (SQLC + Proto) — executar `make generate` uma unica vez |
|
|
434
|
+
| **Fase 4** | TASK-4 | Repository |
|
|
435
|
+
| **Fase 5** | TASK-5 | Service |
|
|
436
|
+
| **Fase 6** | TASK-8, TASK-9 | Handler + Config |
|
|
437
|
+
| **Fase 7** | TASK-10, TASK-11 | Testes (paralelo) |
|
|
438
|
+
| **Fase 8** | TASK-12 | Validacao final |
|
|
439
|
+
|
|
440
|
+
## 6. Riscos e Observacoes
|
|
441
|
+
|
|
442
|
+
1. **Numeracao Proto:** A numeracao dos campos proto existentes NAO pode ser alterada. O campo `phone` deve usar o proximo numero livre em cada mensagem. Isso e critico para compatibilidade.
|
|
443
|
+
|
|
444
|
+
2. **Migracao imutavel:** A migracao 001 NAO deve ser editada. Sempre criar nova migracao (002).
|
|
445
|
+
|
|
446
|
+
3. **Codigo gerado:** Nunca editar arquivos em `gen/` ou `internal/db/sqlc/*.go`. Sempre editar os fontes (`.proto`, `.sql`) e rodar `make generate`.
|
|
447
|
+
|
|
448
|
+
4. **Campo opcional:** O campo `telefone` e `TEXT` nullable no SQLite. No Go, o SQLC pode gerar como `sql.NullString` — verificar apos geracao e ajustar mapeamento no repository conforme necessario.
|
|
449
|
+
|
|
450
|
+
5. **UpdateUser e novo:** O proto atual nao tem `UpdateUser`. E necessario criar o RPC, mensagens e implementar em todas as camadas. A SPEC_TECH menciona "UpdateUser" mas o codebase atual nao possui esse endpoint.
|
|
451
|
+
|
|
452
|
+
6. **`make generate`:** Os comandos `make generate` das TASK-3 e TASK-7 podem ser executados em uma unica chamada se o Makefile gerar tanto SQLC quanto Proto.
|