@daniel-da-silva-alves/sddk 2.0.0 → 2.1.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 (30) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +21 -4
  3. package/bin/cli.js +4 -4
  4. package/package.json +7 -2
  5. package/sddk/plugin.json +1 -1
  6. package/sddk/skills/code-review/SKILL.md +142 -141
  7. package/sddk/skills/code-review/references/anti-ai-design-patterns.md +90 -90
  8. package/sddk/skills/code-review/references/refactoring-severity-guide.md +60 -60
  9. package/sddk/skills/code-review/references/security-checklist.md +59 -59
  10. package/sddk/skills/fullstack-development/SKILL.md +79 -78
  11. package/sddk/skills/fullstack-development/references/clean-code-rules.md +65 -65
  12. package/sddk/skills/fullstack-development/references/self-review-checklist.md +42 -42
  13. package/sddk/skills/implementation-planning/SKILL.md +65 -64
  14. package/sddk/skills/implementation-planning/references/manual-tests-template.md +53 -53
  15. package/sddk/skills/implementation-planning/references/microtask-template.md +47 -47
  16. package/sddk/skills/software-requirements-specification/SKILL.md +46 -45
  17. package/sddk/skills/software-requirements-specification/references/checklist-template.md +48 -48
  18. package/sddk/skills/software-requirements-specification/references/ieee-830-template.md +94 -94
  19. package/sddk/skills/software-requirements-specification/references/socratic-interview-guide.md +65 -65
  20. package/sddk/skills/system-design-document/SKILL.md +108 -107
  21. package/sddk/skills/system-design-document/references/architecture-patterns.md +59 -59
  22. package/sddk/skills/system-design-document/references/documentation-sources-guide.md +69 -69
  23. package/sddk/skills/system-design-document/references/sdd-template.md +117 -117
  24. package/sddk/skills/system-design-document/references/standards-api-template.md +47 -47
  25. package/sddk/skills/system-design-document/references/standards-architecture-template.md +42 -42
  26. package/sddk/skills/system-design-document/references/standards-coding-template.md +64 -64
  27. package/sddk/skills/system-design-document/references/standards-design-system-template.md +81 -81
  28. package/sddk/skills/system-design-document/references/standards-naming-template.md +59 -59
  29. package/sddk/skills/system-design-document/references/standards-onboarding-guide.md +80 -80
  30. package/sddk/skills/system-design-document/references/tech-stack-analysis.md +37 -37
@@ -1,26 +1,26 @@
1
- # Template: Convenções de API do Projeto
1
+ # Template: Project API Conventions
2
2
 
3
- Use este template para gerar `.specs/standards/api-conventions.md`. Preencha com as respostas do onboarding. Se o projeto não tem API, criar com "N/A — projeto sem API".
3
+ Use this template to generate `.specs/standards/api-conventions.md`. Fill in with the onboarding interview answers. If the project has no API, create with "N/A — project without API".
4
4
 
5
5
  ```markdown
6
- # Convenções de API
6
+ # API Conventions
7
7
 
8
- **Projeto**: {nome do projeto}
9
- **Última atualização**: {data}
8
+ **Project**: {project name}
9
+ **Last updated**: {date}
10
10
 
11
11
  ---
12
12
 
13
- ## 1. Padrão de API
13
+ ## 1. API Pattern
14
14
 
15
- **Tipo**: {REST | GraphQL | tRPC | gRPC}
16
- **Versionamento**: {ex: URL path /api/v1/, header, nenhum}
17
- **Base URL**: {ex: /api/v1}
15
+ **Type**: {REST | GraphQL | tRPC | gRPC}
16
+ **Versioning**: {e.g.: URL path /api/v1/, header, none}
17
+ **Base URL**: {e.g.: /api/v1}
18
18
 
19
19
  ---
20
20
 
21
- ## 2. Formato de Response
21
+ ## 2. Response Format
22
22
 
23
- ### Response de Sucesso
23
+ ### Success Response
24
24
  ```json
25
25
  {
26
26
  "data": { ... },
@@ -32,12 +32,12 @@ Use este template para gerar `.specs/standards/api-conventions.md`. Preencha com
32
32
  }
33
33
  ```
34
34
 
35
- ### Response de Erro
35
+ ### Error Response
36
36
  ```json
