@dewtech/dare-cli 2.15.0 → 2.17.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 (101) hide show
  1. package/README.md +659 -561
  2. package/dist/__tests__/refine.test.d.ts +2 -0
  3. package/dist/__tests__/refine.test.d.ts.map +1 -0
  4. package/dist/__tests__/refine.test.js +186 -0
  5. package/dist/__tests__/refine.test.js.map +1 -0
  6. package/dist/__tests__/review.test.d.ts +2 -0
  7. package/dist/__tests__/review.test.d.ts.map +1 -0
  8. package/dist/__tests__/review.test.js +242 -0
  9. package/dist/__tests__/review.test.js.map +1 -0
  10. package/dist/__tests__/update.test.d.ts +2 -0
  11. package/dist/__tests__/update.test.d.ts.map +1 -0
  12. package/dist/__tests__/update.test.js +150 -0
  13. package/dist/__tests__/update.test.js.map +1 -0
  14. package/dist/bin/dare.js +6 -0
  15. package/dist/bin/dare.js.map +1 -1
  16. package/dist/commands/dag.d.ts.map +1 -1
  17. package/dist/commands/dag.js +27 -9
  18. package/dist/commands/dag.js.map +1 -1
  19. package/dist/commands/execute.d.ts.map +1 -1
  20. package/dist/commands/execute.js +76 -0
  21. package/dist/commands/execute.js.map +1 -1
  22. package/dist/commands/refine.d.ts +16 -0
  23. package/dist/commands/refine.d.ts.map +1 -0
  24. package/dist/commands/refine.js +167 -0
  25. package/dist/commands/refine.js.map +1 -0
  26. package/dist/commands/review.d.ts +16 -0
  27. package/dist/commands/review.d.ts.map +1 -0
  28. package/dist/commands/review.js +106 -0
  29. package/dist/commands/review.js.map +1 -0
  30. package/dist/commands/update.d.ts +13 -0
  31. package/dist/commands/update.d.ts.map +1 -0
  32. package/dist/commands/update.js +149 -0
  33. package/dist/commands/update.js.map +1 -0
  34. package/dist/types/Refine.types.d.ts +96 -0
  35. package/dist/types/Refine.types.d.ts.map +1 -0
  36. package/dist/types/Refine.types.js +19 -0
  37. package/dist/types/Refine.types.js.map +1 -0
  38. package/dist/types/Review.types.d.ts +86 -0
  39. package/dist/types/Review.types.d.ts.map +1 -0
  40. package/dist/types/Review.types.js +15 -0
  41. package/dist/types/Review.types.js.map +1 -0
  42. package/dist/types/UpdateManifest.types.d.ts +91 -0
  43. package/dist/types/UpdateManifest.types.d.ts.map +1 -0
  44. package/dist/types/UpdateManifest.types.js +13 -0
  45. package/dist/types/UpdateManifest.types.js.map +1 -0
  46. package/dist/utils/ReviewRunner.d.ts +42 -0
  47. package/dist/utils/ReviewRunner.d.ts.map +1 -0
  48. package/dist/utils/ReviewRunner.js +175 -0
  49. package/dist/utils/ReviewRunner.js.map +1 -0
  50. package/dist/utils/UpdateApplier.d.ts +42 -0
  51. package/dist/utils/UpdateApplier.d.ts.map +1 -0
  52. package/dist/utils/UpdateApplier.js +207 -0
  53. package/dist/utils/UpdateApplier.js.map +1 -0
  54. package/dist/utils/UpdateDetector.d.ts +56 -0
  55. package/dist/utils/UpdateDetector.d.ts.map +1 -0
  56. package/dist/utils/UpdateDetector.js +164 -0
  57. package/dist/utils/UpdateDetector.js.map +1 -0
  58. package/dist/utils/complexity-analyzer.d.ts +60 -0
  59. package/dist/utils/complexity-analyzer.d.ts.map +1 -0
  60. package/dist/utils/complexity-analyzer.js +292 -0
  61. package/dist/utils/complexity-analyzer.js.map +1 -0
  62. package/dist/utils/excalidraw-renderer.d.ts +79 -0
  63. package/dist/utils/excalidraw-renderer.d.ts.map +1 -0
  64. package/dist/utils/excalidraw-renderer.js +188 -0
  65. package/dist/utils/excalidraw-renderer.js.map +1 -0
  66. package/dist/utils/excalidraw-renderer.test.d.ts +2 -0
  67. package/dist/utils/excalidraw-renderer.test.d.ts.map +1 -0
  68. package/dist/utils/excalidraw-renderer.test.js +135 -0
  69. package/dist/utils/excalidraw-renderer.test.js.map +1 -0
  70. package/dist/utils/project-generator.d.ts.map +1 -1
  71. package/dist/utils/project-generator.js +21 -2
  72. package/dist/utils/project-generator.js.map +1 -1
  73. package/dist/utils/stack-bootstrap.js +3 -1
  74. package/dist/utils/stack-bootstrap.js.map +1 -1
  75. package/dist/utils/static-analyzer.d.ts +29 -0
  76. package/dist/utils/static-analyzer.d.ts.map +1 -0
  77. package/dist/utils/static-analyzer.js +390 -0
  78. package/dist/utils/static-analyzer.js.map +1 -0
  79. package/dist/utils/version-compare.d.ts +27 -0
  80. package/dist/utils/version-compare.d.ts.map +1 -0
  81. package/dist/utils/version-compare.js +47 -0
  82. package/dist/utils/version-compare.js.map +1 -0
  83. package/package.json +1 -1
  84. package/templates/DARE-dag-example.yaml +280 -0
  85. package/templates/UPDATE-MANIFEST.json +48 -0
  86. package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +180 -36
  87. package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -0
  88. package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -0
  89. package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +41 -0
  90. package/templates/ide/antigravity/templates/TASK-SPEC-template.md +45 -4
  91. package/templates/ide/claude/.claude/commands/dare-blueprint.md +56 -0
  92. package/templates/ide/claude/.claude/commands/dare-dag-build.md +41 -0
  93. package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -0
  94. package/templates/ide/claude/.claude/commands/dare-refine.md +145 -0
  95. package/templates/ide/claude/.claude/commands/dare-review.md +113 -0
  96. package/templates/ide/claude/templates/TASK-SPEC-template.md +45 -4
  97. package/templates/ide/cursor/.cursor/commands/generate-blueprint.md +45 -0
  98. package/templates/ide/cursor/.cursor/commands/generate-tasks.md +42 -0
  99. package/templates/ide/cursor/.cursor/commands/refine-task.md +107 -0
  100. package/templates/ide/cursor/.cursor/commands/review-task.md +91 -0
  101. package/templates/ide/cursor/templates/TASK-SPEC-template.md +45 -4
