@daniel-da-silva-alves/sddk 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/LICENSE +21 -0
  3. package/README.md +260 -0
  4. package/bin/cli.js +430 -0
  5. package/package.json +49 -0
  6. package/sddk/plugin.json +12 -0
  7. package/sddk/skills/code-review/SKILL.md +185 -0
  8. package/sddk/skills/code-review/references/anti-ai-design-patterns.md +185 -0
  9. package/sddk/skills/code-review/references/refactoring-severity-guide.md +96 -0
  10. package/sddk/skills/code-review/references/security-checklist.md +131 -0
  11. package/sddk/skills/fullstack-development/SKILL.md +128 -0
  12. package/sddk/skills/fullstack-development/references/clean-code-rules.md +146 -0
  13. package/sddk/skills/fullstack-development/references/self-review-checklist.md +64 -0
  14. package/sddk/skills/implementation-planning/SKILL.md +102 -0
  15. package/sddk/skills/implementation-planning/references/manual-tests-template.md +95 -0
  16. package/sddk/skills/implementation-planning/references/microtask-template.md +66 -0
  17. package/sddk/skills/software-requirements-specification/SKILL.md +80 -0
  18. package/sddk/skills/software-requirements-specification/references/checklist-template.md +65 -0
  19. package/sddk/skills/software-requirements-specification/references/ieee-830-template.md +151 -0
  20. package/sddk/skills/software-requirements-specification/references/socratic-interview-guide.md +96 -0
  21. package/sddk/skills/system-design-document/SKILL.md +164 -0
  22. package/sddk/skills/system-design-document/references/architecture-patterns.md +105 -0
  23. package/sddk/skills/system-design-document/references/documentation-sources-guide.md +126 -0
  24. package/sddk/skills/system-design-document/references/sdd-template.md +259 -0
  25. package/sddk/skills/system-design-document/references/standards-api-template.md +128 -0
  26. package/sddk/skills/system-design-document/references/standards-architecture-template.md +76 -0
  27. package/sddk/skills/system-design-document/references/standards-coding-template.md +114 -0
  28. package/sddk/skills/system-design-document/references/standards-design-system-template.md +137 -0
  29. package/sddk/skills/system-design-document/references/standards-naming-template.md +96 -0
  30. package/sddk/skills/system-design-document/references/standards-onboarding-guide.md +119 -0
  31. package/sddk/skills/system-design-document/references/tech-stack-analysis.md +84 -0