37
37
  {
38
38
  "error": {
39
39
  "code": "{ERROR_CODE}",
40
- "message": "{mensagem legível}",
40
+ "message": "{human-readable message}",
41
41
  "details": [ ... ]
42
42
  }
43
43
  }
@@ -45,44 +45,44 @@ Use este template para gerar `.specs/standards/api-conventions.md`. Preencha com
45
45
 
46
46
  ### HTTP Status Codes
47
47
 
48
- | Status | Quando usar |
48
+ | Status | When to use |
49
49
  |:---|:---|
50
- | 200 | Sucesso (GET, PUT, PATCH) |
51
- | 201 | Recurso criado (POST) |
52
- | 204 | Sucesso sem body (DELETE) |
53
- | 400 | Validação / input inválido |
54
- | 401 | Não autenticado |
55
- | 403 | Não autorizado (sem permissão) |
56
- | 404 | Recurso não encontrado |
57
- | 409 | Conflito (ex: email existe) |
58
- | 422 | Entidade não processável |
59
- | 429 | Rate limit excedido |
60
- | 500 | Erro interno do servidor |
50
+ | 200 | Success (GET, PUT, PATCH) |
51
+ | 201 | Resource created (POST) |
52
+ | 204 | Success with no body (DELETE) |
53
+ | 400 | Validation / invalid input |
54
+ | 401 | Not authenticated |
55
+ | 403 | Not authorized (no permission) |
56
+ | 404 | Resource not found |
57
+ | 409 | Conflict (e.g.: email already exists) |
58
+ | 422 | Unprocessable entity |
59
+ | 429 | Rate limit exceeded |
60
+ | 500 | Internal server error |
61
61
 
62
62
  ---
63
63
 
64
- ## 3. Naming de Endpoints
64
+ ## 3. Endpoint Naming
65
65
 
66
- | Regra | Exemplo correto | Exemplo errado |
66
+ | Rule | Correct example | Wrong example |
67
67
  |:---|:---|:---|
68
- | Substantivos no plural | `/api/v1/users` | `/api/v1/user` |
69
- | Sem verbos na URL | `GET /users` | `GET /getUsers` |
70
- | Kebab-case para multi-palavras | `/order-items` | `/orderItems` |
71
- | Recursos aninhados | `/users/:id/orders` | `/getUserOrders` |
68
+ | Plural nouns | `/api/v1/users` | `/api/v1/user` |
69
+ | No verbs in URL | `GET /users` | `GET /getUsers` |
70
+ | Kebab-case for multi-word | `/order-items` | `/orderItems` |
71
+ | Nested resources | `/users/:id/orders` | `/getUserOrders` |
72
72
 
73
73
  ---
74
74
 
75
- ## 4. Paginação
75
+ ## 4. Pagination
76
76
 
77
- **Tipo**: {cursor | offset | keyset}
77
+ **Type**: {cursor | offset | keyset}
78
78
 
79
- ### Formato de Request
80
- {ex para offset:}
79
+ ### Request Format
80
+ {e.g. for offset:}
81
81
  ```
82
82
  GET /api/v1/users?page=2&per_page=20
83
83
  ```
84
84
 
85
- ### Formato de Response (meta)
85
+ ### Response Format (meta)
86
86
  ```json
87
87
  {
88
88
  "meta": {
@@ -96,33 +96,33 @@ GET /api/v1/users?page=2&per_page=20
96
96
 
97
97
  ---
98
98
 
99
- ## 5. Filtros e Ordenação
99
+ ## 5. Filters and Sorting
100
100
 
101
- ### Filtros
101
+ ### Filters
102
102
  ```
103
103
  GET /api/v1/users?status=active&role=admin
104
104
  ```
105
105
 
106
- ### Ordenação
106
+ ### Sorting
107
107
  ```
108
108
  GET /api/v1/users?sort=created_at&order=desc