@@ -0,0 +1,280 @@
1
+ # Exemplo completo de dare-dag.yaml para o DARE CLI
2
+ #
3
+ # Este arquivo ilustra como estruturar um grafo de tasks (DAG) para o método DARE.
4
+ # Copie e customize para seu projeto.
5
+ #
6
+ # Campos:
7
+ # - name: nome do projeto
8
+ # - version: semântica (versionamento do projeto)
9
+ # - created_at: timestamp
10
+ # - tasks: dicionário de tasks
11
+ #
12
+ # Cada task tem:
13
+ # - name (obrigatório): nome legível da tarefa
14
+ # - complexity (obrigatório): LOW | MEDIUM | HIGH
15
+ # - rank (opcional): ordem no DAG, calculado automaticamente se omitido
16
+ # - depends_on (opcional): lista de task IDs que DEVE completar antes
17
+ # - status (opcional): PENDING | RUNNING | DONE | FAILED
18
+ # - subtask_prompt (opcional): descrição detalhada para o agente executar
19
+ # - blueprint_section (opcional): link para seção em BLUEPRINT.md
20
+
21
+ name: "API de Autenticação com JWT"
22
+ version: "1.0"
23
+ created_at: "2026-05-14T10:30:00Z"
24
+
25
+ # Metadados opcionais
26
+ metadata:
27
+ project_url: "https://github.com/seu-org/seu-projeto"
28
+ team: "Backend Team"
29
+ deadline: "2026-06-30"
30
+
31
+ # ============================
32
+ # TAREFAS (TASKS)
33
+ # ============================
34
+
35
+ tasks:
36
+ # ─────────────────────────────────────────────────────────────
37
+ # RANK 1 — Fundação (sem dependências)
38
+ # Estas tarefas podem rodar em paralelo — nenhuma depende uma da outra
39
+ # ─────────────────────────────────────────────────────────────
40
+
41
+ task-001:
42
+ name: "Setup Boilerplate"
43
+ complexity: "LOW"
44
+ # rank será calculado como 1 automaticamente (sem deps)
45
+ depends_on: []
46
+ status: "DONE" # ✅ Já completada
47
+ subtask_prompt: |
48
+ Crie estrutura básica Node.js + NestJS:
49
+ - package.json com deps (typescript, express, dotenv)
50
+ - tsconfig.json
51
+ - .gitignore, .env.example
52
+ - scripts: dev, build, test, lint
53
+ blueprint_section: "1. Foundation"
54
+
55
+ task-002:
56
+ name: "Setup Database Schema"
57
+ complexity: "MEDIUM"
58
+ depends_on: []
59
+ status: "DONE" # ✅ Completada
60
+ subtask_prompt: |
61
+ Defina schema no banco de dados:
62
+ - Tabela `users` (id, email, password_hash, created_at, updated_at)
63
+ - Tabela `refresh_tokens` (id, user_id, token_hash, expires_at, revoked_at)
64
+ - Índices em email e token
65
+ - Migrations com Prisma / TypeORM / Knex
66
+ blueprint_section: "1. Foundation"
67
+
68
+ # ─────────────────────────────────────────────────────────────
69
+ # RANK 2 — Core (depende de Rank 1)
70
+ # task-003 depende de task-001 (boilerplate)
71
+ # task-004 depende de task-002 (schema)
72
+ # Podem rodar em paralelo uma com a outra
73
+ # ─────────────────────────────────────────────────────────────
74
+
75
+ task-003:
76
+ name: "Implement JWT Auth Middleware"
77
+ complexity: "HIGH"
78
+ depends_on:
79
+ - "task-001" # Precisa do boilerplate
80
+ status: "RUNNING" # ⚙️ Em andamento
81
+ subtask_prompt: |
82
+ Crie middleware de autenticação:
83
+ - Gere JWT (HS256 ou RS256) com payload (user_id, iat, exp)
84
+ - Middleware que valida JWT em cada request
85
+ - Extraia user_id do token e injete em req.user
86
+ - Trate expiração, inválido, ausente
87
+ - Logs de tentativas falhadas
88
+ blueprint_section: "2. Authentication Core"
89
+
90
+ task-004:
91
+ name: "Implement Refresh Token Flow"
92
+ complexity: "MEDIUM"
93
+ depends_on:
94
+ - "task-001", # Precisa do boilerplate
95
+ - "task-002" # Precisa do schema
96
+ status: "PENDING" # ⏳ Não iniciada
97
+ subtask_prompt: |
98
+ Implemente rotação de refresh tokens:
99
+ - Endpoint POST /auth/refresh que aceita refresh_token
100
+ - Valide refresh_token contra banco de dados
101
+ - Gere novo access_token + refresh_token
102
+ - Revogue token antigo no banco
103
+ - Implemente segurança: limite rate, valide origin
104
+ blueprint_section: "2. Authentication Core"
105
+
106
+ # ─────────────────────────────────────────────────────────────
107
+ # RANK 3 — Integração & Testes (depende de Rank 2)
108
+ # task-005 depende de task-003 (middleware)
109
+ # task-006 depende de task-003 e task-004 (ambos cores)
110
+ # ─────────────────────────────────────────────────────────────
111
+
112
+ task-005:
113
+ name: "Add Login & Logout Endpoints"
114
+ complexity: "LOW"
115
+ depends_on:
116
+ - "task-003" # Precisa do middleware JWT
117
+ status: "PENDING" # ⏳ Não iniciada
118
+ subtask_prompt: |
119
+ Crie endpoints de autenticação:
120
+ - POST /auth/login (email, password) → access_token, refresh_token
121
+ - POST /auth/logout (revoga refresh_token)
122
+ - Validação de entrada (email válido, password não vazio)
123
+ - Hash de password com bcrypt/argon2
124
+ - Testes unitários para sucesso e erro
125
+ blueprint_section: "3. API Endpoints"
126
+
127
+ task-006:
128
+ name: "Implement Tests & Security Hardening"
129
+ complexity: "HIGH"
130
+ depends_on:
131
+ - "task-003", # Precisa do middleware
132
+ - "task-004" # Precisa do refresh flow
133
+ status: "PENDING" # ⏳ Não iniciada
134
+ subtask_prompt: |
135
+ Teste segurança e implemente proteções:
136
+ - Testes end-to-end: login → refresh → logout
137
+ - Testes de segurança: expiração, inválido, reuso de token
138
+ - CORS policy (origem permitida)
139
+ - Helmet.js para headers de segurança
140
+ - Rate limiting no /auth/refresh
141
+ - CSP (Content Security Policy)
142
+ - Logs de auditoria (tentativas falhadas)
143
+ blueprint_section: "4. Security & Testing"
144
+
145
+ # ─────────────────────────────────────────────────────────────
146
+ # RANK 4 — Documentação & Deploy (depende de tudo)
147
+ # task-007 depende de toda core (task-005, task-006)
148
+ # ─────────────────────────────────────────────────────────────
149
+
150
+ task-007:
151
+ name: "Document API & Prepare Deploy"
152
+ complexity: "LOW"
153
+ depends_on:
154
+ - "task-005", # Precisa endpoints prontos
155
+ - "task-006" # Precisa testes passando
156
+ status: "PENDING" # ⏳ Não iniciada
157
+ subtask_prompt: |
158
+ Documente e prepare deployment:
159
+ - OpenAPI/Swagger documentation
160
+ - README com exemplos de uso (curl/Postman)
161
+ - Environment variables documentation
162
+ - Docker setup (Dockerfile, docker-compose)
163
+ - CI/CD pipeline (GitHub Actions / GitLab CI)
164
+ - Health check endpoint
165
+ blueprint_section: "5. Documentation & Deploy"
166
+
167
+ # ============================
168
+ # EXPLICAÇÃO DO GRAFO
169
+ # ============================
170
+
171
+ # Visualização (Rank = camada):
172
+ #
173
+ # Rank 1 (Fundação — paralelo)
174
+ # ├── task-001 [LOW] ✅
175
+ # └── task-002 [MEDIUM] ✅
176
+ #
177
+ # Rank 2 (Core — paralelo)
178
+ # ├── task-003 [HIGH] ⚙️ (depende: 001)
179
+ # └── task-004 [MEDIUM] ⏳ (depende: 001, 002)
180
+ #
181
+ # Rank 3 (Integração — paralelo)
182
+ # ├── task-005 [LOW] ⏳ (depende: 003)
183
+ # └── task-006 [HIGH] ⏳ (depende: 003, 004)
184
+ #
185
+ # Rank 4 (Documentação)
186
+ # └── task-007 [LOW] ⏳ (depende: 005, 006)
187
+
188
+ # ============================
189
+ # COMO USAR ESTE ARQUIVO
190
+ # ============================
191
+
192
+ # 1. Copie para seu projeto:
193
+ # cp packages/cli/templates/DARE-dag-example.yaml DARE/dare-dag.yaml
194
+
195
+ # 2. Customize:
196
+ # - Substitua nomes das tasks pelo seu projeto
197
+ # - Ajuste complexidade (LOW/MEDIUM/HIGH)
198
+ # - Defina dependências corretas
199
+ # - Atualize blueprint_section se tiver um BLUEPRINT.md
200
+
201
+ # 3. Valide:
202
+ # dare dag validate
203
+
204
+ # 4. Visualize:
205
+ # /dare-dag-viz
206
+ # → Abre em https://excalidraw.com com cores por complexidade
207
+
208
+ # 5. Atualize status conforme avança:
209
+ # task-003:
210
+ # status: "DONE" # Após completar
211
+
212
+ # ============================
213
+ # CONVENÇÕES
214
+ # ============================
215
+
216
+ # Task ID:
217
+ # Formato: task-NNN-slug
218
+ # - NNN = número sequencial (001, 002, ...)
219
+ # - slug = nome legível em kebab-case
220
+ # Exemplos: task-001-setup-boilerplate, task-003-jwt-middleware
221
+
222
+ # Complexidade:
223
+ # - LOW: < 30 min, padrão bem definido
224
+ # - MEDIUM: 2-8 horas, múltiplas decisões
225
+ # - HIGH: 1+ dias, design crítico, risco alto
226
+
227
+ # Status:
228
+ # - PENDING: não iniciada, aguardando
229
+ # - RUNNING: em execução neste momento
230
+ # - DONE: completada com sucesso
231
+ # - FAILED: falhou, requer ajuste
232
+
233
+ # Depends_on:
234
+ # Lista outras tasks que devem completar ANTES desta
235
+ # Sem ciclos permitidos (A→B→A é inválido)
236
+
237
+ # Rank (automático):
238
+ # Calculado como: 1 + max(rank das dependências)
239
+ # Rank 1 = nenhuma dependência
240
+ # Rank N = executa após Rank N-1
241
+
242
+ # ============================
243
+ # INTEGRAÇÃO COM DARE WORKFLOW
244
+ # ============================
245
+
246
+ # Phase 1: DESIGN (você define requisitos)
247
+ # → Cria DARE/DESIGN.md
248
+ #
249
+ # Phase 2: ARCHITECT (Claude Code/Cursor propõe arquitetura)
250
+ # → Cria DARE/BLUEPRINT.md
251
+ # → Você aprova / ajusta
252
+ #
253
+ # Phase 3: REVIEW (Claude Code propõe tasks)
254
+ # → Cria DARE/dare-dag.yaml (este arquivo!)
255
+ # → Você aprova structure
256
+ #
257
+ # Phase 4: EXECUTE (Claude Code implementa)
258
+ # → Roda dare execute --ralph-loop
259
+ # → Testes automáticos (build, test, lint)
260
+ # → Abre PR / commit automático
261
+
262
+ # ============================
263
+ # REFERÊNCIAS
264
+ # ============================
265
+
266
+ # DARE Methodology: https://github.com/dewtech-technologies/dare-method
267
+ # Design Tokens (cores, fonts): docs/DESIGN-TOKENS-EXCALIDRAW.md
268
+ # Visualization: /dare-dag-viz (gera dag-graph.excalidraw)
269
+ # Excalidraw app: https://excalidraw.com
270
+
271
+ # ============================
272
+ # LICENÇA
273
+ # ============================
274
+
275
+ # Este arquivo e o método DARE são AGPL v3.
276
+ # Você é livre para usar, modificar, compartilhar.
277
+ # Contribuições voltam ao projeto.
278
+ #
279
+ # Créditos: Wanderson Leandro (Dewtech Technologies)
280
+ # Inspirações: Ralph Loop (termo original), Excalidraw (ferramenta)
@@ -0,0 +1,48 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "releases": {
4
+ "2.16.0": {
5
+ "releasedAt": "2026-05-10",
6
+ "summary": "Excalidraw DAG visualization",
7
+ "changelog": "Adiciona renderer Excalidraw para visualizar o DAG (tasks + dependências) em diagrama interativo.",
8
+ "changes": []
9
+ },
10
+ "2.17.0": {
11
+ "releasedAt": "2026-05-16",
12
+ "summary": "dare update + dare review + dare refine + Anti-Stub Contract",
13
+ "changelog": "Release grande, três frentes complementares que resolvem três problemas reais:\n\n## 1. `dare update` — sincronizar projeto com CLI\n\nDev atualiza o CLI globalmente (npm install -g @dewtech/dare-cli@latest) e roda `dare update` em cada projeto pra puxar templates / skills / commands novos — sem mexer em DESIGN, BLUEPRINT, TASKS, dare-dag.yaml. UPDATE-MANIFEST.json declarativo lista changes + migrations por release. Backup automático em `.dare/backup-<version>/`. Detecção de customizações por hash SHA-256 (keep / replace / force). Filtro por IDE configurado.\n\nFlags: `--dry-run`, `--yes`, `--force`, `--target <version>`.\n\n## 2. `dare review` + `dare refine` — Anti-stub gates\n\nProblema: tasks marcadas como DONE com código mockado, stubs, esqueletos de função, TODOs pendentes.\n\n`dare review <task-id>`:\n- Camada estática (regex): TODO/FIXME/XXX/HACK, throw new Error('not implemented'), unimplemented!(), todo!(), NotImplementedError, funções vazias, retorno-fantasma (return null como única statement), mocks fora de testes (jest.fn, vi.mock, sinon.stub, MagicMock), placeholders\n- Camada semântica (opt-in via `--from-agent <verdict.json>`): IDE agent valida critério-a-critério se implementação satisfaz spec\n- Skills `dare-review` (Claude Code), `review-task` (Cursor), `dare-review` (Antigravity) produzem o verdito semântico\n- Gate opt-in no Ralph Loop: `review.onComplete: true` no dare.config.json bloqueia `dare execute --complete` quando review falha\n\n`dare refine <task-id>`:\n- Heurística determinística de complexidade: # arquivos, # funções/endpoints, # testes, # deps, keywords pesadas (refactor/migrate/integrate)\n- Buckets LOW (0-5) / MED (6-12) / HIGH (13-20) / CRITICAL (21+); thresholds configuráveis em `refine.thresholds`\n- `--split` propõe quebra em sub-tasks agrupadas por diretório\n- Skills `dare-refine` (todas IDEs) produzem split semântico (por camada, por endpoint, por feature, refactor-then-feature, migration-then-code)\n\n## 3. Anti-Stub Contract nos prompts de geração\n\nBlueprint e Tasks agora forçam especificação executável: para cada endpoint, função pública, evento ou job — assinatura completa, request/response shape por status code, validações enumeradas, edge cases, side effects, exemplos concretos. TASK-SPEC-template ganha seção 'PADRÕES PROIBIDOS' explícita e Definition of Done anti-mock obrigatório.\n\n## 4. Mudanças de schema em `dare.config.json`\n\n- Campo `version` agora rastreia a release do DARE (antes era placeholder zombie `0.1.0`).\n- Novo objeto `review`: `{ onComplete: false, strict: false }` (opt-in pra projetos legados, on para novos).\n- Novo objeto `refine`: `{ thresholds: { low: 5, med: 12, high: 20 } }`.\n\nMigrações `unify-version-field` e `add-review-refine-defaults` cuidam de projetos pré-2.17 automaticamente.",
14
+ "changes": [
15
+ {
16
+ "type": "modified",
17
+ "path": "dare.config.json#version",
18
+ "description": "Campo `version` agora rastreia a release do DARE (antes era placeholder `0.1.0` zombie)",
19
+ "appliesTo": ["*"]
20
+ },
21
+ {
22
+ "type": "added",
23
+ "path": "dare.config.json#review",
24
+ "description": "Adiciona objeto `review` ({ onComplete, strict }) em dare.config.json — gate opt-in pré-DONE no Ralph Loop",
25
+ "appliesTo": ["*"]
26
+ },
27
+ {
28
+ "type": "added",
29
+ "path": "dare.config.json#refine",
30
+ "description": "Adiciona objeto `refine.thresholds` em dare.config.json para customizar buckets de complexidade",
31
+ "appliesTo": ["*"]
32
+ }
33
+ ],
34
+ "migrations": [
35
+ {
36
+ "id": "unify-version-field",
37
+ "description": "Migra `dareVersion` → `version` e substitui o placeholder legacy `0.1.0` por `2.16.0` quando necessário",
38
+ "optional": false
39
+ },
40
+ {
41
+ "id": "add-review-refine-defaults",
42
+ "description": "Adiciona `review: { onComplete: false, strict: false }` e `refine: { thresholds: ... }` em projetos pré-2.17 (opt-in — não ativa o gate automaticamente)",
43
+ "optional": false
44
+ }
45
+ ]
46
+ }
47
+ }
48
+ }
@@ -122,34 +122,90 @@ Crie um documento `DARE/BLUEPRINT.md` com a seguinte estrutura:
122
122
 