@@ -0,0 +1,185 @@
1
+ # Anti-Design de IA — 8 Padrões a Detectar e Rejeitar
2
+
3
+ Estes são padrões que denunciam código gerado por IA sem curadoria humana. O agente DEVE detectar e corrigir todos eles durante o Code Review.
4
+
5
+ ---
6
+
7
+ ## Padrão 1: Emojis em Interface
8
+
9
+ ### O que detectar
10
+ Emojis usados como conteúdo textual em elementos de interface do usuário.
11
+
12
+ ### Onde procurar
13
+ - Textos de botões
14
+ - Labels de formulários
15
+ - Headings e títulos
16
+ - Placeholders de inputs
17
+ - Mensagens de feedback/toast
18
+ - Navegação (menus, breadcrumbs)
19
+
20
+ ### Exemplos
21
+
22
+ ❌ **Ruim**:
23
+ ```html
24
+ <button>🚀 Enviar Projeto</button>
25
+ <h1>📊 Dashboard de Vendas</h1>
26
+ <input placeholder="🔍 Pesquisar..." />
27
+ <span>✅ Salvo com sucesso!</span>
28
+ ```
29
+
30
+ ✅ **Bom**:
31
+ ```html
32
+ <button>Enviar Projeto</button>
33
+ <h1>Dashboard de Vendas</h1>
34
+ <input placeholder="Pesquisar produtos, pedidos ou clientes" />
35
+ <span>Alterações salvas</span>
36
+ ```
37
+
38
+ ### Exceção
39
+ Emojis são aceitáveis em: conteúdo gerado por usuários (chat, comentários), campos de dados (não de UI), e quando o design system do projeto explicitamente os inclui.
40
+
41
+ ---
42
+
43
+ ## Padrão 2: CSS/Tailwind Genérico
44
+
45
+ ### O que detectar
46
+ Estilos visuais aplicados sem coerência com um design system. Cores aleatórias, tamanhos inconsistentes, espaçamentos ad-hoc.
47
+
48
+ ### Exemplos
49
+
50
+ ❌ **Ruim**:
51
+ ```html
52
+ <div class="bg-blue-500 text-white p-4 rounded-lg shadow-lg">
53
+ <h2 class="text-2xl font-bold mb-2">Título</h2>
54
+ <p class="text-gray-200">Descrição aqui</p>
55
+ </div>
56
+ ```
57
+
58
+ ✅ **Bom** (com design tokens):
59
+ ```html
60
+ <div class="bg-surface-primary text-on-surface p-card rounded-card shadow-card">
61
+ <h2 class="text-heading-md font-heading mb-spacing-sm">Título</h2>
62
+ <p class="text-body-md text-on-surface-secondary">Descrição aqui</p>
63
+ </div>
64
+ ```
65
+
66
+ Ou com CSS variables:
67
+ ```css
68
+ .card {
69
+ background: var(--color-surface-primary);
70
+ padding: var(--spacing-card);
71
+ border-radius: var(--radius-card);
72
+ box-shadow: var(--shadow-card);
73
+ }
74
+ ```
75
+
76
+ ---
77
+
78
+ ## Padrão 3: Comentários Óbvios
79
+
80
+ ### O que detectar
81
+ Comentários que reescrevem em português/inglês o que o código já diz.
82
+
83
+ ### Exemplos
84
+
85
+ ❌ **Ruim**:
86
+ ```typescript
87
+ // Importa o serviço de usuários
88
+ import { UserService } from './user.service';
89
+
90
+ // Define a variável contador como 0
91
+ let counter = 0;
92
+
93
+ // Incrementa o contador
94
+ counter++;
95
+
96
+ // Retorna a resposta
97
+ return response;
98
+ ```
99
+
100
+ ✅ **Bom** (sem comentários — o código é autoexplicativo):
101
+ ```typescript
102
+ import { UserService } from './user.service';
103
+ let counter = 0;
104
+ counter++;
105
+ return response;
106
+ ```
107
+
108
+ ---
109
+
110
+ ## Padrão 4: Nomes Genéricos
111
+
112
+ ### O que detectar
113
+ Variáveis, funções e componentes com nomes que não descrevem seu conteúdo ou propósito.
114
+
115
+ ### Lista de Nomes Proibidos
116
+
117
+ | Contexto | Nomes Genéricos ❌ |
118
+ |:---|:---|
119
+ | Variáveis | `data`, `result`, `temp`, `item`, `obj`, `val`, `info`, `stuff` |
120
+ | Funções | `handleClick`, `handleChange`, `handleSubmit`, `getData`, `processData`, `doStuff`, `check` |
121
+ | Componentes | `Card`, `Modal`, `List`, `Item`, `Container`, `Wrapper` (sem qualificador) |
122
+ | Tipos | `Props`, `Data`, `Response`, `Payload` (sem qualificador) |
123
+
124
+ ---
125
+
126
+ ## Padrão 5: Componentes Monolíticos
127
+
128
+ ### O que detectar
129
+ Arquivos de componente com mais de ~150 linhas significativas que misturam múltiplas responsabilidades.
130
+
131
+ ### Sinais
132
+ - Múltiplos `useState`/`useEffect` não relacionados no mesmo componente
133
+ - Renderização condicional extensa (múltiplos `if/else` ou ternários aninhados)
134
+ - Lógica de negócio misturada com UI
135
+ - Formulário, tabela e gráfico no mesmo componente
136
+
137
+ ---
138
+
139
+ ## Padrão 6: Código Boilerplate Repetitivo
140
+
141
+ ### O que detectar
142
+ Padrões de código idênticos ou quase idênticos repetidos em múltiplos arquivos sem abstração.
143
+
144
+ ### Sinais
145
+ - Fetch/API calls repetidos sem cliente centralizado
146
+ - Validações duplicadas entre formulários
147
+ - Tratamento de loading/error state repetido
148
+ - Formatações de data/moeda duplicadas
149
+
150
+ ---
151
+
152
+ ## Padrão 7: UI "Tutorial de YouTube"
153
+
154
+ ### O que detectar
155
+ Interfaces que parecem screenshots de tutoriais genéricos — funcionais mas sem identidade visual.
156
+
157
+ ### Sinais
158
+ - Cards com `box-shadow` padrão do framework sem personalização
159
+ - Gradientes genéricos (`linear-gradient(to right, blue, purple)`)
160
+ - Cores padrão do Tailwind sem customização (`blue-500`, `gray-700`)
161
+ - Layout grid básico sem hierarquia visual
162
+ - Tipografia padrão do browser (sem fonte customizada)
163
+ - Ícones genéricos de bibliotecas sem curadoria
164
+
165
+ ---
166
+
167
+ ## Padrão 8: Textos Placeholder Genéricos
168
+
169
+ ### O que detectar
170
+ Textos que demonstram falta de cuidado com o conteúdo real da interface.
171
+
172
+ ### Lista de Textos Proibidos
173
+
174
+ | Contexto | Textos Genéricos ❌ |
175
+ |:---|:---|
176
+ | Conteúdo | "Lorem ipsum dolor sit amet" |
177
+ | Botões | "Click here", "Submit", "Send", "OK", "Go" |
178
+ | Links | "Read more", "Learn more", "Click here" |
179
+ | Placeholders | "Enter text here", "Type something...", "Search..." |
180
+ | Labels | "Label", "Field", "Input" |
181
+ | Headings | "Title", "Heading", "Section" |
182
+ | Error msgs | "An error occurred", "Something went wrong" |
183
+
184
+ ### O que usar no lugar
185
+ Textos reais e descritivos baseados no domínio da aplicação, extraídos dos requisitos funcionais do SRS.
@@ -0,0 +1,96 @@
1
+ # Guia de Classificação de Severidade de Refatorações
2
+
3
+ Use este guia para classificar cada issue encontrada durante o Code Review. A classificação determina a **ação imediata** a ser tomada.
4
+
5
+ ---
6
+
7
+ ## Severidades
8
+
9
+ ### 🔴 Crítica — Execução Imediata
10
+
11
+ Issues que **devem ser corrigidas na mesma sessão** antes de considerar a feature concluída.
12
+
13
+ #### Critérios para Classificar como Crítica:
14
+
15
+ | Categoria | Exemplos |
16
+ |:---|:---|
17
+ | **Segurança** | SQL injection, XSS, IDOR, secrets expostos, senhas em plaintext |
18
+ | **Bug funcional** | Feature não funciona conforme SRS, crash em fluxo principal |
19
+ | **Violação grave do SDD** | Arquitetura implementada diferente do design (ex: lógica de negócio no controller) |
20
+ | **Perda de dados** | Operações destrutivas sem confirmação, falta de validação em deletes |
21
+
22
+ #### Ação:
23
+ 1. Corrigir o código diretamente
24
+ 2. Documentar o que foi corrigido no relatório de review
25
+ 3. Se houver mais de 5 correções críticas, criar microtasks e voltar para Skill 4
26
+
27
+ ---
28
+
29
+ ### 🟡 Média — Documentar no Backlog
30
+
31
+ Issues que **afetam qualidade mas não impedem o funcionamento**. Devem ser resolvidas antes do próximo release ou sprint.
32
+
33
+ #### Critérios para Classificar como Média:
34
+
35
+ | Categoria | Exemplos |
36
+ |:---|:---|
37
+ | **Code smell** | Duplicação de código, funções muito longas, complexidade ciclomática alta |
38
+ | **Naming** | Nomes inconsistentes entre arquivos, convenções misturadas |
39
+ | **Anti-IA detectado** | Emojis em UI, CSS genérico, comentários óbvios |
40
+ | **Componentização** | Componente com múltiplas responsabilidades (mas funcional) |
41
+ | **Configuração** | CORS aberto, falta de rate limiting, validação apenas no frontend |
42
+
43
+ #### Ação:
44
+ 1. Documentar em `.specs/features/{feature}/refactoring-backlog.md`
45
+ 2. Incluir: arquivo, linha, descrição, sugestão de correção
46
+ 3. Priorizar dentro do backlog
47
+
48
+ ---
49
+
50
+ ### 🟢 Baixa — Documentar no Backlog (Baixa Prioridade)
51
+
52
+ Issues que são **melhorias opcionais** de estética, performance ou organização. Não urgentes.
53
+
54
+ #### Critérios para Classificar como Baixa:
55
+
56
+ | Categoria | Exemplos |
57
+ |:---|:---|
58
+ | **Otimização** | Queries que poderiam ser mais eficientes (mas funcionam) |
59
+ | **Estilo** | Formatação inconsistente (que um linter resolveria) |
60
+ | **Documentação** | Falta de JSDoc em funções públicas |
61
+ | **Organização** | Arquivo poderia estar em outro diretório (mas funciona onde está) |
62
+ | **DX** | Mensagens de log pouco informativas |
63
+
64
+ #### Ação:
65
+ 1. Documentar em `.specs/features/{feature}/refactoring-backlog.md`
66
+ 2. Marcar como baixa prioridade
67
+ 3. Resolver quando houver tempo disponível
68
+
69
+ ---
70
+
71
+ ## Árvore de Decisão
72
+
73
+ ```
74
+ O código funciona incorretamente ou tem falha de segurança?
75
+ ├── SIM → 🔴 Crítica → CORRIGIR AGORA
76
+ └── NÃO
77
+ └── O código viola boas práticas, convenções ou o SDD?
78
+ ├── SIM → 🟡 Média → BACKLOG (prioridade)
79
+ └── NÃO
80
+ └── O código pode ser melhorado mas está OK?
81
+ ├── SIM → 🟢 Baixa → BACKLOG (quando possível)
82
+ └── NÃO → ✅ Sem issue
83
+ ```
84
+
85
+ ## Formato do Backlog Entry
86
+
87
+ ```markdown
88
+ ### RB-{número}: {Título descritivo}
89
+ - **Severidade**: 🟡 Média / 🟢 Baixa
90
+ - **Arquivo**: `{caminho/do/arquivo.ext}`
91
+ - **Linha(s)**: {L42-L58}
92
+ - **Categoria**: {Code Smell | Naming | Anti-IA | Segurança | Performance | Organização}
93
+ - **Descrição**: {O que está errado}
94
+ - **Sugestão**: {Como corrigir}
95
+ - **Esforço estimado**: {Baixo | Médio | Alto}
96
+ ```
@@ -0,0 +1,131 @@
1
+ # Checklist de Segurança para Code Review
2
+
3
+ Checklist simplificado baseado no OWASP Top 10, adaptado para revisão de código de features individuais.
4
+
5
+ ---
6
+
7
+ ## 1. Injeção (SQL, XSS, Command)
8
+
9
+ - [ ] **SQL Injection**: Queries usam parametrização/prepared statements (nunca concatenação de strings)
10
+ - [ ] **XSS**: Inputs de usuário são sanitizados antes de renderizar no DOM
11
+ - [ ] **Command Injection**: Inputs de usuário NUNCA são passados diretamente para execução de comandos do sistema
12
+ - [ ] **Template Injection**: Templates (Handlebars, EJS, Jinja) escapam variáveis por padrão
13
+
14
+ ### O que verificar
15
+ ```typescript
16
+ // ❌ SQL Injection
17
+ db.query(`SELECT * FROM users WHERE id = '${userId}'`);
18
+
19
+ // ✅ Parameterizado
20
+ db.query('SELECT * FROM users WHERE id = $1', [userId]);
21
+ ```
22
+
23
+ ```typescript
24
+ // ❌ XSS
25
+ element.innerHTML = userInput;
26
+
27
+ // ✅ Sanitizado
28
+ element.textContent = userInput;
29
+ ```
30
+
31
+ ---
32
+
33
+ ## 2. Autenticação
34
+
35
+ - [ ] Senhas são hasheadas com algoritmo forte (bcrypt, argon2, scrypt) — nunca MD5/SHA1
36
+ - [ ] Tokens JWT têm expiração definida
37
+ - [ ] Refresh tokens são armazenados de forma segura (httpOnly cookies, não localStorage)
38
+ - [ ] Tentativas de login são limitadas (rate limiting / account lockout)
39
+ - [ ] Logout invalida sessão/token no servidor
40
+
41
+ ---
42
+
43
+ ## 3. Autorização
44
+
45
+ - [ ] Cada endpoint verifica permissões do usuário autenticado
46
+ - [ ] Não há IDOR (Insecure Direct Object Reference) — usuário A não acessa dados do usuário B
47
+ - [ ] Roles/permissions são validadas no backend (nunca apenas no frontend)
48
+ - [ ] Endpoints admin são protegidos adequadamente
49
+
50
+ ### O que verificar
51
+ ```typescript
52
+ // ❌ IDOR — qualquer usuário autenticado acessa qualquer pedido
53
+ app.get('/api/orders/:id', async (req, res) => {
54
+ const order = await orderRepo.findById(req.params.id);
55
+ return res.json(order);
56
+ });
57
+
58
+ // ✅ Verificação de propriedade
59
+ app.get('/api/orders/:id', async (req, res) => {
60
+ const order = await orderRepo.findById(req.params.id);
61
+ if (order.userId !== req.user.id) return res.status(403).json({ error: 'Forbidden' });
62
+ return res.json(order);
63
+ });
64
+ ```
65
+
66
+ ---
67
+
68
+ ## 4. Exposição de Dados Sensíveis
69
+
70
+ - [ ] Senhas nunca aparecem em responses de API
71
+ - [ ] Dados sensíveis (CPF, cartão, tokens) não são logados
72
+ - [ ] .env e secrets não estão comitados no git (.gitignore configurado)
73
+ - [ ] Errors de produção não expõem stack traces ou detalhes internos ao cliente
74
+
75
+ ### O que verificar
76
+ ```typescript
77
+ // ❌ Expõe senha
78
+ return res.json(user);
79
+
80
+ // ✅ Omite campos sensíveis
81
+ const { password, ...safeUser } = user;
82
+ return res.json(safeUser);
83
+ ```
84
+
85
+ ---
86
+
87
+ ## 5. Configuração de Segurança
88
+
89
+ - [ ] CORS está configurado para permitir apenas origens necessárias (não `*` em produção)
90
+ - [ ] Headers de segurança configurados (CSP, X-Frame-Options, X-Content-Type-Options)
91
+ - [ ] HTTPS enforced em produção
92
+ - [ ] Secrets/tokens não estão hardcoded no código fonte
93
+
94
+ ### O que verificar
95
+ ```typescript
96
+ // ❌ CORS aberto
97
+ app.use(cors({ origin: '*' }));
98
+
99
+ // ✅ CORS restrito
100
+ app.use(cors({ origin: process.env.ALLOWED_ORIGINS?.split(',') }));
101
+ ```
102
+
103
+ ---
104
+
105
+ ## 6. Validação de Input
106
+
107
+ - [ ] Todos os inputs de formulário são validados no backend (não apenas no frontend)
108
+ - [ ] Uploads de arquivo validam tipo, tamanho e conteúdo
109
+ - [ ] Paginação tem limites máximos (não permite `limit=999999`)
110
+ - [ ] Campos numéricos validam range (não aceita negativos quando não deveria)
111
+
112
+ ---
113
+
114
+ ## Classificação de Issues de Segurança
115
+
116
+ | Issue | Severidade |
117
+ |:---|:---|
118
+ | SQL/XSS/Command Injection | 🔴 Crítica |
119
+ | IDOR (acesso a dados de outros usuários) | 🔴 Crítica |
120
+ | Senha em plaintext / hash fraco | 🔴 Crítica |
121
+ | Secrets hardcoded no código | 🔴 Crítica |
122
+ | Token sem expiração | 🔴 Crítica |
123
+ | CORS `*` em produção | 🟡 Média |
124
+ | Falta de rate limiting | 🟡 Média |
125
+ | Falta de headers de segurança | 🟡 Média |
126
+ | Stack trace em response de erro | 🟡 Média |
127
+ | Validação apenas no frontend | 🟡 Média |
128
+ | Falta de paginação com limite | 🟢 Baixa |
129
+
130
+ > [!IMPORTANT]
131
+ > **Toda issue de segurança classificada como Crítica DEVE ser corrigida imediatamente.** Nunca mover para backlog.
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: fullstack-development
3
+ description: "Desenvolvimento fullstack orientado pelo SDD com auto-review inline e clean code. ATIVE esta skill quando o usuário mencionar: desenvolver, implementar, codar, programar, criar o código, iniciar desenvolvimento, executar microtasks, começar a codar, build da feature. Também acione quando o agente completar a skill de Planejamento e o usuário confirmar a transição para o Desenvolvimento."
4
+ ---
5
+
6
+ # Skill de Desenvolvimento Fullstack
7
+
8
+ ## Identidade
9
+
10
+ Você é um **Desenvolvedor Fullstack Sênior** que escreve código limpo, seguindo estritamente o System Design Document e as boas práticas da stack utilizada.
11
+
12
+ ## Contexto do Pipeline
13
+
14
+ Esta é a **Skill 4 de 5** do pipeline Spec-Driven Development (SDD):
15
+
16
+ ```
17
+ 1. SRS ✅ → 2. SDD ✅ → 3. Planejamento ✅ → ► [4. Dev] → 5. CodeReview
18
+ ```
19
+
20
+ > [!IMPORTANT]
21
+ > O SRS, SDD e Planejamento DEVEM ter sido concluídos antes desta skill. Verifique que existem:
22
+ > - `.specs/features/{feature-name}/srs.md`
23
+ > - `.specs/features/{feature-name}/sdd.md`
24
+ > - `.specs/features/{feature-name}/manual-tests.md`
25
+ > - Task artifact com microtasks
26
+
27
+ ## Regras Obrigatórias
28
+
29
+ ### Clean Code
30
+ 1. **NUNCA escrever comentários óbvios** — o código deve ser autoexplicativo
31
+ 2. **SEMPRE usar nomes descritivos** — nunca `data`, `temp`, `handleClick`, `x`, `result`
32
+ 3. **NUNCA usar código boilerplate repetitivo** — abstrair em funções/componentes reutilizáveis
33
+ 4. **SEMPRE seguir naming conventions da stack** — camelCase, PascalCase, snake_case conforme convenção
34
+ 5. **NUNCA criar componentes monolíticos** — dividir em componentes granulares com responsabilidade única
35
+
36
+ ### Aderência ao SDD
37
+ 6. **SEMPRE seguir a arquitetura definida no SDD** — respeitar camadas, estrutura de pastas, padrões
38
+ 7. **SEMPRE seguir o modelo de dados do SDD** — campos, tipos, constraints exatamente como definido
39
+ 8. **SEMPRE seguir o design de API do SDD** — endpoints, request/response bodies, status codes
40
+ 9. **NUNCA inventar funcionalidade não especificada** — se não está no SRS/SDD, não implemente
41
+
42
+ ### Anti-Design de IA
43
+ 10. **NUNCA usar emojis** em textos de interface (botões, labels, headings, placeholders)
44
+ 11. **NUNCA usar CSS/Tailwind genérico** — seguir design tokens definidos no SDD
45
+ 12. **NUNCA usar textos placeholder genéricos** — 'Lorem ipsum', 'Click here', 'Submit' são proibidos
46
+ 13. **NUNCA criar UI com aparência "tutorial de YouTube"** — cards com sombras genéricas, gradientes sem propósito
47
+
48
+ ## Fluxo de Execução
49
+
50
+ ### Fase 1: Preparação
51
+
52
+ 1. **Ler o Task artifact** com as microtasks do Planejamento
53
+ 2. **Carregar os standards do projeto** — ler `.specs/standards/naming-conventions.md` e `.specs/standards/coding-standards.md` para ter as convenções na memória ativa
54
+ 3. **Se tem frontend na microtask** — ler também `.specs/standards/design-system.md`
55
+ 4. **Se tem API na microtask** — ler também `.specs/standards/api-conventions.md`
56
+ 5. Identificar a primeira microtask pendente (marcada `[ ]`)
57
+
58
+ ### Fase 2: Execução por Microtask
59
+
60
+ Para CADA microtask, seguir este ciclo:
61
+
62
+ #### 2a. Iniciar Microtask
63
+ 1. Marcar a microtask como `[/]` (em progresso) no Task artifact
64
+ 2. **Ler as referências (ponteiros)** da microtask:
65
+ - Abrir e ler a seção específica do SDD referenciada
66
+ - Abrir e ler a seção específica do SRS referenciada
67
+ - Abrir e ler o standard referenciado (se houver ponteiro `📎 Ref Standards`)
68
+ 3. Anunciar: "Iniciando microtask {Fase.Número}: {título}"
69
+
70
+ #### 2b. Implementar
71
+ 1. Criar/modificar os arquivos listados na microtask
72
+ 2. Seguir estritamente o SDD, os **standards do projeto** e as regras de Clean Code
73
+ 3. Garantir que o código é funcional e completo para esta microtask
74
+
75
+ #### 2c. Auto-Review Inline
76
+ Após implementar, verificar usando o checklist em `references/self-review-checklist.md`:
77
+
78
+ 1. **Aderência ao SDD** — o código reflete exatamente o que o SDD especifica?
79
+ 2. **Clean code** — nomes descritivos? Sem comentários óbvios? Sem repetição?
80
+ 3. **Naming conventions** — consistente com a stack?
81
+ 4. **Anti-IA patterns** — sem emojis, sem CSS genérico, sem placeholders?
82
+
83
+ Se encontrar problemas, corrija ANTES de marcar como concluída.
84
+
85
+ #### 2d. Concluir Microtask
86
+ 1. Marcar a microtask como `[x]` (concluída) no Task artifact
87
+ 2. Prosseguir para a próxima microtask pendente
88
+
89
+ ### Fase 3: Transição
90
+
91
+ Após todas as microtasks estarem `[x]`:
92
+
93
+ 1. Anunciar: "✅ Desenvolvimento concluído. Todas as {N} microtasks foram implementadas. Próxima etapa: **Code Review**. Deseja prosseguir?"
94
+ 2. **AGUARDAR** confirmação explícita antes de ativar a próxima skill
95
+
96
+ ## Estratégia de Memória (Leitura Sob Demanda)
97
+
98
+ > [!IMPORTANT]
99
+ > **NUNCA tente ler o SRS e SDD inteiros de uma vez.** Isso polui o contexto e desperdiça tokens.
100
+
101
+ A estratégia correta é:
102
+ 1. Cada microtask tem **ponteiros** para seções específicas (ex: `SDD#3.1 L45-L78`)
103
+ 2. Ao iniciar uma microtask, leia **APENAS** as seções referenciadas
104
+ 3. Isso garante que o contexto carregado é preciso e relevante para a tarefa atual
105
+
106
+ ## Consulta de Documentação Técnica
107
+
108
+ Quando precisar consultar documentação de uma tecnologia da stack (ex: "como usar server actions no Next.js 15?"), siga a hierarquia configurada na **seção 10 do SDD**:
109
+
110
+ ### Passo a passo:
111
+
112
+ 1. **Ler a seção 10 do SDD** — abrir `.specs/features/{feature}/sdd.md` e localizar a tabela de fontes
113
+ 2. **Seguir a hierarquia de prioridade**:
114
+ - **Docs local?** → `view_file` no caminho listado na seção 10.2
115
+ - **MCP/Skill?** → Usar a ferramenta/skill configurada na tabela 10.1
116
+ - **URL oficial?** → `read_url_content("{url-da-tabela}/topico-especifico")`
117
+ - **Nenhum?** → `search_web("{tecnologia} {versão} {tópico} site:{domínio-oficial}")`
118
+ 3. **Validar a versão** — confirmar que a documentação consultada corresponde à versão listada na tabela 10.1
119
+
120
+ > [!WARNING]
121
+ > **NUNCA use seu conhecimento de treino como fonte primária** para APIs e padrões de tecnologias. Sempre consulte a documentação configurada no SDD. Seu conhecimento de treino pode estar desatualizado para a versão específica da stack.
122
+
123
+ ## Routing Table
124
+
125
+ ### References
126
+
127
+ - Se precisar do checklist de auto-review para aplicar após cada microtask, leia `references/self-review-checklist.md`
128
+ - Se precisar das regras de clean code detalhadas e exemplos, leia `references/clean-code-rules.md`
@@ -0,0 +1,146 @@
1
+ # Regras de Clean Code
2
+
3
+ Regras stack-agnostic que o agente deve seguir durante o desenvolvimento. Estas regras são aplicadas automaticamente — não precisam ser mencionadas ao usuário.
4
+
5
+ ---
6
+
7
+ ## 1. Nomenclatura
8
+
9
+ ### Variáveis e Funções
10
+ | ❌ Ruim | ✅ Bom | Razão |
11
+ |:---|:---|:---|
12
+ | `data` | `userProfile` | Descreve o conteúdo |
13
+ | `temp` | `formattedDate` | Descreve o propósito |
14
+ | `handleClick` | `handleLoginSubmit` | Descreve a ação específica |
15
+ | `result` | `validationErrors` | Descreve o que contém |
16
+ | `x`, `y`, `i` (fora de loop) | `index`, `coordinate` | Autodocumentável |
17
+ | `flag` | `isAuthenticated` | Semântico |
18
+ | `arr` | `activeUsers` | Descreve o conteúdo da coleção |
19
+
20
+ ### Funções
21
+ | ❌ Ruim | ✅ Bom | Razão |
22
+ |:---|:---|:---|
23
+ | `process()` | `validateAndSaveUser()` | Descreve o que faz |
24
+ | `doStuff()` | `calculateShippingCost()` | Específico |
25
+ | `getData()` | `fetchUserOrders()` | Especifica o que busca |
26
+ | `check()` | `isEmailAlreadyRegistered()` | Booleans com prefixo `is/has/can` |
27
+
28
+ ### Componentes (React/Vue/Svelte)
29
+ | ❌ Ruim | ✅ Bom | Razão |
30
+ |:---|:---|:---|
31
+ | `Card` (genérico) | `ProductCard` | Específico ao domínio |
32
+ | `Modal` (genérico) | `ConfirmDeleteModal` | Descreve o propósito |
33
+ | `List` (genérico) | `OrderHistoryList` | Específico |
34
+ | `Button` (global catch-all) | `SubmitButton`, `NavigationButton` | Variantes explícitas |
35
+
36
+ ---
37
+
38
+ ## 2. Comentários
39
+
40
+ ### Comentários Proibidos (❌)
41
+ ```typescript
42
+ // Incrementa o contador
43
+ counter++;
44
+
45
+ // Retorna o usuário
46
+ return user;
47
+
48
+ // Define o estado como true
49
+ setIsLoading(true);
50
+
51
+ // Cria uma nova instância
52
+ const service = new UserService();
53
+ ```
54
+
55
+ ### Comentários Aceitáveis (✅)
56
+ ```typescript
57
+ // Regex RFC 5322 simplificada para validação de email corporativo
58
+ const EMAIL_PATTERN = /^[a-zA-Z0-9._%+-]+@empresa\.com$/;
59
+
60
+ // Delay de 300ms para debounce de busca — evita flood de requests
61
+ // durante digitação rápida no campo de pesquisa
62
+ const SEARCH_DEBOUNCE_MS = 300;
63
+
64
+ // TODO(#123): Migrar para a v2 da API quando disponível em produção
65
+ const API_BASE = '/api/v1';
66
+ ```
67
+
68
+ ### Regra Geral
69
+ > Comente o **porquê**, nunca o **o quê**. Se o código precisa de comentário para explicar o que faz, renomeie variáveis e funções até ficar óbvio.
70
+
71
+ ---
72
+
73
+ ## 3. Abstração e Reutilização
74
+
75
+ ### Código Repetitivo (❌)
76
+ ```typescript
77
+ // Repetido em 5 componentes
78
+ const response = await fetch('/api/users', {
79
+ headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }
80
+ });
81
+ if (!response.ok) throw new Error('Failed to fetch');
82
+ const data = await response.json();
83
+ ```
84
+
85
+ ### Com Abstração (✅)
86
+ ```typescript
87
+ // Usado em 5+ componentes — fetch centralizado
88
+ const users = await apiClient.get<User[]>('/users');
89
+ ```
90
+
91
+ ### Regra: Extrair quando repetir ≥ 2 vezes
92
+ Se um padrão de código aparece 2 ou mais vezes, deve ser extraído para:
93
+ - Uma função utilitária
94
+ - Um componente reutilizável
95
+ - Um hook customizado (React)
96
+ - Um serviço/module
97
+
98
+ ---
99
+
100
+ ## 4. Estrutura de Arquivos
101
+
102
+ ### Arquivo Monolítico (❌)
103
+ ```
104
+ src/components/Dashboard.tsx ← 500+ linhas com tudo junto
105
+ ```
106
+
107
+ ### Arquivos Granulares (✅)
108
+ ```
109
+ src/components/dashboard/
110
+ ├── Dashboard.tsx ← Composição dos sub-componentes
111
+ ├── DashboardHeader.tsx ← Header isolado
112
+ ├── DashboardMetrics.tsx ← Cards de métricas
113
+ ├── DashboardRecentOrders.tsx ← Lista de pedidos recentes
114
+ └── useDashboardData.ts ← Hook de dados
115
+ ```
116
+
117
+ ### Regra: 1 componente por arquivo, máximo ~150 linhas significativas
118
+
119
+ ---
120
+
121
+ ## 5. Tratamento de Erros
122
+
123
+ ### Genérico (❌)
124
+ ```typescript
125
+ try {
126
+ await saveUser(data);
127
+ } catch (e) {
128
+ console.log(e); // Ignora silenciosamente
129
+ }
130
+ ```
131
+
132
+ ### Específico (✅)
133
+ ```typescript
134
+ try {
135
+ await saveUser(data);
136
+ } catch (error) {
137
+ if (error instanceof ValidationError) {
138
+ showFieldErrors(error.fields);
139
+ } else if (error instanceof NetworkError) {
140
+ showRetryNotification('Falha na conexão. Tente novamente.');
141
+ } else {
142
+ logger.error('Unexpected error saving user', { error, userId: data.id });
143
+ showGenericError();
144
+ }
145
+ }
146
+ ```