109
109
  ```
110
110
 
111
111
  ---
112
112
 
113
- ## 6. Autenticação
113
+ ## 6. Authentication
114
114
 
115
- **Método**: {ex: Bearer Token (JWT) via header Authorization}
115
+ **Method**: {e.g.: Bearer Token (JWT) via Authorization header}
116
116
  **Header**: `Authorization: Bearer {token}`
117
- **Refresh**: {ex: via POST /api/v1/auth/refresh com refresh token em httpOnly cookie}
117
+ **Refresh**: {e.g.: via POST /api/v1/auth/refresh with refresh token in httpOnly cookie}
118
118
 
119
119
  ---
120
120
 
121
- ## 7. Validação
121
+ ## 7. Validation
122
122
 
123
- | Regra | Descrição |
123
+ | Rule | Description |
124
124
  |:---|:---|
125
- | Validação no backend | TODA input é validada no servidor, independente do frontend |
126
- | Mensagens de erro | Retornar campo + mensagem específica |
127
- | Formato de erro de validação | `{"error": {"code": "VALIDATION_ERROR", "details": [{"field": "email", "message": "Email inválido"}]}}` |
125
+ | Backend validation | ALL input is validated on the server, regardless of frontend |
126
+ | Error messages | Return field + specific message |
127
+ | Validation error format | `{"error": {"code": "VALIDATION_ERROR", "details": [{"field": "email", "message": "Invalid email"}]}}` |
128
128
  ```
@@ -1,76 +1,76 @@
1
- # Template: Padrões Arquiteturais do Projeto
1
+ # Template: Project Architectural Standards
2
2
 
3
- Use este template para gerar `.specs/standards/architecture.md`. Preencha com as respostas do onboarding.
3
+ Use this template to generate `.specs/standards/architecture.md`. Fill in with the onboarding interview answers.
4
4
 
5
5
  ```markdown
6
- # Padrões Arquiteturais do Projeto
6
+ # Project Architectural Standards
7
7
 
8
- **Projeto**: {nome do projeto}
9
- **Última atualização**: {data}
8
+ **Project**: {project name}
9
+ **Last updated**: {date}
10
10
 
11
11
  ---
12
12
 
13
- ## 1. Padrão Arquitetural Base
13
+ ## 1. Base Architectural Pattern
14
14
 
15
- **Padrão**: {ex: Domain-Driven Design (DDD)}
16
- **Justificativa**: {por que este padrão}
15
+ **Pattern**: {e.g.: Domain-Driven Design (DDD)}
16
+ **Justification**: {why this pattern}
17
17
 
18
- ### Camadas e Responsabilidades
18
+ ### Layers and Responsibilities
19
19
 
20
- | Camada | Responsabilidade | Pode importar de | NÃO pode importar de |
20
+ | Layer | Responsibility | Can import from | CANNOT import from |
21
21
  |:---|:---|:---|:---|
22
- | {ex: Domain} | {ex: Entidades, Value Objects, regras de negócio} | {nenhuma} | {Application, Infrastructure, Presentation} |
23
- | {ex: Application} | {ex: Use Cases, DTOs, Ports} | {Domain} | {Infrastructure, Presentation} |
24
- | {ex: Infrastructure} | {ex: Repositories, API clients, DB} | {Domain, Application} | {Presentation} |
25
- | {ex: Presentation} | {ex: Controllers, Views, Components} | {Application} | {Domain, Infrastructure} |
22
+ | {e.g.: Domain} | {e.g.: Entities, Value Objects, business rules} | {none} | {Application, Infrastructure, Presentation} |
23
+ | {e.g.: Application} | {e.g.: Use Cases, DTOs, Ports} | {Domain} | {Infrastructure, Presentation} |
24
+ | {e.g.: Infrastructure} | {e.g.: Repositories, API clients, DB} | {Domain, Application} | {Presentation} |
25
+ | {e.g.: Presentation} | {e.g.: Controllers, Views, Components} | {Application} | {Domain, Infrastructure} |
26
26
 
27
- ### Estrutura de Diretórios Padrão
27
+ ### Default Directory Structure
28
28
 
29
29
  ```
30
30
  src/
