@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,113 @@
1
+ # Comando: /dare-review
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: `/dare-review task-034`
14
+
15
+ ## Como executar
16
+
17
+ ### 1. Validar argumento
18
+
19
+ `$ARGUMENTS` deve conter o `task-id` (ex.: `task-034`). 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 já houver erros estáticos, **reporte-os primeiro** e pergunte se quer prosseguir com a análise semântica mesmo assim (geralmente não vale — corrige os erros estáticos antes).
28
+
29
+ ### 3. Carregar contexto
30
+
31
+ - `DARE/EXECUTION/$ARGUMENTS.md` — spec da task
32
+ - Cada arquivo listado na seção 3 da spec ("ARQUIVOS A CRIAR / MODIFICAR")
33
+ - `DARE/BLUEPRINT.md` — contratos de API / modelos referenciados
34
+
35
+ ### 4. Auditoria critério-a-critério
36
+
37
+ Para **cada** item nas seções abaixo da spec, marque ✅ / ❌:
38
+
39
+ #### 4.1 Objetivo (seção 1)
40
+ A implementação atinge o estado observável que a seção 1 promete? Encontre **evidência concreta** (arquivo + linha) ou marque como não atendido.
41
+
42
+ #### 4.2 Arquivos a criar / modificar (seção 3)
43
+ - Todos os arquivos da tabela existem com o conteúdo descrito?
44
+ - Há arquivos não listados que deveriam estar lá?
45
+
46
+ #### 4.3 Implementação (seção 4)
47
+ - Cada passo numerado foi executado?
48
+ - Assinaturas exatas correspondem ao que a spec pede?
49
+ - Validações implementadas correspondem às regras descritas (não "valida email" — a regex específica)?
50
+
51
+ #### 4.4 Testes (seção 4, subitem)
52
+ Para cada teste listado:
53
+ - Existe um teste com nome correspondente?
54
+ - O teste tem **assertions reais** que validariam o comportamento (não `expect(true).toBe(true)`)?
55
+ - Edge cases enumerados têm cobertura?
56
+
57
+ #### 4.5 Segurança (seção 5)
58
+ - Input validation cobre o que a spec lista?
59
+ - Não há secrets/tokens hardcoded?
60
+ - SQL/Command injection mitigado via ORM / prepared statements?
61
+
62
+ #### 4.6 Padrões Proibidos (seção 7 — ANTI-STUB)
63
+ A camada estática já checou. **Não duplique** — só anote se você encontrar algo que o regex não pegaria (ex.: dados hardcoded que parecem reais mas vêm de uma constante embutida no controller).
64
+
65
+ ### 5. Emitir o verdito semântico
66
+
67
+ Salve em `.dare/review-semantic-$ARGUMENTS.json`:
68
+
69
+ ```json
70
+ {
71
+ "passed": true,
72
+ "unmetCriteria": [],
73
+ "notes": "Resumo de 1-3 frases do que foi verificado"
74
+ }
75
+ ```
76
+
77
+ Se algo falhou:
78
+
79
+ ```json
80
+ {
81
+ "passed": false,
82
+ "unmetCriteria": [
83
+ "Seção 4.3: validação de senha não implementa regex de força (≥8 chars + maiúscula + dígito)",
84
+ "Seção 4.4: teste de edge case 'email duplicado' não existe"
85
+ ],
86
+ "notes": "2 critérios não atendidos em src/auth/register.ts e tests/auth.test.ts"
87
+ }
88
+ ```
89
+
90
+ ### 6. Rodar o review fundido
91
+
92
+ ```bash
93
+ dare review $ARGUMENTS --from-agent .dare/review-semantic-$ARGUMENTS.json
94
+ ```
95
+
96
+ O CLI vai fundir estática + semântica e exibir o relatório final. Exit code 0 = task pode ir para DONE; exit code 1 = não pode.
97
+
98
+ ### 7. Mensagem final ao usuário
99
+
100
+ Se passou:
101
+ > ✅ Task `$ARGUMENTS` aprovada na review. Pode marcar como DONE: `dare execute --complete $ARGUMENTS`
102
+
103
+ Se falhou:
104
+ > ❌ Task `$ARGUMENTS` não passou na review. Itens a corrigir:
105
+ > [lista de unmetCriteria + violations estáticas]
106
+ >
107
+ > Após corrigir, rode `/dare-review $ARGUMENTS` novamente.
108
+
109
+ ## Regras inegociáveis
110
+
111
+ - **Não invente** que algo está implementado se você não viu o código. Se um arquivo não existe, isso é `unmetCriteria`.
112
+ - **Não aceite** mocks/stubs em código de produção mesmo que "façam o teste passar". Eles violam o Anti-Stub Contract.
113
+ - **Mocks são OK** dentro de `*.test.*`, `*.spec.*`, `__tests__/`, `tests/`, `spec/` — a camada estática já distingue.
@@ -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. CRITÉRIOS DE DONE
88
+ ## 7. PADRÕES PROIBIDOS (ANTI-STUB / ANTI-MOCK)
89
89
 
