specifica-br 1.2.2 → 1.5.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 (46) hide show
  1. package/README.md +114 -44
  2. package/dist/boilerplate/commands/executar-task.md +133 -0
  3. package/dist/boilerplate/commands/gerar-contexto.md +1462 -0
  4. package/dist/boilerplate/commands/gerar-prd.md +289 -0
  5. package/dist/boilerplate/commands/gerar-tasks.md +168 -0
  6. package/dist/boilerplate/commands/gerar-techspec.md +1467 -0
  7. package/dist/boilerplate/commands/gerar-visao.md +731 -0
  8. package/dist/boilerplate/commands/realizar-codereview.md +288 -0
  9. package/dist/boilerplate/opencode-commands/executar-task.md +55 -48
  10. package/dist/boilerplate/opencode-commands/gerar-contexto.md +1462 -0
  11. package/dist/boilerplate/opencode-commands/gerar-prd.md +232 -40
  12. package/dist/boilerplate/opencode-commands/gerar-tasks.md +112 -31
  13. package/dist/boilerplate/opencode-commands/gerar-techspec.md +1464 -80
  14. package/dist/boilerplate/opencode-commands/gerar-visao.md +731 -0
  15. package/dist/boilerplate/opencode-commands/realizar-codereview.md +288 -0
  16. package/dist/boilerplate/skills/product-manager/SKILL.md +32 -0
  17. package/dist/boilerplate/skills/techspec-generator/SKILL.md +489 -0
  18. package/dist/boilerplate/skills/techspec-generator/references/api-contracts.md +421 -0
  19. package/dist/boilerplate/skills/techspec-generator/references/architecture-patterns.md +316 -0
  20. package/dist/boilerplate/skills/techspec-generator/references/database-modeling.md +436 -0
  21. package/dist/boilerplate/skills/techspec-generator/references/observability-testing.md +436 -0
  22. package/dist/boilerplate/skills/techspec-generator/references/security-hardening.md +238 -0
  23. package/dist/boilerplate/skills/techspec-generator/references/ux-ui-accessibility.md +511 -0
  24. package/dist/boilerplate/specs-templates/architecture-template.md +736 -0
  25. package/dist/boilerplate/specs-templates/codereview-template.md +95 -0
  26. package/dist/boilerplate/specs-templates/prd-template.md +101 -19
  27. package/dist/boilerplate/specs-templates/product_vision-template.md +284 -0
  28. package/dist/boilerplate/specs-templates/task-template.md +64 -18
  29. package/dist/boilerplate/specs-templates/tasks-template.md +12 -4
  30. package/dist/boilerplate/specs-templates/techspec-template.md +1227 -89
  31. package/dist/boilerplate/templates/architecture-template.md +736 -0
  32. package/dist/boilerplate/templates/codereview-template.md +95 -0
  33. package/dist/boilerplate/templates/prd-template.md +167 -0
  34. package/dist/boilerplate/templates/product_vision-template.md +284 -0
  35. package/dist/boilerplate/templates/task-template.md +169 -0
  36. package/dist/boilerplate/templates/tasks-template.md +15 -0
  37. package/dist/boilerplate/templates/techspec-template.md +1306 -0
  38. package/dist/commands/help.js +33 -11
  39. package/dist/commands/init.js +39 -43
  40. package/dist/tools-mapping.json +32 -0
  41. package/dist/types/init.d.ts +14 -17
  42. package/dist/utils/file-service.d.ts +5 -3
  43. package/dist/utils/file-service.js +168 -56
  44. package/dist/utils/message-formatter.d.ts +2 -1
  45. package/dist/utils/message-formatter.js +39 -22
  46. package/package.json +1 -1