31
- ├── {camada1}/
32
- ├── {camada2}/
33
- ├── {camada3}/
34
- └── {camada4}/
31
+ ├── {layer1}/
32
+ ├── {layer2}/
33
+ ├── {layer3}/
34
+ └── {layer4}/
35
35
  ```
36
36
 
37
37
  ---
38
38
 
39
- ## 2. Padrões Avançados
39
+ ## 2. Advanced Patterns
40
40
 
41
- ### {ex: Event Sourcing}
42
- - **Usado em**: {módulos/contextos onde se aplica}
43
- - **NÃO usado em**: {módulos onde NÃO se aplica}
44
- - **Implementação**: {detalhes técnicos}
41
+ ### {e.g.: Event Sourcing}
42
+ - **Used in**: {modules/contexts where it applies}
43
+ - **NOT used in**: {modules where it does NOT apply}
44
+ - **Implementation**: {technical details}
45
45
 
46
- ### {ex: BFF (Backend for Frontend)}
47
- - **Escopo**: {cada frontend tem seu BFF? ou BFF único?}
48
- - **Regra**: {BFF contém lógica de negócio? Ou apenas orquestra?}
46
+ ### {e.g.: BFF (Backend for Frontend)}
47
+ - **Scope**: {does each frontend have its own BFF? or a single BFF?}
48
+ - **Rule**: {does BFF contain business logic? Or only orchestrates?}
49
49
 
50
- ### {ex: CQRS (Command Query Responsibility Segregation)}
51
- - **Usado em**: {onde se aplica}
52
- - **Command**: {como são os commands}
53
- - **Query**: {como são as queries}
50
+ ### {e.g.: CQRS (Command Query Responsibility Segregation)}
51
+ - **Used in**: {where it applies}
52
+ - **Command**: {what commands look like}
53
+ - **Query**: {what queries look like}
54
54
 
55
55
  ---
56
56
 
57
- ## 3. Regras de Dependência
57
+ ## 3. Dependency Rules
58
58
 
59
59
  > [!IMPORTANT]
60
- > Estas regras NUNCA devem ser violadas. Violação é classificada como 🔴 Crítica no Code Review.
60
+ > These rules must NEVER be violated. Violations are classified as 🔴 Critical in Code Review.
61
61
 
62
- 1. {ex: Domain NUNCA importa de Infrastructure}
63
- 2. {ex: Use Cases orquestram, NUNCA contêm lógica de domínio pura}
64
- 3. {ex: Cada Aggregate tem seu próprio Repository}
65
- 4. {ex: Repositories retornam Domain Entities, não DTOs}
62
+ 1. {e.g.: Domain NEVER imports from Infrastructure}
63
+ 2. {e.g.: Use Cases orchestrate, NEVER contain pure domain logic}
64
+ 3. {e.g.: Each Aggregate has its own Repository}
65
+ 4. {e.g.: Repositories return Domain Entities, not DTOs}
66
66
 
67
67
  ---
68
68
 
69
- ## 4. Princípios de Design
69
+ ## 4. Design Principles
70
70
 
71
- | Princípio | Como aplicamos |
71
+ | Principle | How we apply it |
72
72
  |:---|:---|
73
- | {ex: SSOT} | {ex: Estado vive no banco. Cache é derivado, nunca fonte primária} |
74
- | {ex: Separation of Concerns} | {ex: Cada módulo tem responsabilidade única} |
75
- | {ex: Fail Fast} | {ex: Validar inputs na borda do sistema} |
73
+ | {e.g.: SSOT} | {e.g.: State lives in the database. Cache is derived, never the primary source} |
74
+ | {e.g.: Separation of Concerns} | {e.g.: Each module has a single responsibility} |
75
+ | {e.g.: Fail Fast} | {e.g.: Validate inputs at the system boundary} |
76
76
  ```
@@ -1,63 +1,63 @@
1
- # Template: Boas Práticas e Padrões de Código
1
+ # Template: Coding Best Practices and Standards
2
2
 
3
- Use este template para gerar `.specs/standards/coding-standards.md`. Preencha com as respostas do onboarding.
3
+ Use this template to generate `.specs/standards/coding-standards.md`. Fill in with the onboarding interview answers.
4
4
 