123
123
  ## Estrutura de Diretórios
124
124
 
125
+ > Mantenha esta seção **stack-agnóstica**. Liste os agrupamentos lógicos
126
+ > (domínio, infraestrutura, interfaces, testes, migrations) e use a
127
+ > nomenclatura **idiomática da stack escolhida** no `dare init`. Os exemplos
128
+ > abaixo cobrem as 5 stacks suportadas — use **apenas o bloco da stack do
129
+ > projeto**, não os 5 juntos.
130
+
131
+ <details>
132
+ <summary>Exemplo — Node.js / NestJS</summary>
133
+
134
+ ```
135
+ projeto/
136
+ ├── src/
137
+ │ ├── auth/
138
+ │ │ ├── auth.controller.ts
139
+ │ │ ├── auth.service.ts
140
+ │ │ ├── auth.module.ts
141
+ │ │ └── dto/{register,login}.dto.ts
142
+ │ ├── users/{users.entity.ts,users.service.ts}
143
+ │ └── main.ts
144
+ ├── migrations/{001_users.ts,002_refresh_tokens.ts}
145
+ └── test/auth.e2e-spec.ts
146
+ ```
147
+ </details>
148
+
149
+ <details>
150
+ <summary>Exemplo — Rust / Axum</summary>
151
+
152
+ ```
153
+ projeto/
154
+ ├── src/
155
+ │ ├── domain/{user.rs,refresh_token.rs}
156
+ │ ├── handlers/{register.rs,login.rs,refresh.rs,logout.rs}
157
+ │ ├── middleware/jwt.rs
158
+ │ └── main.rs
159
+ ├── migrations/{001_users.sql,002_refresh_tokens.sql}
160
+ └── tests/auth_integration.rs
161
+ ```
162
+ </details>
163
+
164
+ <details>
165
+ <summary>Exemplo — Python / FastAPI</summary>
166
+
125
167
  ```
126
168
  projeto/
127
169
  ├── app/
128
- │ ├── Models/
129
- ├── User.php
130
- │ └── RefreshToken.php
131
- │ ├── Http/
132
- │ ├── Controllers/
133
- │ │ │ └── AuthController.php
134
- │ │ ├── Requests/
135
- │ │ │ ├── RegisterRequest.php
136
- │ │ │ └── LoginRequest.php
137
- │ │ └── Resources/
138
- │ │ └── UserResource.php
139
- │ ├── Services/
140
- │ │ └── AuthService.php
141
- │ └── Exceptions/
142
- │ └── AuthException.php
143
- ├── database/
144
- │ └── migrations/
145
- │ ├── create_users_table.php
146
- │ └── create_refresh_tokens_table.php
147
- ├── routes/
148
- │ └── api.php
149
- └── tests/
150
- └── Feature/
151
- └── AuthTest.php
170
+ │ ├── routers/auth.py
171
+ │ ├── models/{user.py,refresh_token.py}
172
+ ├── schemas/{register.py,login.py}
173
+ │ ├── services/auth.py
174
+ └── main.py
175
+ ├── alembic/versions/{001_users.py,002_refresh_tokens.py}
176
+ └── tests/test_auth.py
152
177
  ```
