@dewtech/dare-cli 2.16.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.
- package/README.md +98 -0
- package/dist/__tests__/refine.test.d.ts +2 -0
- package/dist/__tests__/refine.test.d.ts.map +1 -0
- package/dist/__tests__/refine.test.js +186 -0
- package/dist/__tests__/refine.test.js.map +1 -0
- package/dist/__tests__/review.test.d.ts +2 -0
- package/dist/__tests__/review.test.d.ts.map +1 -0
- package/dist/__tests__/review.test.js +242 -0
- package/dist/__tests__/review.test.js.map +1 -0
- package/dist/__tests__/update.test.d.ts +2 -0
- package/dist/__tests__/update.test.d.ts.map +1 -0
- package/dist/__tests__/update.test.js +150 -0
- package/dist/__tests__/update.test.js.map +1 -0
- package/dist/bin/dare.js +6 -0
- package/dist/bin/dare.js.map +1 -1
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +76 -0
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/refine.d.ts +16 -0
- package/dist/commands/refine.d.ts.map +1 -0
- package/dist/commands/refine.js +167 -0
- package/dist/commands/refine.js.map +1 -0
- package/dist/commands/review.d.ts +16 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +106 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/update.d.ts +13 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +149 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/types/Refine.types.d.ts +96 -0
- package/dist/types/Refine.types.d.ts.map +1 -0
- package/dist/types/Refine.types.js +19 -0
- package/dist/types/Refine.types.js.map +1 -0
- package/dist/types/Review.types.d.ts +86 -0
- package/dist/types/Review.types.d.ts.map +1 -0
- package/dist/types/Review.types.js +15 -0
- package/dist/types/Review.types.js.map +1 -0
- package/dist/types/UpdateManifest.types.d.ts +91 -0
- package/dist/types/UpdateManifest.types.d.ts.map +1 -0
- package/dist/types/UpdateManifest.types.js +13 -0
- package/dist/types/UpdateManifest.types.js.map +1 -0
- package/dist/utils/ReviewRunner.d.ts +42 -0
- package/dist/utils/ReviewRunner.d.ts.map +1 -0
- package/dist/utils/ReviewRunner.js +175 -0
- package/dist/utils/ReviewRunner.js.map +1 -0
- package/dist/utils/UpdateApplier.d.ts +42 -0
- package/dist/utils/UpdateApplier.d.ts.map +1 -0
- package/dist/utils/UpdateApplier.js +207 -0
- package/dist/utils/UpdateApplier.js.map +1 -0
- package/dist/utils/UpdateDetector.d.ts +56 -0
- package/dist/utils/UpdateDetector.d.ts.map +1 -0
- package/dist/utils/UpdateDetector.js +164 -0
- package/dist/utils/UpdateDetector.js.map +1 -0
- package/dist/utils/complexity-analyzer.d.ts +60 -0
- package/dist/utils/complexity-analyzer.d.ts.map +1 -0
- package/dist/utils/complexity-analyzer.js +292 -0
- package/dist/utils/complexity-analyzer.js.map +1 -0
- package/dist/utils/project-generator.d.ts.map +1 -1
- package/dist/utils/project-generator.js +21 -2
- package/dist/utils/project-generator.js.map +1 -1
- package/dist/utils/static-analyzer.d.ts +29 -0
- package/dist/utils/static-analyzer.d.ts.map +1 -0
- package/dist/utils/static-analyzer.js +390 -0
- package/dist/utils/static-analyzer.js.map +1 -0
- package/dist/utils/version-compare.d.ts +27 -0
- package/dist/utils/version-compare.d.ts.map +1 -0
- package/dist/utils/version-compare.js +47 -0
- package/dist/utils/version-compare.js.map +1 -0
- package/package.json +1 -1
- package/templates/UPDATE-MANIFEST.json +48 -0
- package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +180 -36
- package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -0
- package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -0
- package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +41 -0
- package/templates/ide/antigravity/templates/TASK-SPEC-template.md +45 -4
- package/templates/ide/claude/.claude/commands/dare-blueprint.md +56 -0
- package/templates/ide/claude/.claude/commands/dare-dag-build.md +41 -0
- package/templates/ide/claude/.claude/commands/dare-refine.md +145 -0
- package/templates/ide/claude/.claude/commands/dare-review.md +113 -0
- package/templates/ide/claude/templates/TASK-SPEC-template.md +45 -4
- package/templates/ide/cursor/.cursor/commands/generate-blueprint.md +45 -0
- package/templates/ide/cursor/.cursor/commands/generate-tasks.md +42 -0
- package/templates/ide/cursor/.cursor/commands/refine-task.md +107 -0
- package/templates/ide/cursor/.cursor/commands/review-task.md +91 -0
- package/templates/ide/cursor/templates/TASK-SPEC-template.md +45 -4
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Comando: /refine-task
|
|
2
|
+
|
|
3
|
+
## Descrição
|
|
4
|
+
|
|
5
|
+
Analisa a complexidade de uma task e, quando alta, **quebra em sub-tasks menores** com escopo bem delimitado. Pode ser chamada:
|
|
6
|
+
|
|
7
|
+
- Automaticamente pela skill `/generate-tasks` após gerar o DAG (para cada task ≥ MED)
|
|
8
|
+
- Manualmente pelo dev: `/refine-task task-034`
|
|
9
|
+
- Após mudança de escopo: quando o BLUEPRINT mudou e uma task ficou grande
|
|
10
|
+
|
|
11
|
+
A camada determinística (heurística de complexidade) é feita pelo CLI: `dare refine <id>`. Este comando adiciona a camada **semântica** — você lê a spec, decide se a quebra é necessária e produz sub-tasks coerentes.
|
|
12
|
+
|
|
13
|
+
## Instruções para o Cursor Composer
|
|
14
|
+
|
|
15
|
+
### 1. Rodar a heurística determinística
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
dare refine $ARGUMENTS --split --format json > .dare/refine-$ARGUMENTS.json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Esse JSON traz:
|
|
22
|
+
- `report.score`, `report.level` (LOW/MED/HIGH/CRITICAL)
|
|
23
|
+
- `report.signals` — explica a pontuação
|
|
24
|
+
- `report.recommendsSplit` — true se HIGH/CRITICAL
|
|
25
|
+
- `proposal.subtasks` — quebra inicial coarse (por diretório)
|
|
26
|
+
|
|
27
|
+
### 2. Decidir se vale quebrar
|
|
28
|
+
|
|
29
|
+
**Quebrar quando:**
|
|
30
|
+
- `recommendsSplit: true` (HIGH/CRITICAL)
|
|
31
|
+
- Mais de 6 arquivos a criar/modificar
|
|
32
|
+
- Mistura responsabilidades (modelo + controller + teste + migration)
|
|
33
|
+
- Inclui refactor + feature juntos
|
|
34
|
+
- Keyword "pesada" (refactor/migrate/integrate) + score MED+
|
|
35
|
+
|
|
36
|
+
**Manter inteira quando:**
|
|
37
|
+
- LOW ou MED baixo
|
|
38
|
+
- Todos arquivos no mesmo módulo
|
|
39
|
+
- Cabe em uma conversa do Composer (15–60 min)
|
|
40
|
+
|
|
41
|
+
### 3. Se quebrar — eixos de split
|
|
42
|
+
|
|
43
|
+
| Eixo | Quando |
|
|
44
|
+
|---|---|
|
|
45
|
+
| **Por camada** | Modelo / Controller / Service / Test separados |
|
|
46
|
+
| **Por endpoint** | 4 endpoints REST → 4 sub-tasks |
|
|
47
|
+
| **Por feature** | Auth = register + login + refresh → split por verbo |
|
|
48
|
+
| **Refactor + feature** | "1. refactor X" + "2. feature Y em cima" |
|
|
49
|
+
| **Migration + código** | "1. migration + seeds" + "2. código novo" |
|
|
50
|
+
|
|
51
|
+
Cada sub-task precisa de:
|
|
52
|
+
- `subtask_prompt` auto-suficiente (Anti-Stub Contract!)
|
|
53
|
+
- spec própria em `DARE/EXECUTION/<sub-id>.md`
|
|
54
|
+
- `depends_on` mínimo mas correto
|
|
55
|
+
- complexity honesta — se sub ainda for HIGH, quebrar de novo
|
|
56
|
+
|
|
57
|
+
### 4. Emitir verdito
|
|
58
|
+
|
|
59
|
+
`.dare/refine-verdict-$ARGUMENTS.json`:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"manageable": false,
|
|
64
|
+
"reasons": ["Score 18 (HIGH) — 7 endpoints + migration", "Mistura refactor com features novas"],
|
|
65
|
+
"proposedSubtasks": [
|
|
66
|
+
{
|
|
67
|
+
"id": "task-034a",
|
|
68
|
+
"title": "Refactor UserService",
|
|
69
|
+
"files": ["src/services/UserService.ts", "tests/services/UserService.test.ts"],
|
|
70
|
+
"rationale": "Refactor isolado antes da feature",
|
|
71
|
+
"estimatedLevel": "MED"
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Se manuseável:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"manageable": true,
|
|
82
|
+
"reasons": ["Score 7 (MED), 4 arquivos mesmo módulo, 6 testes"]
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 5. Aplicar o split
|
|
87
|
+
|
|
88
|
+
1. Edite `DARE/dare-dag.yaml` substituindo a task pelas sub-tasks
|
|
89
|
+
2. Crie as specs em `DARE/EXECUTION/<sub-id>.md` (template + Anti-Stub Contract)
|
|
90
|
+
3. Atualize `DARE/TASKS.md` (visão humana)
|
|
91
|
+
4. Regenere Mermaid: `dare dag viz -o DARE/dag-graph.mmd`
|
|
92
|
+
5. Marque a task original como SPLIT no TASKS.md
|
|
93
|
+
|
|
94
|
+
### 6. Mensagem ao usuário
|
|
95
|
+
|
|
96
|
+
Manuseável:
|
|
97
|
+
> ✅ Task `$ARGUMENTS` está bem-dimensionada (score X, level Y). Sem split.
|
|
98
|
+
|
|
99
|
+
Quebrada:
|
|
100
|
+
> 🪓 Task `$ARGUMENTS` quebrada em N sub-tasks: [lista]. Revise com `dare validate` e `dare dag viz`.
|
|
101
|
+
|
|
102
|
+
## Regras inegociáveis
|
|
103
|
+
|
|
104
|
+
- Não quebrar tasks LOW
|
|
105
|
+
- Não inventar dependências falsas
|
|
106
|
+
- Cada sub-task testável independentemente
|
|
107
|
+
- Anti-Stub Contract aplica em cada sub-task
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Comando: /review-task
|
|
2
|
+
|
|
3
|
+
## Descrição
|
|
4
|
+
|
|
5
|
+
Audita uma task **implementada** cruzando a spec (`DARE/EXECUTION/<id>.md`) com os arquivos reais que ela tocou. Detecta stubs, mocks fora de testes, funções vazias, TODOs, retorno-fantasma — **e** valida critério-a-critério se a implementação satisfaz o que a spec prometeu.
|
|
6
|
+
|
|
7
|
+
Esta é a camada **semântica** do review. A camada estática (regex / patterns) já é feita automaticamente pelo CLI quando você roda `dare review <task-id>`. Este comando combina as duas: rode a estática via CLI, gere um verdito semântico aqui, e produza um relatório fundido.
|
|
8
|
+
|
|
9
|
+
## Quando rodar
|
|
10
|
+
|
|
11
|
+
- Antes de marcar uma task como DONE (gate obrigatório no Definition of Done do TASK-SPEC)
|
|
12
|
+
- Quando o `dare review <id>` estático passa mas você quer validação adicional contra a spec
|
|
13
|
+
- Quando o dev pede revisão manual: `/review-task task-034`
|
|
14
|
+
|
|
15
|
+
## Instruções para o Cursor Composer
|
|
16
|
+
|
|
17
|
+
### 1. Validar argumento
|
|
18
|
+
|
|
19
|
+
`$ARGUMENTS` deve conter o `task-id`. Se vazio, peça.
|
|
20
|
+
|
|
21
|
+
### 2. Rodar a camada estática primeiro
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
dare review $ARGUMENTS --format json > .dare/review-static-$ARGUMENTS.json
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Leia esse JSON. Se houver erros estáticos, reporte-os e pergunte se quer prosseguir com a análise semântica (geralmente não vale — corrija primeiro).
|
|
28
|
+
|
|
29
|
+
### 3. Carregar contexto
|
|
30
|
+
|
|
31
|
+
- `DARE/EXECUTION/$ARGUMENTS.md` — spec
|
|
32
|
+
- Cada arquivo listado na seção 3 da spec
|
|
33
|
+
- `DARE/BLUEPRINT.md` — contratos referenciados
|
|
34
|
+
|
|
35
|
+
### 4. Auditoria critério-a-critério
|
|
36
|
+
|
|
37
|
+
Para **cada** item das seções abaixo da spec, marque ✅ / ❌ com evidência (arquivo + linha):
|
|
38
|
+
|
|
39
|
+
- **4.1 Objetivo (seção 1):** estado observável foi atingido?
|
|
40
|
+
- **4.2 Arquivos (seção 3):** todos existem com conteúdo descrito? Há arquivos extras suspeitos?
|
|
41
|
+
- **4.3 Implementação (seção 4):** cada passo executado? assinaturas exatas? validações com regras concretas (não "valida email" — a regex específica)?
|
|
42
|
+
- **4.4 Testes:** cada teste listado existe? Tem assertions reais? Edge cases cobertos?
|
|
43
|
+
- **4.5 Segurança (seção 5):** input validation, autorização, secrets, SQL injection — tudo conforme spec?
|
|
44
|
+
- **4.6 Anti-Stub (seção 7):** a camada estática já checou — só anote se você encontrar algo que regex não pegaria (ex.: dados hardcoded disfarçados de "do banco").
|
|
45
|
+
|
|
46
|
+
### 5. Emitir verdito semântico
|
|
47
|
+
|
|
48
|
+
Salve em `.dare/review-semantic-$ARGUMENTS.json`:
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"passed": true,
|
|
53
|
+
"unmetCriteria": [],
|
|
54
|
+
"notes": "Resumo de 1-3 frases do que foi verificado"
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Se algo falhou:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"passed": false,
|
|
63
|
+
"unmetCriteria": [
|
|
64
|
+
"Seção 4.3: validação de senha não implementa regex de força",
|
|
65
|
+
"Seção 4.4: teste de 'email duplicado' não existe"
|
|
66
|
+
],
|
|
67
|
+
"notes": "2 critérios não atendidos em src/auth/register.ts"
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 6. Rodar o review fundido
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
dare review $ARGUMENTS --from-agent .dare/review-semantic-$ARGUMENTS.json
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Exit code 0 = task pode ir para DONE; 1 = não pode.
|
|
78
|
+
|
|
79
|
+
### 7. Mensagem final
|
|
80
|
+
|
|
81
|
+
Se passou:
|
|
82
|
+
> ✅ Task `$ARGUMENTS` aprovada. Marque como DONE: `dare execute --complete $ARGUMENTS`
|
|
83
|
+
|
|
84
|
+
Se falhou:
|
|
85
|
+
> ❌ Task `$ARGUMENTS` não passou. Itens a corrigir: [lista]. Após corrigir, rode `/review-task $ARGUMENTS` novamente.
|
|
86
|
+
|
|
87
|
+
## Regras inegociáveis
|
|
88
|
+
|
|
89
|
+
- **Não invente** que algo está implementado se você não viu o código.
|
|
90
|
+
- **Não aceite** mocks/stubs em código de produção mesmo que "façam o teste passar".
|
|
91
|
+
- **Mocks são OK** dentro de `*.test.*`, `*.spec.*`, `__tests__/`, `tests/`, `spec/`.
|
|
@@ -85,16 +85,57 @@ Execute **todos** antes de marcar a task como DONE. Se qualquer um falhar, leia
|
|
|
85
85
|
|
|
86
86
|
---
|
|
87
87
|
|
|
88
|
-
## 7.
|
|
88
|
+
## 7. PADRÕES PROIBIDOS (ANTI-STUB / ANTI-MOCK)
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
> Esta seção é **inegociável**. O comando `dare review` (v2.17+) escaneia o código modificado por esta task e reprova se encontrar qualquer padrão abaixo.
|
|
91
|
+
|
|
92
|
+
### Em código de produção (qualquer arquivo **fora** de `*.test.*`, `*.spec.*`, `__tests__/`, `tests/`, `spec/`)
|
|
93
|
+
|
|
94
|
+
- ❌ **TODO / FIXME / XXX / HACK** — qualquer um desses marcadores em comentário
|
|
95
|
+
- ❌ **Função vazia** — `fn x() {}`, `function x() {}`, `def x(): pass`, `def x(): ...`
|
|
96
|
+
- ❌ **Stub explícito** — `throw new Error('not implemented')`, `unimplemented!()`, `todo!()`, `raise NotImplementedError`
|
|
97
|
+
- ❌ **Retorno-fantasma** — `return null` / `return undefined` / `return {}` / `return []` como **única** statement de função pública declarada nesta task
|
|
98
|
+
- ❌ **Mocks fora de testes** — `jest.fn()`, `sinon.stub()`, `mockReturnValue`, dados hardcoded fingindo ser do banco, fixtures injetadas em controllers/services
|
|
99
|
+
- ❌ **Comentário de placeholder** — `// implement later`, `# placeholder`, `// stub`, `// FIXME implement`
|
|
100
|
+
|
|
101
|
+
### Mocks são permitidos APENAS em
|
|
102
|
+
|
|
103
|
+
- Arquivos de teste (`*.test.*`, `*.spec.*`, `__tests__/`, `tests/`, `spec/`)
|
|
104
|
+
- Seeds / fixtures dentro de `database/seeders/`, `tests/fixtures/`
|
|
105
|
+
- Helpers explicitamente marcados como auxiliares de teste
|
|
106
|
+
|
|
107
|
+
### Verificação automática
|
|
108
|
+
|
|
109
|
+
Antes de marcar a task como DONE, rode:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
dare review <task-id>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Output esperado:
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
✅ task-XYZ: nenhum padrão proibido detectado em N arquivos modificados.
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Se a review falhar, a task **não pode** ir para DONE — corrija os achados e re-rode.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 8. CRITÉRIOS DE DONE
|
|
126
|
+
|
|
127
|
+
- [ ] Todos os 4 validation gates passaram sem erros (build + test + lint + audit)
|
|
128
|
+
- [ ] Testes cobrem caminho feliz + erros enumerados + edge cases da seção 4
|
|
92
129
|
- [ ] Considerações de segurança da seção 5 todas checadas
|
|
93
130
|
- [ ] Arquivos listados na seção 3 criados/modificados conforme spec
|
|
131
|
+
- [ ] **`dare review <task-id>` passou** (seção 7 — sem stubs, mocks, TODOs)
|
|
132
|
+
- [ ] Cada validação declarada na spec tem teste demonstrando o erro real (não placeholder)
|
|
133
|
+
- [ ] Cada edge case enumerado tem teste cobrindo
|
|
134
|
+
- [ ] Endpoints retornam dados reais do banco/service, não hardcoded
|
|
94
135
|
- [ ] `DARE/TASKS.md` atualizado com status `DONE`
|
|
95
136
|
|
|
96
137
|
---
|
|
97
138
|
|
|
98
|
-
##
|
|
139
|
+
## 9. PRÓXIMA TASK SUGERIDA
|
|
99
140
|
|
|
100
141
|
`[task-id]` — [título] _(desbloqueada após conclusão desta task)_
|