@@ -0,0 +1,316 @@
1
+ # Padrões Arquiteturais e Decisões de Design
2
+
3
+ Referência técnica para decisões arquiteturais ao gerar Tech Specs.
4
+
5
+ ## Sumário
6
+
7
+ 1. [Paradigmas Arquiteturais](#1-paradigmas-arquiteturais)
8
+ 2. [Padrões de Design](#2-padroes-de-design)
9
+ 3. [Princípios SOLID no Contexto de Specs](#3-principios-solid-no-contexto-de-specs)
10
+ 4. [Separação de Camadas](#4-separacao-de-camadas)
11
+ 5. [Decisões de Orquestração](#5-decisoes-de-orquestracao)
12
+
13
+ ---
14
+
15
+ ## 1. Paradigmas Arquiteturais
16
+
17
+ ### 1.1. Clean Architecture
18
+
19
+ **Quando usar:** Projetos que valorizam testabilidade e independência de frameworks.
20
+
21
+ **Estrutura típica:**
22
+ ```
23
+ src/
24
+ ├── Domain/ # Entidades, Value Objects, Interfaces de Repository
25
+ ├── Application/ # Use Cases, Commands, Queries, Handlers, DTOs
26
+ ├── Infrastructure/ # Repository implementations, External Services, Adapters
27
+ └── Interface/ # Controllers, Presenters, Gateways (API/Web)
28
+ ```
29
+
30
+ **Regras de dependência:**
31
+ - Domain → não depende de ninguém
32
+ - Application → depende apenas de Domain
33
+ - Infrastructure → implementa interfaces de Domain/Application
34
+ - Interface → orquestra chamadas para Application
35
+
36
+ **O que especificar na TechSpec:**
37
+ - A qual camada pertence cada novo componente
38
+ - Quais interfaces cada camada define
39
+ - Qual a direção de dependência (sempre para dentro)
40
+
41
+ **Violações comuns a detectar:**
42
+ - Controller com lógica de negócio (deveria estar em Application)
43
+ - Entity importando ORM (deveria ser agnóstico)
44
+ - Handler acessando banco diretamente (deveria usar Repository)
45
+ - Domain dependendo de biblioteca externa
46
+
47
+ ### 1.2. Domain-Driven Design (DDD)
48
+
49
+ **Quando usar:** Domínios complexos com regras de negócio ricas.
50
+
51
+ **Conceitos-chave para especificar:**
52
+
53
+ | Conceito | O que documentar na TechSpec |
54
+ |:---|:---|
55
+ | **Bounded Context** | Qual contexto esta feature pertence |
56
+ | **Aggregate Root** | Qual entidade é a raiz do aggregate |
57
+ | **Value Object** | Quais conceitos são imutáveis sem identidade |
58
+ | **Domain Event** | Quais eventos de domínio a feature emite/consome |
59
+ | **Repository** | Interface de persistência (não implementação) |
60
+ | **Domain Service** | Lógica que não pertence a nenhuma entidade |
61
+
62
+ **Exemplo de especificação DDD:**
63
+ ```
64
+ Aggregate Root: Order
65
+ - Entities: Order, OrderItem
66
+ - Value Objects: Money, OrderStatus
67
+ - Invariants: Total > 0, Status transitions válidas, Items não vazio
68
+ - Events: OrderCreated, OrderPaid, OrderCancelled
69
+ - Repository: IOrderRepository (interface em Domain)
70
+ ```
71
+
72
+ ### 1.3. Hexagonal Architecture (Ports & Adapters)
73
+
74
+ **Quando usar:** Quando a feature precisa de múltiplos adaptadores (API, CLI, Queue).
75
+
76
+ **Estrutura:**
77
+ ```
78
+ src/
79
+ ├── core/ # Lógica de negócio pura
80
+ │ ├── domain/ # Entidades, Value Objects
81
+ │ └── ports/ # Interfaces (inbound e outbound)
82
+ ├── adapters/
83
+ │ ├── inbound/ # Controllers, Consumers, CLI handlers
84
+ │ └── outbound/ # Repository impl, External Service impl
85
+ └── config/ # Wiring/DI configuration
86
+ ```
87
+
88
+ **Ports:** Interfaces que definem contratos
89
+ - Inbound (driving): O que o mundo externo pode fazer com o domínio
90
+ - Outbound (driven): O que o domínio precisa do mundo externo
91
+
92
+ ### 1.4. CQRS (Command Query Responsibility Segregation)
93
+
94
+ **Quando usar:** Quando operações de leitura e escrita têm padrões muito diferentes.
95
+
96
+ **O que especificar:**
97
+ ```
98
+ Command Side:
99
+ - CreateOrderCommand → CreateOrderHandler → IOrderRepository
100
+ - Separado da leitura
101
+
102
+ Query Side:
103
+ - GetOrderByIdQuery → GetOrderByIdHandler → IOrderReadRepository
104
+ - Pode usar modelo de leitura diferente (projection)
105
+ ```
106
+
107
+ **Trade-offs:**
108
+ - (+) Leitura e escrita otimizadas independentemente
109
+ - (+) Melhor escalabilidade
110
+ - (-) Consistência eventual (se separar modelos de dados)
111
+ - (-) Complexidade adicional
112
+
113
+ ### 1.5. Event Sourcing
114
+
115
+ **Quando usar:** Quando o histórico de mudanças é importante para o negócio.
116
+
117
+ **O que especificar:**
118
+ ```
119
+ Eventos armazenados:
120
+ - OrderCreated { orderId, items, total }
121
+ - OrderItemAdded { orderId, itemId, product, quantity }
122
+ - OrderPaid { orderId, paymentId, paidAt }
123
+
124
+ Snapshot: A cada N eventos, gerar snapshot do estado atual
125
+ Projection: Para queries, criar modelo de leitura a partir dos eventos
126
+ ```
127
+
128
+ **Trade-offs:**
129
+ - (+) Audit trail completo
130
+ - (+) Time travel (reconstruir estado em qualquer ponto)
131
+ - (-) Complexidade elevada
132
+ - (-) Storage cresce continuamente
133
+
134
+ ---
135
+
136
+ ## 2. Padrões de Design
137
+
138
+ ### 2.1. Repository Pattern
139
+
140
+ **Especificação na TechSpec:**
141
+ ```
142
+ Interface: IOrderRepository (em Domain/Interfaces)
143
+ Métodos:
144
+ - AddAsync(order: Order): Promise<void>
145
+ - GetByIdAsync(id: UUID): Promise<Order | null>
146
+ - UpdateAsync(order: Order): Promise<void>
147
+ - GetByCustomerIdAsync(customerId: UUID, page: number, size: number): Promise<PaginatedResult<Order>>
148
+
149
+ Implementação: OrderRepository (em Infrastructure/Persistence)
150
+ ORM: Prisma/Dapper/EF Core (conforme padrão do projeto)
151
+ ```
152
+
153
+ ### 2.2. Strategy Pattern
154
+
155
+ **Quando usar:** Múltiplas variantes de um algoritmo (ex: cálculo de frete, métodos de pagamento).
156
+
157
+ ```
158
+ Interface: IShippingCalculator
159
+ Estratégias: CorreiosCalculator, FedexCalculator, LocalPickupCalculator
160
+ Seleção: ShippingCalculatorFactory baseado em ShippingMethod
161
+ ```
162
+
163
+ ### 2.3. Factory Pattern
164
+
165
+ **Quando usar:** Criação de objetos complexos com validações.
166
+
167
+ ```
168
+ Método estático: Order.Create(customerId, items) → Order
169
+ Validações: Items não vazio, produtos existem, estoque disponível
170
+ Resultado: Order válido ou lança DomainException
171
+ ```
172
+
173
+ ### 2.4. Observer Pattern / Event-Driven
174
+
175
+ **Quando usar:** Desacoplar produtores de consumidores de eventos.
176
+
177
+ ```
178
+ Evento: OrderCreated
179
+ Produtores: CreateOrderHandler (Application)
180
+ Consumidores: PaymentProcessor, NotificationService, InventoryUpdater
181
+ Barramento: IMediatR (in-process) ou RabbitMQ (out-of-process)
182
+ ```
183
+
184
+ ### 2.5. Specification Pattern
185
+
186
+ **Quando usar:** Regras de negócio complexas e combináveis.
187
+
188
+ ```
189
+ Specification: CanCancelOrderSpecification
190
+ - OrderStatus must be PENDING or PROCESSING
191
+ - Time since creation < 24 hours
192
+ - No payment processed yet
193
+ Combinação: CanCancelOrder.And(NoPaymentProcessed)
194
+ ```
195
+
196
+ ---
197
+
198
+ ## 3. Princípios SOLID no Contexto de Specs
199
+
200
+ ### Single Responsibility (SRP)
201
+
202
+ Cada componente deve ter uma razão para mudar:
203
+ - Handler: Processa UM comando
204
+ - Repository: Persiste UMA entidade
205
+ - Validator: Valida UM input
206
+ - Controller: Expõe UM conjunto de endpoints relacionados
207
+
208
+ ### Open/Closed (OCP)
209
+
210
+ Estender sem modificar:
211
+ - Novo método de pagamento → nova classe que implementa IPaymentStrategy
212
+ - Novo tipo de notificação → novo classe que implementa INotificationService
213
+ - Sem modificar código existente
214
+
215
+ ### Liskov Substitution (LSP)
216
+
217
+ Subtipos devem ser substituíveis:
218
+ - Se IOrderRepository tem GetByIdAsync, qualquer implementação deve retornar Order ou null
219
+ - Não criar implementação que lança NotImplementedException
220
+
221
+ ### Interface Segregation (ISP)
222
+
223
+ Interfaces específicas e pequenas:
224
+ - Ruim: IOrderService com 20 métodos
225
+ - Bom: IOrderReader (queries) + IOrderWriter (commands)
226
+
227
+ ### Dependency Inversion (DIP)
228
+
229
+ Depender de abstrações, não implementações:
230
+ - Handler depende de IOrderRepository (interface), não OrderRepository (implementação)
231
+ - Controller depende de IMediator (ou IHandler), não Handler diretamente
232
+
233
+ ---
234
+
235
+ ## 4. Separação de Camadas
236
+
237
+ ### Matriz de Responsabilidades
238
+
239
+ | Camada | Responsável por | NÃO responsável por |
240
+ |:---|:---|:---|
241
+ | **Domain** | Entidades, Value Objects, regras de negócio, interfaces de repository | Persistência, HTTP, DI, logging |
242
+ | **Application** | Use cases, handlers, commands, queries, DTOs, validação de input | Acesso a DB, HTTP, frameworks |
243
+ | **Infrastructure** | Repositories, external services, email, storage, DB context | Regras de negócio, DTOs |
244
+ | **Interface** | Controllers, rotas, auth middleware, response formatting | Lógica de negócio, acesso a DB |
245
+
246
+ ### Direção de Dependências
247
+
248
+ ```
249
+ Interface → Application → Domain ← Infrastructure
250
+ ```
251
+
252
+ - Interface depende de Application (chama handlers)
253
+ - Application depende de Domain (usa entidades e interfaces)
254
+ - Infrastructure depende de Domain (implementa interfaces)
255
+ - Domain não depende de ninguém
256
+
257
+ ---
258
+
259
+ ## 5. Decisões de Orquestração
260
+
261
+ ### 5.1. Síncrono vs Assíncrono
262
+
263
+ **Critérios de decisão:**
264
+
265
+ | Fator | Síncrono | Assíncrono |
266
+ |:---|:---|:---|
267
+ | Latência aceitável | < 500ms | > 500ms OK |
268
+ | Necessidade de resposta imediata | Sim | Não |
269
+ | Volume de operações | Baixo/Médio | Alto |
270
+ | Dependência externa | Confiável | Pode falhar |
271
+ | Consistência | Imediata | Eventual OK |
272
+
273
+ **O que especificar na TechSpec:**
274
+ ```
275
+ Decisão: Processamento assíncrono para pagamento
276
+ Justificativa: Payment gateway responde em média 2s (timeout em 5s).
277
+ PRD RF-005 requer "processamento assíncrono".
278
+ Padrão existente: RabbitMQ já configurado (docker-compose).
279
+ Fluxo: API publica OrderCreated → PaymentWorker consome → atualiza status
280
+ ```
281
+
282
+ ### 5.2. Saga Pattern
283
+
284
+ **Quando usar:** Transações que envolvem múltiplos serviços/bounded contexts.
285
+
286
+ **Choreography (event-driven):**
287
+ ```
288
+ OrderService → OrderCreated event
289
+ PaymentService → consome OrderCreated, processa → PaymentProcessed event
290
+ InventoryService → consome PaymentProcessed, reserva → InventoryReserved event
291
+ ```
292
+
293
+ **Orchestration (centralizado):**
294
+ ```
295
+ OrderOrchestrator → chama PaymentService → chama InventoryService → completa
296
+ Se falha: OrderOrchestrator executa compensating transactions
297
+ ```
298
+
299
+ **Trade-offs:**
300
+ - Choreography: Mais simples, mas difícil rastrear fluxo
301
+ - Orchestration: Mais controlado, mas ponto central de falha
302
+
303
+ ### 5.3. Outbox Pattern
304
+
305
+ **Quando usar:** Garantir que eventos sejam publicados mesmo com falha.
306
+
307
+ ```
308
+ 1. Salvar dados + evento na mesma transação (Outbox table)
309
+ 2. Background worker lê Outbox e publica eventos
310
+ 3. Marca evento como publicado
311
+ ```
312
+
313
+ **Especificação na TechSpec:**
314
+ - Tabela de outbox: outbox_events (id, aggregate_type, aggregate_id, event_type, payload, published_at, created_at)
315
+ - Worker: polling a cada N segundos
316
+ - Cleanup: remover eventos publicados após M dias