178
+ </details>
179
+
180
+ <details>
181
+ <summary>Exemplo — PHP / Laravel</summary>
182
+
183
+ ```
184
+ projeto/
185
+ ├── app/Http/Controllers/AuthController.php
186
+ ├── app/Http/Requests/{RegisterRequest,LoginRequest}.php
187
+ ├── app/Models/{User,RefreshToken}.php
188
+ ├── app/Services/AuthService.php
189
+ ├── database/migrations/{create_users,create_refresh_tokens}_table.php
190
+ ├── routes/api.php
191
+ └── tests/Feature/AuthTest.php
192
+ ```
193
+ </details>
194
+
195
+ <details>
196
+ <summary>Exemplo — Go / Gin</summary>
197
+
198
+ ```
199
+ projeto/
200
+ ├── cmd/server/main.go
201
+ ├── internal/
202
+ │ ├── handlers/{register,login,refresh,logout}.go
203
+ │ ├── models/{user,refresh_token}.go
204
+ │ └── middleware/jwt.go
205
+ ├── migrations/{001_users.sql,002_refresh_tokens.sql}
206
+ └── handlers_test.go
207
+ ```
208
+ </details>
153
209
 
154
210
  ## Plano de Execução
155
211
 
@@ -175,26 +231,71 @@ projeto/
175
231
 