90
- - [ ] Todos os 4 validation gates passaram sem erros
91
- - [ ] Testes cobrem caminho feliz + erros + edge cases da seção 4
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
- ## 8. PRÓXIMA TASK SUGERIDA
139
+ ## 9. PRÓXIMA TASK SUGERIDA
99
140
 
100
141
  `[task-id]` — [título] _(desbloqueada após conclusão desta task)_
@@ -34,6 +34,51 @@ Avança o DARE para a fase Architect: lê `DARE/DESIGN.md` aprovado e gera **som
34
34
  - **Estratégia de Deploy** — por ambiente
35
35
  - **Checklist de Aprovação** — checkboxes para revisão humana
36
36
 
37
+ ---
38
+
39
+ ### 🚫 ANTI-STUB CONTRACT (regra inegociável)
40
+
41
+ > **Por que existe esta seção:** o `/generate-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.
42
+ >
43
+ > Tasks que produzem mock/stub/skeleton **falham** no `dare review` (v2.17+) e bloqueiam o `dare execute --complete`.
44
+
45
+ Para **cada** endpoint, função pública, evento ou job declarado no Blueprint, especifique de forma **executável**:
46
+
47
+ **Endpoints HTTP/RPC:**
48
+ - Assinatura completa (método, path, headers, content-type)
49
+ - Request schema (campos, tipos, restrições, opcionalidade)
50
+ - Response schema **por status code** (2xx, 4xx, 5xx)
51
+ - Validações server-side (lista exaustiva — `email único`, `senha ≥ 8 chars + maiúscula + dígito`)
52
+ - Edge cases enumerados (input vazio, duplicado, expirado, sem permissão)
53
+ - Side effects (tabelas/filas/caches/emails tocados — em ordem)
54
+ - Exemplo concreto (payload real, response real — não placeholder)
55
+
56
+ **Funções de domínio / services:**
57
+ - Assinatura tipada (`fn name(args: Types) -> ReturnType`)
58
+ - Pré-condições e pós-condições verificáveis
59
+ - Estados de erro com tipo de exceção esperado
60
+ - Comportamento em concorrência (idempotência, locking, retry)
61
+
62
+ **Jobs / event handlers / workers:**
63
+ - Trigger (evento, cron, fila — nome canônico)
64
+ - Payload schema tipado
65
+ - Retry policy (backoff, max attempts, DLQ)
66
+ - Idempotência (chave + estratégia)
67
+
68
+ **Modelos de dados:**
69
+ - Cada campo: tipo, nullable, default, constraints (unique, fk, check), índices
70
+ - Triggers / hooks (soft-delete, audit, encryption-at-rest)
71
+
72
+ **Critério de "Blueprint detalhado o suficiente"** (auto-validação antes de salvar):
73
+
74
+ - [ ] Para cada endpoint, um humano consegue escrever request/response sem perguntar?
75
+ - [ ] Para cada função pública, está claro o que retorna em todos os caminhos (sucesso + erros enumerados)?
76
+ - [ ] Edge cases enumerados explicitamente — não "tratar edge cases"?
77
+ - [ ] Cada validação tem regra concreta — não só "validar email"?
78
+ - [ ] Cada decisão arquitetural tem **justificativa**?
79
+
80
+ **Anti-padrão a evitar:** seções como _"implementar autenticação"_ ou _"validar dados"_ — isso vira stub. Especifique algoritmo, campos, regras.
81
+
37
82
  4. **Salve `DARE/BLUEPRINT.md`** e informe:
38
83
 
39
84
  _"Blueprint gerado. Revise a arquitetura, os contratos de API e os critérios de DONE de cada fase. Quando aprovado, execute `/generate-tasks` para gerar o DAG e as specs de execução."_
@@ -112,6 +112,48 @@ O `subtask_prompt` no YAML pode referenciar a spec via
112
112
  `spec_file: EXECUTION/task-<id>.md` para que o subagente leia a spec na hora
113
113
  de executar.
114
114
 
115
+ ### 5.1 ANTI-STUB CONTRACT (inegociável)
116
+
117
+ > Tasks geradas com `subtask_prompt` ou spec genéricos forçam o agente a inventar — e ele vai produzir mock, stub ou esqueleto. **Não é negociável**. O comando `dare review <task-id>` (v2.17+) detecta isso e marca a task como FAILED.
118
+
119
+ Cada `subtask_prompt` e `EXECUTION/task-<id>.md` deve atender este contrato:
120
+
121
+ **O `subtask_prompt` deve ser auto-suficiente**
122
+
123
+ O subagente recebe **apenas** o `subtask_prompt` + snippets de 2000 chars dos pais. Tudo que ele precisa para implementar **sem inventar** deve estar ali ou na `spec_file`. Inclua:
124
+
125
+ - Caminho exato dos arquivos a criar/modificar
126
+ - Assinaturas exatas das funções/endpoints (`fn name(params: T) -> R`)
127
+ - Schema de request/response com tipos
128
+ - Validações específicas (não "validar input" — `email: regex /^.../`, `senha: ≥ 8 chars + 1 maiúscula + 1 dígito`)
129
+ - Edge cases enumerados (input vazio, duplicado, expirado, sem permissão)
130
+ - Lista de testes esperados com nome + comportamento (`should_reject_duplicate_email_with_409`)
131
+
132
+ **A `spec_file` (`EXECUTION/task-<id>.md`) deve ter Definition of Done anti-stub:**
133
+
134
+ ```markdown
135
+ ## Definition of Done (ANTI-STUB)
136
+
137
+ - [ ] Nenhum `TODO`, `FIXME`, `XXX` ou `HACK` em arquivos modificados
138
+ - [ ] Nenhuma função vazia (`fn x() {}`, `def x(): pass`, `function x() {}`)
139
+ - [ ] Nenhum `throw new Error('not implemented')`, `unimplemented!()`, `todo!()`, `NotImplementedError`
140
+ - [ ] Nenhum `return null` / `return undefined` / `return {}` como única statement de função pública
141
+ - [ ] Mocks **somente** dentro de `*.test.*`, `*.spec.*`, `__tests__/`, `tests/`, `spec/` — NUNCA em código de produção
142
+ - [ ] Todos os endpoints declarados na seção 3 retornam dados reais (não fixos / hardcoded)
143
+ - [ ] Cada validação da spec produz erro real com status code correto (testado)
144
+ - [ ] Cada edge case da spec tem teste unitário ou integração demonstrando comportamento
145
+ ```
146
+
147
+ **Verificação automatizável:** o agente que executar a task vai rodar `dare review <id>` antes de marcar DONE. Se a review falhar, a task volta para revisão.
148
+
149
+ **Sinais de spec rasa** (auto-validar antes de salvar):
150
+
151
+ - ❌ "Implementar X" — sem assinatura, sem retorno, sem validações
152
+ - ❌ "Tratar erros adequadamente" — quais erros? como? que código?
153
+ - ❌ "Adicionar validações" — quais regras?
154
+ - ❌ Arquivos listados sem dizer **o que cada um contém**
155
+ - ✅ "Implementar `POST /auth/login` retornando `{ token: string, refresh: string }` com 200 se credenciais válidas, 401 se inválidas, 429 se rate limit"
156
+
115
157
  ### 6. Validar consistência dos 3 artefatos
116
158
 
117
159
  - Mesmos `id`s em `TASKS.md`, `dare-dag.yaml` e `EXECUTION/task-*.md`.
@@ -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. CRITÉRIOS DE DONE
88
+ ## 7. PADRÕES PROIBIDOS (ANTI-STUB / ANTI-MOCK)
89
89
 
90
- - [ ] Todos os 4 validation gates passaram sem erros
91
- - [ ] Testes cobrem caminho feliz + erros + edge cases da seção 4
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
- ## 8. PRÓXIMA TASK SUGERIDA
139
+ ## 9. PRÓXIMA TASK SUGERIDA
99
140
 
100
141
  `[task-id]` — [título] _(desbloqueada após conclusão desta task)_