@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.
- package/CHANGELOG.md +27 -0
- package/LICENSE +21 -0
- package/README.md +260 -0
- package/bin/cli.js +430 -0
- package/package.json +49 -0
- package/sddk/plugin.json +12 -0
- package/sddk/skills/code-review/SKILL.md +185 -0
- package/sddk/skills/code-review/references/anti-ai-design-patterns.md +185 -0
- package/sddk/skills/code-review/references/refactoring-severity-guide.md +96 -0
- package/sddk/skills/code-review/references/security-checklist.md +131 -0
- package/sddk/skills/fullstack-development/SKILL.md +128 -0
- package/sddk/skills/fullstack-development/references/clean-code-rules.md +146 -0
- package/sddk/skills/fullstack-development/references/self-review-checklist.md +64 -0
- package/sddk/skills/implementation-planning/SKILL.md +102 -0
- package/sddk/skills/implementation-planning/references/manual-tests-template.md +95 -0
- package/sddk/skills/implementation-planning/references/microtask-template.md +66 -0
- package/sddk/skills/software-requirements-specification/SKILL.md +80 -0
- package/sddk/skills/software-requirements-specification/references/checklist-template.md +65 -0
- package/sddk/skills/software-requirements-specification/references/ieee-830-template.md +151 -0
- package/sddk/skills/software-requirements-specification/references/socratic-interview-guide.md +96 -0
- package/sddk/skills/system-design-document/SKILL.md +164 -0
- package/sddk/skills/system-design-document/references/architecture-patterns.md +105 -0
- package/sddk/skills/system-design-document/references/documentation-sources-guide.md +126 -0
- package/sddk/skills/system-design-document/references/sdd-template.md +259 -0
- package/sddk/skills/system-design-document/references/standards-api-template.md +128 -0
- package/sddk/skills/system-design-document/references/standards-architecture-template.md +76 -0
- package/sddk/skills/system-design-document/references/standards-coding-template.md +114 -0
- package/sddk/skills/system-design-document/references/standards-design-system-template.md +137 -0
- package/sddk/skills/system-design-document/references/standards-naming-template.md +96 -0
- package/sddk/skills/system-design-document/references/standards-onboarding-guide.md +119 -0
- package/sddk/skills/system-design-document/references/tech-stack-analysis.md +84 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Template: Convenções de Nomenclatura do Projeto
|
|
2
|
+
|
|
3
|
+
Use este template para gerar `.specs/standards/naming-conventions.md`. Preencha com as respostas do onboarding.
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
# Convenções de Nomenclatura
|
|
7
|
+
|
|
8
|
+
**Projeto**: {nome do projeto}
|
|
9
|
+
**Última atualização**: {data}
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. Banco de Dados
|
|
14
|
+
|
|
15
|
+
| Elemento | Convenção | Exemplo | Anti-exemplo |
|
|
16
|
+
|:---|:---|:---|:---|
|
|
17
|
+
| Tabelas | {ex: snake_case, plural} | {ex: `auth_users`} | {ex: `User`, `authUser`} |
|
|
18
|
+
| Colunas | {ex: snake_case, singular} | {ex: `first_name`} | {ex: `firstName`, `FirstName`} |
|
|
19
|
+
| Primary Keys | {ex: `id` (UUID v4)} | {ex: `id`} | {ex: `user_id`, `ID`} |
|
|
20
|
+
| Foreign Keys | {ex: `{tabela_singular}_id`} | {ex: `user_id`} | {ex: `fk_user`, `userId`} |
|
|
21
|
+
| Índices | {ex: `idx_{tabela}_{colunas}`} | {ex: `idx_users_email`} | {ex: `index1`} |
|
|
22
|
+
| Enums (valores) | {ex: UPPER_SNAKE_CASE} | {ex: `PENDING_PAYMENT`} | {ex: `pendingPayment`} |
|
|
23
|
+
| Timestamps | {ex: `created_at`, `updated_at`} | — | {ex: `createdAt`, `date_created`} |
|
|
24
|
+
| Soft delete | {ex: `deleted_at` nullable} | — | {ex: `is_deleted`} |
|
|
25
|
+
| Booleanos | {ex: `is_` prefix} | {ex: `is_active`} | {ex: `active`, `status`} |
|
|
26
|
+
|
|
27
|
+
### Prefixos de Módulo (se aplicável)
|
|
28
|
+
| Módulo | Prefixo | Exemplo |
|
|
29
|
+
|:---|:---|:---|
|
|
30
|
+
| {ex: Autenticação} | {ex: `auth_`} | {ex: `auth_users`, `auth_sessions`} |
|
|
31
|
+
| {ex: Pagamentos} | {ex: `pay_`} | {ex: `pay_transactions`} |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 2. Código ({linguagem})
|
|
36
|
+
|
|
37
|
+
### Variáveis
|
|
38
|
+
|
|
39
|
+
| Tipo | Convenção | Exemplo | Anti-exemplo |
|
|
40
|
+
|:---|:---|:---|:---|
|
|
41
|
+
| Variáveis locais | {ex: camelCase} | {ex: `userName`} | {ex: `user_name`, `UserName`} |
|
|
42
|
+
| Constantes | {ex: UPPER_SNAKE_CASE} | {ex: `MAX_RETRIES`} | {ex: `maxRetries`} |
|
|
43
|
+
| Booleanos | {ex: prefixo is/has/can/should} | {ex: `isAuthenticated`} | {ex: `authenticated`, `auth`} |
|
|
44
|
+
| Arrays/Coleções | {ex: plural} | {ex: `activeUsers`} | {ex: `userList`, `data`} |
|
|
45
|
+
|
|
46
|
+
### Funções
|
|
47
|
+
|
|
48
|
+
| Tipo | Convenção | Exemplo | Anti-exemplo |
|
|
49
|
+
|:---|:---|:---|:---|
|
|
50
|
+
| Funções gerais | {ex: verbo + substantivo, camelCase} | {ex: `calculateTotal`} | {ex: `calc`, `doStuff`} |
|
|
51
|
+
| Handlers | {ex: handle + evento específico} | {ex: `handleLoginSubmit`} | {ex: `handleClick`} |
|
|
52
|
+
| Getters | {ex: get + o quê} | {ex: `getUserOrders`} | {ex: `getData`} |
|
|
53
|
+
| Validadores | {ex: is/validate + o quê} | {ex: `isValidEmail`} | {ex: `check`} |
|
|
54
|
+
| Transformadores | {ex: formato + To + formato} | {ex: `dtoToEntity`} | {ex: `convert`} |
|
|
55
|
+
|
|
56
|
+
### Classes e Types
|
|
57
|
+
|
|
58
|
+
| Tipo | Convenção | Exemplo | Anti-exemplo |
|
|
59
|
+
|:---|:---|:---|:---|
|
|
60
|
+
| Classes | {ex: PascalCase, substantivo} | {ex: `UserService`} | {ex: `userService`} |
|
|
61
|
+
| Interfaces | {ex: PascalCase, sem prefixo I} | {ex: `UserProfile`} | {ex: `IUserProfile`} |
|
|
62
|
+
| Types | {ex: PascalCase} | {ex: `OrderStatus`} | {ex: `TOrderStatus`} |
|
|
63
|
+
| Enums | {ex: PascalCase singular} | {ex: `PaymentMethod`} | {ex: `PaymentMethods`} |
|
|
64
|
+
|
|
65
|
+
### Componentes (Frontend)
|
|
66
|
+
|
|
67
|
+
| Tipo | Convenção | Exemplo | Anti-exemplo |
|
|
68
|
+
|:---|:---|:---|:---|
|
|
69
|
+
| Componentes | {ex: PascalCase, específico} | {ex: `ProductCard`} | {ex: `Card`} |
|
|
70
|
+
| Hooks | {ex: use + contexto} | {ex: `useOrderData`} | {ex: `useData`} |
|
|
71
|
+
| Context | {ex: PascalCase + Context} | {ex: `AuthContext`} | {ex: `ctx`} |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 3. Arquivos e Diretórios
|
|
76
|
+
|
|
77
|
+
| Tipo | Convenção | Exemplo |
|
|
78
|
+
|:---|:---|:---|
|
|
79
|
+
| Componentes | {ex: PascalCase.tsx} | {ex: `ProductCard.tsx`} |
|
|
80
|
+
| Hooks | {ex: camelCase.ts} | {ex: `useAuth.ts`} |
|
|
81
|
+
| Utils | {ex: camelCase.ts} | {ex: `formatCurrency.ts`} |
|
|
82
|
+
| Types | {ex: camelCase.ts} | {ex: `userTypes.ts`} |
|
|
83
|
+
| Services | {ex: camelCase.service.ts} | {ex: `auth.service.ts`} |
|
|
84
|
+
| Repositories | {ex: camelCase.repository.ts} | {ex: `user.repository.ts`} |
|
|
85
|
+
| Migrations | {ex: NNN_descricao.sql} | {ex: `001_create_users.sql`} |
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 4. Git
|
|
90
|
+
|
|
91
|
+
| Tipo | Convenção | Exemplo |
|
|
92
|
+
|:---|:---|:---|
|
|
93
|
+
| Branches | {ex: tipo/descricao-curta} | {ex: `feat/user-auth`, `fix/login-redirect`} |
|
|
94
|
+
| Commits | {ex: Conventional Commits} | {ex: `feat(auth): add login endpoint`} |
|
|
95
|
+
| Tags | {ex: semver} | {ex: `v1.2.3`} |
|
|
96
|
+
```
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Guia de Onboarding de Padrões do Projeto
|
|
2
|
+
|
|
3
|
+
## Propósito
|
|
4
|
+
|
|
5
|
+
Este guia instrui o agente a conduzir uma entrevista de onboarding para definir os padrões do projeto. Os padrões são salvos em `.specs/standards/` e funcionam como **memória estática persistente** — consultados por TODAS as features do projeto.
|
|
6
|
+
|
|
7
|
+
## Quando Executar
|
|
8
|
+
|
|
9
|
+
O onboarding é acionado pela **Skill SDD (Skill 2)** nos seguintes cenários:
|
|
10
|
+
|
|
11
|
+
| Cenário | Ação |
|
|
12
|
+
|:---|:---|
|
|
13
|
+
| `.specs/standards/` **não existe** | Conduzir onboarding completo |
|
|
14
|
+
| `.specs/standards/` **existe mas incompleto** | Perguntar se quer completar |
|
|
15
|
+
| `.specs/standards/` **existe e completo** | Ler e respeitar, propor adições se necessário |
|
|
16
|
+
|
|
17
|
+
## Estrutura de Standards
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
.specs/
|
|
21
|
+
└── standards/
|
|
22
|
+
├── architecture.md ← Padrões arquiteturais (DDD, CQRS, BFF, etc.)
|
|
23
|
+
├── naming-conventions.md ← Nomenclatura (funções, tabelas, variáveis)
|
|
24
|
+
├── design-system.md ← Tokens, paleta, tipografia, componentes
|
|
25
|
+
├── api-conventions.md ← Padrões de API (REST, GraphQL, error format)
|
|
26
|
+
└── coding-standards.md ← Boas práticas e princípios (SSOT, DRY, etc.)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Fluxo do Onboarding
|
|
30
|
+
|
|
31
|
+
### Passo 1: Verificação
|
|
32
|
+
|
|
33
|
+
Verificar se `.specs/standards/` existe no projeto:
|
|
34
|
+
- Se NÃO existe → prosseguir para Passo 2
|
|
35
|
+
- Se existe → ler todos os arquivos e prosseguir diretamente para a entrevista técnica do SDD
|
|
36
|
+
|
|
37
|
+
### Passo 2: Anúncio
|
|
38
|
+
|
|
39
|
+
Anunciar ao usuário:
|
|
40
|
+
> "Este projeto ainda não tem padrões definidos em `.specs/standards/`. Vou conduzir uma entrevista rápida para definir os padrões do projeto. Esses padrões serão usados como referência em TODAS as features futuras."
|
|
41
|
+
|
|
42
|
+
### Passo 3: Entrevista por Categoria
|
|
43
|
+
|
|
44
|
+
Para cada categoria, conduzir uma mini-entrevista via `ask_question`:
|
|
45
|
+
|
|
46
|
+
#### 3.1 Arquitetura
|
|
47
|
+
Perguntas a fazer:
|
|
48
|
+
1. "Qual padrão arquitetural o projeto segue?" (opções: MVC, Clean Architecture, DDD, Hexagonal, Feature-Based, ou descrever)
|
|
49
|
+
2. "Usa algum padrão avançado?" (opções: Event Sourcing, CQRS, BFF, Microserviços, Monolito, ou descrever)
|
|
50
|
+
3. "Qual a estrutura de camadas/módulos?"
|
|
51
|
+
4. "Há regras de dependência entre camadas?" (ex: Domain nunca importa Infrastructure)
|
|
52
|
+
|
|
53
|
+
Gerar: `.specs/standards/architecture.md` usando template `references/standards-architecture-template.md`
|
|
54
|
+
|
|
55
|
+
#### 3.2 Nomenclatura
|
|
56
|
+
Perguntas a fazer:
|
|
57
|
+
1. "Convenção para tabelas de banco?" (snake_case plural, PascalCase singular, etc.)
|
|
58
|
+
2. "Convenção para colunas?" (snake_case, camelCase)
|
|
59
|
+
3. "Convenção para chaves estrangeiras?" ({tabela}_id, fk_{tabela}, etc.)
|
|
60
|
+
4. "Convenção para variáveis/funções JS/TS?" (camelCase, verbo+substantivo para funções)
|
|
61
|
+
5. "Convenção para componentes React/Vue?" (PascalCase, kebab-case)
|
|
62
|
+
6. "Convenção para arquivos?" (PascalCase para componentes, camelCase para utils, etc.)
|
|
63
|
+
|
|
64
|
+
Gerar: `.specs/standards/naming-conventions.md` usando template `references/standards-naming-template.md`
|
|
65
|
+
|
|
66
|
+
#### 3.3 Design System (se o projeto tem frontend)
|
|
67
|
+
Perguntas a fazer:
|
|
68
|
+
1. "O projeto tem design system definido?" (se sim, quais tokens)
|
|
69
|
+
2. "Paleta de cores?" (primária, secundária, surface, error, etc.)
|
|
70
|
+
3. "Tipografia?" (fonte principal, headings, sizes)
|
|
71
|
+
4. "Espaçamentos?" (escala de spacing)
|
|
72
|
+
5. "Border radius e shadows?" (tokens de forma)
|
|
73
|
+
6. "Componentes base?" (Card, Button, Input — quais tokens usam)
|
|
74
|
+
|
|
75
|
+
Gerar: `.specs/standards/design-system.md` usando template `references/standards-design-system-template.md`
|
|
76
|
+
|
|
77
|
+
Se não tem frontend, marcar como "N/A — projeto backend-only".
|
|
78
|
+
|
|
79
|
+
#### 3.4 Convenções de API (se tem API)
|
|
80
|
+
Perguntas a fazer:
|
|
81
|
+
1. "Padrão de API?" (REST, GraphQL, tRPC, gRPC)
|
|
82
|
+
2. "Formato de response?" (envelope `{data, error, meta}`, flat, etc.)
|
|
83
|
+
3. "Versionamento de API?" (/v1/, header, query param)
|
|
84
|
+
4. "Padrão de erro?" (HTTP status + body padronizado)
|
|
85
|
+
5. "Paginação?" (cursor, offset, keyset)
|
|
86
|
+
6. "Autenticação em API?" (Bearer token, cookie, API key)
|
|
87
|
+
|
|
88
|
+
Gerar: `.specs/standards/api-conventions.md` usando template `references/standards-api-template.md`
|
|
89
|
+
|
|
90
|
+
#### 3.5 Boas Práticas e Princípios
|
|
91
|
+
Perguntas a fazer:
|
|
92
|
+
1. "Quais princípios o projeto adota?" (SSOT, DRY, KISS, YAGNI, SOLID — selecionar os relevantes)
|
|
93
|
+
2. "Há regras de abstração?" (quando extrair função, componente, hook)
|
|
94
|
+
3. "Tratamento de erros?" (custom exceptions, error boundary, etc.)
|
|
95
|
+
4. "Logging?" (structured logging, níveis, o que logar)
|
|
96
|
+
5. "Testes?" (estratégia, cobertura mínima, tipos de teste)
|
|
97
|
+
|
|
98
|
+
Gerar: `.specs/standards/coding-standards.md` usando template `references/standards-coding-template.md`
|
|
99
|
+
|
|
100
|
+
### Passo 4: Apresentação
|
|
101
|
+
|
|
102
|
+
1. Apresentar resumo de todos os padrões definidos
|
|
103
|
+
2. Perguntar: "Os padrões estão corretos? Deseja ajustar algo?"
|
|
104
|
+
3. Salvar todos os arquivos em `.specs/standards/`
|
|
105
|
+
|
|
106
|
+
### Passo 5: Continuar para SDD
|
|
107
|
+
|
|
108
|
+
Após o onboarding, prosseguir normalmente com a Fase 1 do SDD (Análise do Contexto).
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Evolução Incremental
|
|
113
|
+
|
|
114
|
+
Durante SDDs de features futuras, o agente pode propor adições aos standards:
|
|
115
|
+
|
|
116
|
+
1. Se uma decisão técnica nova não está coberta pelos standards existentes
|
|
117
|
+
2. Perguntar: "Essa decisão deve virar um padrão do projeto para futuras features?"
|
|
118
|
+
3. Se sim, atualizar o arquivo de standards relevante
|
|
119
|
+
4. Se não, documentar apenas no SDD da feature
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Guia de Análise e Sugestão de Stack Tecnológica
|
|
2
|
+
|
|
3
|
+
## Como Detectar a Stack Existente
|
|
4
|
+
|
|
5
|
+
Antes de sugerir qualquer tecnologia, analise o projeto existente do usuário:
|
|
6
|
+
|
|
7
|
+
### Arquivos Indicadores
|
|
8
|
+
|
|
9
|
+
| Arquivo | Indica |
|
|
10
|
+
|:---|:---|
|
|
11
|
+
| `package.json` | Node.js / JavaScript / TypeScript |
|
|
12
|
+
| `tsconfig.json` | TypeScript |
|
|
13
|
+
| `requirements.txt` / `pyproject.toml` | Python |
|
|
14
|
+
| `Cargo.toml` | Rust |
|
|
15
|
+
| `go.mod` | Go |
|
|
16
|
+
| `pom.xml` / `build.gradle` | Java/Kotlin |
|
|
17
|
+
| `Gemfile` | Ruby |
|
|
18
|
+
| `composer.json` | PHP |
|
|
19
|
+
|
|
20
|
+
### Dentro do `package.json` — Detectar Framework
|
|
21
|
+
|
|
22
|
+
| Dependência | Framework |
|
|
23
|
+
|:---|:---|
|
|
24
|
+
| `next` | Next.js |
|
|
25
|
+
| `nuxt` | Nuxt.js |
|
|
26
|
+
| `react` (sem next) | React SPA (provavelmente Vite) |
|
|
27
|
+
| `vue` (sem nuxt) | Vue.js SPA |
|
|
28
|
+
| `@angular/core` | Angular |
|
|
29
|
+
| `express` | Express.js |
|
|
30
|
+
| `@nestjs/core` | NestJS |
|
|
31
|
+
| `fastify` | Fastify |
|
|
32
|
+
|
|
33
|
+
### Dentro do `requirements.txt` / `pyproject.toml` — Detectar Framework Python
|
|
34
|
+
|
|
35
|
+
| Dependência | Framework |
|
|
36
|
+
|:---|:---|
|
|
37
|
+
| `django` | Django |
|
|
38
|
+
| `fastapi` | FastAPI |
|
|
39
|
+
| `flask` | Flask |
|
|
40
|
+
| `sqlalchemy` | ORM SQLAlchemy |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Como Sugerir Stack (Quando Não Há Projeto)
|
|
45
|
+
|
|
46
|
+
Se o usuário está começando do zero, use estas perguntas para guiar a sugestão:
|
|
47
|
+
|
|
48
|
+
### Pergunta 1: Tipo de Aplicação
|
|
49
|
+
|
|
50
|
+
| Tipo | Stack Sugerida |
|
|
51
|
+
|:---|:---|
|
|
52
|
+
| **Web fullstack (SSR)** | Next.js + TypeScript + Prisma + PostgreSQL |
|
|
53
|
+
| **Web SPA + API separada** | Vite + React + TypeScript (front) + NestJS ou FastAPI (back) |
|
|
54
|
+
| **API/Backend only** | NestJS (TS) ou FastAPI (Python) |
|
|
55
|
+
| **Mobile** | React Native + Expo ou Flutter |
|
|
56
|
+
| **CLI tool** | Node.js + Commander ou Python + Click |
|
|
57
|
+
|
|
58
|
+
### Pergunta 2: Prioridades do Projeto
|
|
59
|
+
|
|
60
|
+
| Prioridade | Influência na Stack |
|
|
61
|
+
|:---|:---|
|
|
62
|
+
| **Performance** | Considerar Rust, Go, ou otimizações específicas |
|
|
63
|
+
| **Velocidade de desenvolvimento** | Frameworks com mais abstrações (Next.js, Django) |
|
|
64
|
+
| **Escalabilidade** | Microserviços, filas, cache distribuído |
|
|
65
|
+
| **Simplicidade** | Monolito, ORM, framework full-featured |
|
|
66
|
+
|
|
67
|
+
### Pergunta 3: Equipe
|
|
68
|
+
|
|
69
|
+
| Contexto | Influência |
|
|
70
|
+
|:---|:---|
|
|
71
|
+
| Dev solo | Menos abstrações, full-stack frameworks |
|
|
72
|
+
| Equipe pequena (2-5) | Monorepo, TypeScript end-to-end |
|
|
73
|
+
| Equipe grande (5+) | Módulos bem definidos, CI/CD robusto |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Regras para Sugestão
|
|
78
|
+
|
|
79
|
+
1. **NUNCA sugira uma stack sem justificativa** — sempre explique o "porquê"
|
|
80
|
+
2. **Considere a experiência do usuário** — não sugira Rust se o usuário é iniciante
|
|
81
|
+
3. **Apresente no máximo 3 opções** — excesso de escolha paralisa
|
|
82
|
+
4. **Inclua prós e contras** de cada opção
|
|
83
|
+
5. **Use `ask_question`** para que o usuário escolha formalmente
|
|
84
|
+
6. **Registre a decisão** com justificativa no SDD
|