176
232
  ## Comandos de Setup
177
233
 
234
+ > Liste **somente os comandos da stack do projeto** (definida em
235
+ > `dare init` / `dare.config.json#backend`). Não inclua todos os blocos
236
+ > abaixo — use o que casa com a stack escolhida.
237
+
238
+ <details>
239
+ <summary>Node.js / NestJS</summary>
240
+
178
241
  ```bash
179
- # Instalar dependências
180
- composer install
242
+ npm install
243
+ cp .env.example .env
244
+ npm run migration:run
245
+ npm test
246
+ npm run start:dev
247
+ ```
248
+ </details>
249
+
250
+ <details>
251
+ <summary>Rust / Axum</summary>
181
252
 
182
- # Criar arquivo .env
253
+ ```bash
254
+ cargo build
183
255
  cp .env.example .env
184
- php artisan key:generate
256
+ sqlx migrate run
257
+ cargo test
258
+ cargo run
259
+ ```
260
+ </details>
185
261
 
186
- # Rodar migrations
187
- php artisan migrate
262
+ <details>
263
+ <summary>Python / FastAPI</summary>
188
264
 
189
- # Gerar JWT secret
190
- php artisan jwt:secret
265
+ ```bash
266
+ python -m venv .venv && source .venv/bin/activate
267
+ pip install -r requirements.txt
268
+ cp .env.example .env
269
+ alembic upgrade head
270
+ pytest
271
+ uvicorn app.main:app --reload
272
+ ```
273
+ </details>
191
274
 