5
5
  ```markdown
6
- # Boas Práticas e Padrões de Código
6
+ # Coding Best Practices and Standards
7
7
 
8
- **Projeto**: {nome do projeto}
9
- **Última atualização**: {data}
8
+ **Project**: {project name}
9
+ **Last updated**: {date}
10
10
 
11
11
  ---
12
12
 
13
- ## 1. Princípios Adotados
13
+ ## 1. Adopted Principles
14
14
 
15
- | Princípio | O que significa NESTE projeto | Exemplo |
15
+ | Principle | What it means IN THIS project | Example |
16
16
  |:---|:---|:---|
17
- | **SSOT** (Single Source of Truth) | {ex: Estado vive no banco. Cache é derivado.} | {ex: Não manter contadores em 2 tabelas} |
18
- | **DRY** (Don't Repeat Yourself) | {ex: Extrair quando repetir ≥ 2 vezes} | {ex: apiClient centralizado, não fetch repetido} |
19
- | **KISS** (Keep It Simple) | {ex: Preferir solução simples à elegante} | {ex: Usar map/filter ao invés de reduce complexo} |
20
- | **YAGNI** (You Aren't Gonna Need It) | {ex: Não implementar features "por garantia"} | {ex: Não criar abstração genérica para 1 uso} |
21
- | **SOLID** | {quais princípios do SOLID o projeto segue explicitamente} | — |
17
+ | **SSOT** (Single Source of Truth) | {e.g.: State lives in the database. Cache is derived.} | {e.g.: Don't maintain counters in 2 tables} |
18
+ | **DRY** (Don't Repeat Yourself) | {e.g.: Extract when repeating ≥ 2 times} | {e.g.: Centralized apiClient, not repeated fetch} |
19
+ | **KISS** (Keep It Simple) | {e.g.: Prefer simple solution over elegant} | {e.g.: Use map/filter instead of complex reduce} |
20
+ | **YAGNI** (You Aren't Gonna Need It) | {e.g.: Don't implement features "just in case"} | {e.g.: Don't create generic abstraction for 1 use} |
21
+ | **SOLID** | {which SOLID principles the project explicitly follows} | — |
22
22
 
23
23
  ---
24
24
 
25
- ## 2. Regras de Abstração
25
+ ## 2. Abstraction Rules
26
26
 
27
- ### Quando Extrair uma Função
28
- - {ex: Quando o bloco é usado ≥ 2 vezes}
29
- - {ex: Quando o bloco tem mais de 10 linhas e pode ter nome descritivo}
30
- - {ex: Quando o bloco faz algo semanticamente independente}
27
+ ### When to Extract a Function
28
+ - {e.g.: When the block is used ≥ 2 times}
29
+ - {e.g.: When the block has more than 10 lines and can have a descriptive name}
30
+ - {e.g.: When the block does something semantically independent}
31
31
 
32
- ### Quando Criar um Componente
33
- - {ex: Quando a UI é reutilizada em ≥ 2 lugares}
34
- - {ex: Quando o componente tem mais de ~100 linhas}
35
- - {ex: Quando tem estado ou lógica própria}
32
+ ### When to Create a Component
33
+ - {e.g.: When the UI is reused in ≥ 2 places}
34
+ - {e.g.: When the component has more than ~100 lines}
35
+ - {e.g.: When it has its own state or logic}
36
36
 
37
- ### Quando Criar um Hook (React)
38
- - {ex: Quando lógica stateful é usada em ≥ 2 componentes}
39
- - {ex: Quando o componente fica mais limpo separando a lógica}
37
+ ### When to Create a Hook (React)
38
+ - {e.g.: When stateful logic is used in ≥ 2 components}
39
+ - {e.g.: When the component becomes cleaner by separating the logic}
40
40
 
41
- ### Quando Criar um Service
42
- - {ex: Quando a lógica de negócio não pertence ao componente/controller}
43
- - {ex: Quando a mesma operação é usada em múltiplos endpoints/páginas}
41
+ ### When to Create a Service
42
+ - {e.g.: When business logic doesn't belong to the component/controller}
43
+ - {e.g.: When the same operation is used across multiple endpoints/pages}
44
44
 
45
45
  ---
46
46
 
47
- ## 3. Tratamento de Erros
47
+ ## 3. Error Handling
48
48
 
49
- ### Estratégia por Camada
49
+ ### Strategy by Layer
50
50
 
51
- | Camada | Estratégia |
51
+ | Layer | Strategy |
52
52
  |:---|:---|
53
- | **Domain** | {ex: Lançar custom exceptions (DomainError, ValidationError)} |
54
- | **Application/Service** | {ex: Capturar domain errors, traduzir para DTOs de erro} |
55
- | **API/Controller** | {ex: Error handler global, mapear exceptions para HTTP status} |
56
- | **Frontend** | {ex: Error Boundary para crashes, toast para erros de ação} |
53
+ | **Domain** | {e.g.: Throw custom exceptions (DomainError, ValidationError)} |
54
+ | **Application/Service** | {e.g.: Catch domain errors, translate to error DTOs} |
55
+ | **API/Controller** | {e.g.: Global error handler, map exceptions to HTTP status} |
56
+ | **Frontend** | {e.g.: Error Boundary for crashes, toast for action errors} |
57
57
 
58
- ### Custom Exceptions (se aplicável)
58
+ ### Custom Exceptions (if applicable)
59
59
  ```typescript