192
- # Rodar testes
193
- php artisan test
275
+ <details>
276
+ <summary>PHP / Laravel</summary>
194
277
 
195
- # Iniciar servidor
278
+ ```bash
279
+ composer install
280
+ cp .env.example .env
281
+ php artisan key:generate
282
+ php artisan migrate
283
+ php artisan test
196
284
  php artisan serve
197
285
  ```
286
+ </details>
287
+
288
+ <details>
289
+ <summary>Go / Gin</summary>
290
+
291
+ ```bash
292
+ go mod download
293
+ cp .env.example .env
294
+ migrate -path ./migrations -database "$DATABASE_URL" up
295
+ go test ./...
296
+ go run ./cmd/server
297
+ ```
298
+ </details>
198
299
 
199
300
  ## Próximas Etapas
200
301
  1. Revisar e aprovar este Blueprint
@@ -202,7 +303,50 @@ php artisan serve
202
303
  3. Continuar com o Método DARE
203
304
  ```
204
305
 
205
- ### Passo 5: Pedir Aprovação
306
+ ### Passo 5: Aplicar ANTI-STUB CONTRACT (regra inegociável)
307
+
308
+ > **Por que existe esta regra:** a skill `dare-tasks` que vem depois usa este Blueprint como **única fonte de verdade**. Se um endpoint, função ou regra ficar genérico aqui, o agente que implementar a task **será forçado a inventar** — e vai produzir mocks, stubs e esqueletos para "preencher o vazio". Detalhe agora.
309
+ >
310
+ > Tasks que produzem mock/stub/skeleton **falham** no `dare review` (v2.17+) e bloqueiam o `dare execute --complete`.
311
+
312
+ Para **cada** endpoint, função pública, evento ou job declarado no Blueprint, especifique de forma **executável**:
313
+
314
+ **Endpoints HTTP/RPC:**
315
+ - Assinatura completa (método, path, headers obrigatórios, content-type)
316
+ - Request schema (todos os campos com tipo, restrições, opcionalidade)
317
+ - Response schema **por status code** (2xx, 4xx, 5xx — não só "200 OK")
318
+ - Validações server-side (lista exaustiva: `email único`, `senha ≥ 8 chars + maiúscula + dígito`)
319
+ - Edge cases enumerados (input vazio, duplicado, expirado, sem permissão)
320
+ - Side effects (tabelas/filas/caches/emails tocados, em ordem)
321
+ - Exemplo concreto (payload real, response real — não placeholder)
322
+
323
+ **Funções de domínio / services:**
324
+ - Assinatura tipada (`fn name(args: Types) -> ReturnType`)
325
+ - Pré-condições e pós-condições verificáveis
326
+ - Estados de erro com tipo de exceção/Result esperado
327
+ - Comportamento em concorrência (idempotência, locking, retry)
328
+
329
+ **Jobs / event handlers / workers:**
330
+ - Trigger (evento/cron/fila — nome canônico)
331
+ - Payload schema tipado
332
+ - Retry policy (backoff, max attempts, DLQ)
333
+ - Idempotência (chave + estratégia)
334
+
335
+ **Modelos de dados:**
336
+ - Cada campo com tipo, nullable, default, constraints (unique, fk, check), índices
337
+ - Triggers ou hooks (soft-delete, audit, encryption-at-rest)
338
+
339
+ **Critério "Blueprint detalhado o suficiente"** (auto-validação antes de salvar):
340
+
341
+ - [ ] Para cada endpoint, um humano não-familiarizado consegue escrever request/response sem perguntar nada?
342
+ - [ ] Para cada função pública, está claro **o que retorna** em todos os caminhos (sucesso + erros enumerados)?
343
+ - [ ] Edge cases foram **enumerados** ou só listados como "tratar edge cases"?
344
+ - [ ] Cada validação tem uma regra concreta (não só "validar email")?
345
+ - [ ] Cada decisão arquitetural tem **justificativa** (não só "escolhemos X")?
346
+
347
+ **Anti-padrão a evitar:** seções como _"implementar autenticação"_ ou _"validar dados"_ — isso vira stub. Especifique algoritmo, campos, regras.
348
+
349
+ ### Passo 6: Pedir Aprovação
206
350
  Após gerar o Blueprint, peça ao usuário:
207
351
  - Revisar a arquitetura
208
352
  - Aprovar endpoints e modelos
@@ -0,0 +1,114 @@
1
+ ---
2
+ name: dare-refine
3
+ description: Analisa complexidade de uma task DARE e, quando alta, quebra em sub-tasks menores. Use após gerar o DAG (para tasks HIGH/CRITICAL), quando o dev pedir refinamento manual, ou quando o escopo mudou e uma task ficou grande. Combina heurística determinística (CLI) com decisão semântica do agente.
4
+ ---
5
+
6
+ # DARE Refine Skill
7
+
8
+ Você é o refinador de tasks do método DARE. Seu papel é garantir que cada task caiba em uma conversa única do agente — sem ficar tão grande que o agente "invente" stubs/mocks pra completar.
9
+
10
+ ## Quando usar
11
+
12
+ - Após `dare-tasks` gerar o DAG, para cada task com complexity HIGH no `dare-dag.yaml`
13
+ - Quando o dev pede: "refine task-034"
14
+ - Quando o BLUEPRINT mudou e uma task ficou grande demais
15
+
16
+ ## Camada determinística vs semântica
17
+
18
+ O CLI `dare refine <id>` já mede sinais objetivos: # arquivos, # funções, # testes, # dependências, keywords pesadas. Esta skill faz a camada semântica — você lê o conteúdo da spec e decide se faz sentido quebrar.
19
+
20
+ ## Como executar
21
+
22
+ ### Passo 1: Rodar a heurística determinística
23
+
24
+ ```bash
25
+ dare refine <task-id> --split --format json > .dare/refine-<task-id>.json
26
+ ```
27
+
28
+ JSON traz:
29
+ - `report.score`, `report.level`
30
+ - `report.signals` — explica a pontuação
31
+ - `report.recommendsSplit` — true se HIGH/CRITICAL
32
+ - `proposal.subtasks` — quebra inicial coarse
33
+
34
+ ### Passo 2: Decidir se quebra
35
+
36
+ **Quebrar quando:**
37
+ - `recommendsSplit: true` (HIGH/CRITICAL)
38
+ - Mais de 6 arquivos
39
+ - Mistura responsabilidades (modelo + controller + teste + migration)
40
+ - Inclui refactor + feature juntos
41
+ - Keyword "pesada" + score MED+
42
+
43
+ **Manter inteira quando:**
44
+ - LOW ou MED baixo
45
+ - Mesmo módulo
46
+ - Cabe em uma conversa (15–60 min)
47
+
48
+ ### Passo 3: Eixos de split
49
+
50
+ | Eixo | Quando |
51
+ |---|---|
52
+ | **Por camada** | Modelo / Controller / Service / Test separados |
53
+ | **Por endpoint** | 4 endpoints → 4 sub-tasks |
54
+ | **Por feature** | Auth = register + login → split por verbo |
55
+ | **Refactor + feature** | "1. refactor" + "2. feature em cima" |
56
+ | **Migration + código** | "1. migration" + "2. código novo" |
57
+
58
+ Cada sub-task:
59
+ - `subtask_prompt` auto-suficiente (Anti-Stub Contract!)
60
+ - Spec própria em `DARE/EXECUTION/<sub-id>.md`
61
+ - `depends_on` mínimo mas correto
62
+ - Complexity honesta — se sub ainda for HIGH, quebrar de novo
63
+
64
+ ### Passo 4: Verdito
65
+
66
+ `.dare/refine-verdict-<task-id>.json`:
67
+
68
+ ```json
69
+ {
70
+ "manageable": false,
71
+ "reasons": ["Score 18 (HIGH) — 7 endpoints + migration", "Mistura refactor com features novas"],
72
+ "proposedSubtasks": [
73
+ {
74
+ "id": "task-034a",
75
+ "title": "Refactor UserService",
76
+ "files": ["src/services/UserService.ts", "tests/services/UserService.test.ts"],
77
+ "rationale": "Refactor isolado antes da feature",
78
+ "estimatedLevel": "MED"
79
+ }
80
+ ]
81
+ }
82
+ ```
83
+
84
+ Manuseável:
85
+
86
+ ```json
87
+ {
88
+ "manageable": true,
89
+ "reasons": ["Score 7 (MED), 4 arquivos mesmo módulo"]
90
+ }
91
+ ```
92
+
93
+ ### Passo 5: Aplicar o split
94
+
95
+ 1. Editar `DARE/dare-dag.yaml` substituindo a task pelas sub-tasks
96
+ 2. Criar specs em `DARE/EXECUTION/<sub-id>.md` (template + Anti-Stub Contract)
97
+ 3. Atualizar `DARE/TASKS.md` (visão humana)
98
+ 4. Regenerar Mermaid: `dare dag viz -o DARE/dag-graph.mmd`
99
+ 5. Marcar task original como SPLIT (preservar histórico)
100
+
101
+ ### Passo 6: Mensagem
102
+
103
+ Manuseável:
104
+ > ✅ Task bem-dimensionada (score X, level Y). Sem split.
105
+
106
+ Quebrada:
107
+ > 🪓 Task quebrada em N sub-tasks: [lista]. Revise com `dare validate` e `dare dag viz`.
108
+
109
+ ## Regras inegociáveis
110
+
111
+ - Não quebrar tasks LOW
112
+ - Não inventar dependências falsas
113
+ - Cada sub-task testável independentemente
114
+ - Anti-Stub Contract aplica em cada sub-task