60
- // Hierarquia de erros do projeto
60
+ // Project error hierarchy
61
61
  class AppError extends Error { code: string; statusCode: number; }
62
62
  class ValidationError extends AppError { fields: FieldError[]; }
63
63
  class NotFoundError extends AppError { }
@@ -65,50 +65,50 @@ class UnauthorizedError extends AppError { }
65
65
  class ConflictError extends AppError { }
66
66
  ```
67
67
 
68
- ### Mensagens de Erro
69
- - {ex: Mensagens voltadas ao usuário, nunca stack traces}
70
- - {ex: Logging do erro completo no servidor, mensagem limpa no client}
71
- - {ex: Códigos de erro padronizados (ERROR_CODE) para o frontend mapear}
68
+ ### Error Messages
69
+ - {e.g.: User-facing messages, never stack traces}
70
+ - {e.g.: Full error logging on the server, clean message on the client}
71
+ - {e.g.: Standardized error codes (ERROR_CODE) for the frontend to map}
72
72
 
73
73
  ---
74
74
 
75
75
  ## 4. Logging
76
76
 
77
- ### Estratégia
78
- - **Formato**: {ex: Structured logging (JSON)}
79
- - **Níveis**: {ex: error, warn, info, debug}
80
- - **Ferramenta**: {ex: pino, winston, console estruturado}
77
+ ### Strategy
78
+ - **Format**: {e.g.: Structured logging (JSON)}
79
+ - **Levels**: {e.g.: error, warn, info, debug}
80
+ - **Tool**: {e.g.: pino, winston, structured console}
81
81
 
82
- ### O que Logar
82
+ ### What to Log
83
83
 
84
- | Nível | Quando usar | Exemplo |
84
+ | Level | When to use | Example |
85
85
  |:---|:---|:---|
86
- | `error` | Falhas que impedem a operação | Erro de conexão DB, exception não tratada |
87
- | `warn` | Situações anormais mas recuperáveis | Rate limit próximo, fallback ativado |
88
- | `info` | Eventos de negócio importantes | Usuário criado, pagamento processado |
89
- | `debug` | Detalhes para debugging | Query SQL executada, payload recebido |
86
+ | `error` | Failures that prevent the operation | DB connection error, unhandled exception |
87
+ | `warn` | Abnormal but recoverable situations | Rate limit approaching, fallback activated |
88
+ | `info` | Important business events | User created, payment processed |
89
+ | `debug` | Details for debugging | SQL query executed, received payload |
90
90
 
91
- ### O que NUNCA Logar
92
- - Senhas, tokens, chaves de API
93
- - Dados pessoais sensíveis (CPF, cartão de crédito)
94
- - Payloads completos de request em produção
91
+ ### What to NEVER Log
92
+ - Passwords, tokens, API keys
93
+ - Sensitive personal data (SSN, credit card)
94
+ - Full request payloads in production
95
95
 
96
96
  ---
97
97
 
98
- ## 5. Testes (se aplicável)
98
+ ## 5. Testing (if applicable)
99
99
 
100
- ### Estratégia
101
- - **Tipo principal**: {ex: Testes manuais via manual-tests.md}
102
- - **Cobertura mínima**: {ex: N/A — foco em testes manuais}
103
- - **Quando automatizar**: {ex: Lógica de domínio crítica (cálculos, validações)}
100
+ ### Strategy
101
+ - **Primary type**: {e.g.: Manual tests via manual-tests.md}
102
+ - **Minimum coverage**: {e.g.: N/A — focus on manual tests}
103
+ - **When to automate**: {e.g.: Critical domain logic (calculations, validations)}
104
104
 
105
105
  ---
106
106
 
107
107
  ## 6. Performance
108
108
 
109
- ### Regras Gerais
110
- - {ex: Queries de listagem DEVEM ter paginação (máximo 100 por página)}
111
- - {ex: N+1 queries são proibidasusar eager loading / join}
112
- - {ex: Imagens devem ser otimizadas (WebP, lazy loading)}
113
- - {ex: Bundle splitting para rotas de frontend}
109
+ ### General Rules
110
+ - {e.g.: Listing queries MUST have pagination (maximum 100 per page)}
111
+ - {e.g.: N+1 queries are prohibiteduse eager loading / join}
112
+ - {e.g.: Images must be optimized (WebP, lazy loading)}
113
+ - {e.g.: Bundle splitting for frontend routes}
114
114
  ```