up-cc 0.4.0 → 0.4.2
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/agents/up-api-tester.md +405 -0
- package/agents/up-backend-specialist.md +7 -0
- package/agents/up-code-reviewer.md +42 -2
- package/agents/up-database-specialist.md +7 -0
- package/agents/up-executor.md +7 -0
- package/agents/up-exhaustive-tester.md +348 -0
- package/agents/up-frontend-specialist.md +7 -0
- package/agents/up-system-designer.md +33 -1
- package/agents/up-visual-critic.md +358 -0
- package/package.json +1 -1
- package/references/engineering-principles.md +205 -0
- package/templates/design-tokens.md +151 -0
- package/workflows/builder.md +126 -23
- package/workflows/dcrv.md +421 -0
- package/workflows/executar-fase.md +57 -2
- package/workflows/rapido.md +29 -1
- package/workflows/ux-tester.md +26 -0
- package/workflows/verificar-trabalho.md +47 -0
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Workflow DCRV (Detectar → Classificar → Resolver → Verificar) — loop de qualidade reutilizavel.
|
|
3
|
+
|
|
4
|
+
Roda 3 detectores (Visual Critic, Exhaustive Tester, API Tester), consolida issues, despacha para especialistas corrigirem, e re-verifica. Loop ate resolver ou atingir max ciclos.
|
|
5
|
+
|
|
6
|
+
**Modos de uso:**
|
|
7
|
+
- **Por fase (builder):** Testa apenas paginas/rotas da fase recem-executada
|
|
8
|
+
- **Global (quality gate):** Testa TODAS as paginas/rotas do projeto
|
|
9
|
+
- **Standalone:** Chamado por /up:executar-fase, /up:rapido, /up:ux-tester, /up:verificar-trabalho
|
|
10
|
+
- **Light (1 ciclo):** Roda detectores + reporta, sem loop de correcao
|
|
11
|
+
|
|
12
|
+
**Parametros esperados no prompt:**
|
|
13
|
+
- `$SCOPE`: "phase" | "global" | "light"
|
|
14
|
+
- `$PHASE_DIR`: diretorio da fase (se scope=phase)
|
|
15
|
+
- `$PHASE_NUMBER`: numero da fase (se scope=phase)
|
|
16
|
+
- `$ROUTES`: lista de rotas a testar (se vazio, descobre automaticamente)
|
|
17
|
+
- `$PORT`: porta do dev server (default: 3000)
|
|
18
|
+
- `$MAX_CYCLES`: max ciclos de correcao (default: 3 para phase, 5 para global, 1 para light)
|
|
19
|
+
- `$MAX_ISSUES_PER_CYCLE`: max issues para corrigir por ciclo (default: 15 para phase, 20 para global)
|
|
20
|
+
- `$AUTO_FIX`: true | false (se false, apenas reporta sem corrigir)
|
|
21
|
+
</purpose>
|
|
22
|
+
|
|
23
|
+
<process>
|
|
24
|
+
|
|
25
|
+
## Passo 0: Setup
|
|
26
|
+
|
|
27
|
+
### 0.1 Detectar o que testar
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Dev server rodando?
|
|
31
|
+
curl -s http://localhost:${PORT:-3000} > /dev/null 2>&1
|
|
32
|
+
if [ $? -ne 0 ]; then
|
|
33
|
+
echo "DEV_SERVER_DOWN"
|
|
34
|
+
fi
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Se dev server nao esta rodando: subir automaticamente.
|
|
38
|
+
```bash
|
|
39
|
+
if [ -f package.json ]; then
|
|
40
|
+
npm run dev > /tmp/up-dcrv-server.log 2>&1 &
|
|
41
|
+
DCRV_DEV_PID=$!
|
|
42
|
+
for i in $(seq 1 30); do
|
|
43
|
+
curl -s http://localhost:${PORT:-3000} > /dev/null 2>&1 && break
|
|
44
|
+
sleep 1
|
|
45
|
+
done
|
|
46
|
+
fi
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 0.2 Descobrir rotas (se $ROUTES vazio)
|
|
50
|
+
|
|
51
|
+
**Se scope=phase:** Ler SUMMARY da fase para extrair rotas criadas/modificadas.
|
|
52
|
+
```bash
|
|
53
|
+
cat "$PHASE_DIR"/*-SUMMARY.md 2>/dev/null
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Se scope=global ou standalone:** Descobrir todas as rotas.
|
|
57
|
+
```bash
|
|
58
|
+
find app -name "page.tsx" -o -name "page.ts" 2>/dev/null | head -30
|
|
59
|
+
find pages -name "*.tsx" -o -name "*.ts" 2>/dev/null | grep -v "_app\|_document\|api/" | head -30
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Descobrir rotas API:**
|
|
63
|
+
```bash
|
|
64
|
+
find app -path "*/api/*" -name "route.ts" 2>/dev/null
|
|
65
|
+
find pages/api -name "*.ts" -o -name "*.js" 2>/dev/null
|
|
66
|
+
grep -rn "app\.\(get\|post\|put\|patch\|delete\)" src/ --include="*.ts" --include="*.js" 2>/dev/null | head -20
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 0.3 Classificar projeto
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
HAS_UI = rotas de pagina encontradas?
|
|
73
|
+
HAS_API = rotas de API encontradas?
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
| Projeto | Detectores |
|
|
77
|
+
|---------|-----------|
|
|
78
|
+
| UI + API | Visual Critic → API Tester → Exhaustive Tester (todos) |
|
|
79
|
+
| UI only | Visual Critic → Exhaustive Tester (pular API) |
|
|
80
|
+
| API only | API Tester com profundidade extra (pular visual + exhaustive) |
|
|
81
|
+
| Infra/schema | Pular DCRV (nada para testar via browser/curl) |
|
|
82
|
+
|
|
83
|
+
### 0.4 Carregar referencia visual
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
cat .plano/DESIGN-TOKENS.md 2>/dev/null
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Se nao existe: visual critic vai inferir do codebase (e registrar ausencia como issue leve).
|
|
90
|
+
|
|
91
|
+
### 0.5 Definir output dir
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
if [ "$SCOPE" = "phase" ]; then
|
|
95
|
+
DCRV_DIR="$PHASE_DIR/dcrv"
|
|
96
|
+
elif [ "$SCOPE" = "global" ]; then
|
|
97
|
+
DCRV_DIR=".plano/dcrv"
|
|
98
|
+
else
|
|
99
|
+
DCRV_DIR=".plano/dcrv"
|
|
100
|
+
fi
|
|
101
|
+
mkdir -p "$DCRV_DIR"
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Passo 1: Detectar (Rodar Detectores)
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
108
|
+
DCRV > DETECTANDO — CICLO {CYCLE}/{MAX_CYCLES}
|
|
109
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Ordem obrigatoria: Visual → API → Exhaustive**
|
|
113
|
+
(Visual so observa, API usa curl, Exhaustive clica em tudo — minimiza interferencia)
|
|
114
|
+
|
|
115
|
+
### 1.1 Visual Critic (se HAS_UI)
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
Agent(
|
|
119
|
+
subagent_type="up-visual-critic",
|
|
120
|
+
prompt="""
|
|
121
|
+
Avaliar qualidade visual.
|
|
122
|
+
|
|
123
|
+
<files_to_read>
|
|
124
|
+
- .plano/DESIGN-TOKENS.md (referencia visual, se existe)
|
|
125
|
+
</files_to_read>
|
|
126
|
+
|
|
127
|
+
Paginas a testar: {$ROUTES_UI}
|
|
128
|
+
Dev server: http://localhost:{$PORT}
|
|
129
|
+
|
|
130
|
+
Salvar relatorio em: {$DCRV_DIR}/VISUAL-REPORT.md
|
|
131
|
+
Salvar issues em: {$DCRV_DIR}/VISUAL-ISSUES.json
|
|
132
|
+
"""
|
|
133
|
+
)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 1.2 API Tester (se HAS_API)
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
Agent(
|
|
140
|
+
subagent_type="up-api-tester",
|
|
141
|
+
prompt="""
|
|
142
|
+
Testar robustez das rotas API.
|
|
143
|
+
|
|
144
|
+
Rotas a testar: {$ROUTES_API}
|
|
145
|
+
Dev server: http://localhost:{$PORT}
|
|
146
|
+
|
|
147
|
+
Salvar relatorio em: {$DCRV_DIR}/API-REPORT.md
|
|
148
|
+
Salvar issues em: {$DCRV_DIR}/API-ISSUES.json
|
|
149
|
+
"""
|
|
150
|
+
)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 1.3 Exhaustive Tester (se HAS_UI)
|
|
154
|
+
|
|
155
|
+
```python
|
|
156
|
+
Agent(
|
|
157
|
+
subagent_type="up-exhaustive-tester",
|
|
158
|
+
prompt="""
|
|
159
|
+
Testar CADA elemento interativo.
|
|
160
|
+
|
|
161
|
+
Paginas a testar: {$ROUTES_UI}
|
|
162
|
+
Dev server: http://localhost:{$PORT}
|
|
163
|
+
Sem limite de elementos — testar TODOS.
|
|
164
|
+
|
|
165
|
+
Salvar relatorio em: {$DCRV_DIR}/EXHAUSTIVE-REPORT.md
|
|
166
|
+
Salvar issues em: {$DCRV_DIR}/EXHAUSTIVE-ISSUES.json
|
|
167
|
+
"""
|
|
168
|
+
)
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Passo 2: Classificar (Consolidar Issue Board)
|
|
172
|
+
|
|
173
|
+
Ler os JSONs de issues dos detectores que rodaram.
|
|
174
|
+
|
|
175
|
+
### 2.1 Deduplicar
|
|
176
|
+
|
|
177
|
+
Se visual e exhaustive reportaram o mesmo elemento/pagina: manter a issue mais detalhada.
|
|
178
|
+
Criterio: mesmo `page` + mesmo `element` (por texto ou ref) = duplicata.
|
|
179
|
+
|
|
180
|
+
### 2.2 Classificar por severidade
|
|
181
|
+
|
|
182
|
+
| Severidade | Criterio |
|
|
183
|
+
|-----------|----------|
|
|
184
|
+
| critical | Tela branca, crash, auth bypass, perda de dados, app inacessivel |
|
|
185
|
+
| high | Funcionalidade principal quebrada, 500 em input basico, botao principal sem efeito |
|
|
186
|
+
| medium | Inconsistencia visual, validacao faltando, feedback ausente |
|
|
187
|
+
| low | Cosmetico, melhoria de polish, mensagem generica |
|
|
188
|
+
|
|
189
|
+
### 2.3 Priorizar para correcao
|
|
190
|
+
|
|
191
|
+
Cap por ciclo: $MAX_ISSUES_PER_CYCLE (default: 15 phase, 20 global)
|
|
192
|
+
Prioridade: critical (todas) > high (ate cap) > medium (se sobrar) > low (NUNCA no loop)
|
|
193
|
+
|
|
194
|
+
### 2.4 Gerar ISSUE-BOARD.md
|
|
195
|
+
|
|
196
|
+
```markdown
|
|
197
|
+
---
|
|
198
|
+
cycle: {CYCLE}
|
|
199
|
+
timestamp: {now}
|
|
200
|
+
total: {N}
|
|
201
|
+
critical: {N}
|
|
202
|
+
high: {N}
|
|
203
|
+
medium: {N}
|
|
204
|
+
low: {N}
|
|
205
|
+
to_fix: {N}
|
|
206
|
+
deferred: {N}
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
# DCRV Issue Board — Ciclo {CYCLE}
|
|
210
|
+
|
|
211
|
+
## Issues para Correcao (max {MAX_ISSUES_PER_CYCLE})
|
|
212
|
+
|
|
213
|
+
| ID | Sev | Tipo | Pagina/Rota | Titulo | Detector |
|
|
214
|
+
|----|-----|------|-------------|--------|----------|
|
|
215
|
+
| VIS-001 | high | visual | /dashboard | Cards com padding inconsistente | visual-critic |
|
|
216
|
+
| INT-003 | high | interaction | /dashboard | Botao Exportar sem efeito | exhaustive |
|
|
217
|
+
| API-007 | critical | api | POST /api/users | Aceita amount negativo | api-tester |
|
|
218
|
+
|
|
219
|
+
## Issues Deferidas (low)
|
|
220
|
+
|
|
221
|
+
| ID | Sev | Tipo | Pagina/Rota | Titulo |
|
|
222
|
+
|----|-----|------|-------------|--------|
|
|
223
|
+
| VIS-012 | low | visual | /settings | Poderia ter mais breathing room |
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Escrever em `{$DCRV_DIR}/ISSUE-BOARD.md`.
|
|
227
|
+
|
|
228
|
+
**Se $AUTO_FIX = false:** Parar aqui. Retornar relatorio sem corrigir.
|
|
229
|
+
|
|
230
|
+
**Se zero issues para correcao:** Pular para Passo 5 (score perfeito).
|
|
231
|
+
|
|
232
|
+
## Passo 3: Resolver (Dispatcher + Especialistas)
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
236
|
+
DCRV > CORRIGINDO — {N} issues — CICLO {CYCLE}
|
|
237
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### 3.1 Diagnosticar e Rotear
|
|
241
|
+
|
|
242
|
+
Para cada issue a corrigir, o orquestrador FAZ diagnostico rapido:
|
|
243
|
+
|
|
244
|
+
**Issues visuais (VIS-*):**
|
|
245
|
+
```bash
|
|
246
|
+
# Encontrar componente da pagina
|
|
247
|
+
grep -rn "[rota_ou_componente]" src/ --include="*.tsx" --include="*.ts" | head -5
|
|
248
|
+
```
|
|
249
|
+
→ Rotear para `up-frontend-specialist`
|
|
250
|
+
|
|
251
|
+
**Issues de interacao (INT-*):**
|
|
252
|
+
```bash
|
|
253
|
+
# Verificar se handler existe
|
|
254
|
+
grep -rn "onClick\|onSubmit\|onChange" [arquivo_do_componente] | head -10
|
|
255
|
+
```
|
|
256
|
+
- Handler existe e chama API? → Verificar se API funciona
|
|
257
|
+
- API falha: `up-backend-specialist`
|
|
258
|
+
- API OK, handler bugado: `up-frontend-specialist`
|
|
259
|
+
- Handler nao existe: `up-frontend-specialist`
|
|
260
|
+
- Handler vazio (`() => {}`): `up-frontend-specialist`
|
|
261
|
+
|
|
262
|
+
**Issues de API (API-*):**
|
|
263
|
+
- Validacao faltando: `up-backend-specialist`
|
|
264
|
+
- Schema/dados errados: `up-database-specialist`
|
|
265
|
+
- Auth bypass: `up-backend-specialist`
|
|
266
|
+
- 500 crash: `up-backend-specialist`
|
|
267
|
+
|
|
268
|
+
### 3.2 Spawnar Especialistas
|
|
269
|
+
|
|
270
|
+
Agrupar issues por especialista para eficiencia (1 spawn com multiplas issues em vez de 1 spawn por issue):
|
|
271
|
+
|
|
272
|
+
```python
|
|
273
|
+
Agent(
|
|
274
|
+
subagent_type="up-frontend-specialist",
|
|
275
|
+
prompt="""
|
|
276
|
+
Corrigir as seguintes issues de qualidade:
|
|
277
|
+
|
|
278
|
+
1. {VIS-001}: {titulo} — {descricao} — Fix: {suggested_fix}
|
|
279
|
+
Arquivo: {path} | Screenshot: {evidence}
|
|
280
|
+
|
|
281
|
+
2. {INT-003}: {titulo} — {descricao} — Fix: {suggested_fix}
|
|
282
|
+
Arquivo: {path}
|
|
283
|
+
|
|
284
|
+
Para cada issue:
|
|
285
|
+
- Corrigir o problema
|
|
286
|
+
- Commitar: fix({scope}): {issue_id} — {titulo}
|
|
287
|
+
|
|
288
|
+
NAO criar SUMMARY.md. Apenas corrigir e commitar.
|
|
289
|
+
"""
|
|
290
|
+
)
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### 3.3 Reportar progresso
|
|
294
|
+
|
|
295
|
+
```
|
|
296
|
+
DCRV Ciclo {CYCLE}: {resolved}/{to_fix} issues resolvidas
|
|
297
|
+
✓ VIS-001: Cards com padding → unificado para 16px
|
|
298
|
+
✓ INT-003: Botao Exportar → handler conectado a API
|
|
299
|
+
✗ API-007: Amount negativo → 2 tentativas, nao corrigido
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
## Passo 4: Verificar (Re-rodar Detectores)
|
|
303
|
+
|
|
304
|
+
Re-rodar APENAS os detectores relevantes, APENAS nas issues que foram corrigidas:
|
|
305
|
+
|
|
306
|
+
- Issues VIS-* corrigidas → re-rodar visual critic na pagina afetada
|
|
307
|
+
- Issues INT-* corrigidas → re-rodar exhaustive tester na pagina afetada
|
|
308
|
+
- Issues API-* corrigidas → re-rodar api tester na rota afetada
|
|
309
|
+
|
|
310
|
+
**Criterio de saida:**
|
|
311
|
+
- Todas issues critical/high corrigidas → FIM (sucesso)
|
|
312
|
+
- $MAX_CYCLES atingido → FIM (log pendentes)
|
|
313
|
+
- Issues nao diminuiram entre ciclos → FIM (stagnation)
|
|
314
|
+
|
|
315
|
+
**Se mais ciclos:** Voltar para Passo 1 com issues pendentes.
|
|
316
|
+
|
|
317
|
+
**Se FIM:** Continuar para Passo 5.
|
|
318
|
+
|
|
319
|
+
## Passo 5: Gerar Relatorio Final
|
|
320
|
+
|
|
321
|
+
Escrever `{$DCRV_DIR}/DCRV-REPORT.md`:
|
|
322
|
+
|
|
323
|
+
```markdown
|
|
324
|
+
---
|
|
325
|
+
scope: {phase | global | light}
|
|
326
|
+
completed: {timestamp}
|
|
327
|
+
cycles: {N}
|
|
328
|
+
total_issues: {N}
|
|
329
|
+
resolved: {N}
|
|
330
|
+
pending: {N}
|
|
331
|
+
deferred_low: {N}
|
|
332
|
+
visual_score: {N}/10
|
|
333
|
+
exhaustive_pass_rate: {N}%
|
|
334
|
+
api_pass_rate: {N}%
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
# DCRV Report
|
|
338
|
+
|
|
339
|
+
**Scope:** {scope}
|
|
340
|
+
**Ciclos:** {cycles_run}/{max_cycles}
|
|
341
|
+
**Issues:** {resolved} resolvidas | {pending} pendentes | {deferred} deferidas
|
|
342
|
+
|
|
343
|
+
## Resumo por Detector
|
|
344
|
+
|
|
345
|
+
| Detector | Issues | Resolvidas | Pendentes | Score |
|
|
346
|
+
|----------|--------|-----------|-----------|-------|
|
|
347
|
+
| Visual Critic | {N} | {N} | {N} | {N}/10 |
|
|
348
|
+
| Exhaustive Tester | {N} | {N} | {N} | {N}% pass |
|
|
349
|
+
| API Tester | {N} | {N} | {N} | {N}% pass |
|
|
350
|
+
|
|
351
|
+
## Issues Resolvidas
|
|
352
|
+
|
|
353
|
+
| ID | Titulo | Especialista | Commit |
|
|
354
|
+
|----|--------|-------------|--------|
|
|
355
|
+
| VIS-001 | Cards padding | frontend | abc123 |
|
|
356
|
+
|
|
357
|
+
## Issues Pendentes
|
|
358
|
+
|
|
359
|
+
| ID | Sev | Titulo | Motivo |
|
|
360
|
+
|----|-----|--------|--------|
|
|
361
|
+
| API-007 | critical | Amount negativo | 2 tentativas, nao corrigido |
|
|
362
|
+
|
|
363
|
+
## Issues Deferidas (Low)
|
|
364
|
+
|
|
365
|
+
[Lista para referencia futura]
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
## Passo 6: Retornar
|
|
369
|
+
|
|
370
|
+
```markdown
|
|
371
|
+
## DCRV COMPLETE
|
|
372
|
+
|
|
373
|
+
**Scope:** {scope}
|
|
374
|
+
**Ciclos:** {cycles}/{max}
|
|
375
|
+
**Issues:** {resolved}/{total} resolvidas | {pending} pendentes
|
|
376
|
+
**Scores:**
|
|
377
|
+
- Visual: {N}/10
|
|
378
|
+
- Interacao: {N}% pass rate
|
|
379
|
+
- API: {N}% pass rate
|
|
380
|
+
|
|
381
|
+
Relatorio: {$DCRV_DIR}/DCRV-REPORT.md
|
|
382
|
+
Issues pendentes: {$DCRV_DIR}/ISSUE-BOARD.md
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
Se scope=phase e tem issues pendentes:
|
|
386
|
+
```bash
|
|
387
|
+
# Salvar para carryover ao Quality Gate
|
|
388
|
+
mkdir -p .plano/issues-carryover
|
|
389
|
+
cp "$DCRV_DIR/ISSUE-BOARD.md" ".plano/issues-carryover/phase-${PHASE_NUMBER}.md"
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
</process>
|
|
393
|
+
|
|
394
|
+
<smoke_regression>
|
|
395
|
+
## Smoke Test de Regressao (Opcional — ativado por $REGRESSION=true)
|
|
396
|
+
|
|
397
|
+
Rodar ANTES dos detectores. Navega paginas de fases anteriores para detectar regressoes.
|
|
398
|
+
|
|
399
|
+
```
|
|
400
|
+
Para cada fase anterior com UI (< fase atual):
|
|
401
|
+
Para cada rota da fase:
|
|
402
|
+
browser_navigate(url)
|
|
403
|
+
browser_console_messages(level: "error")
|
|
404
|
+
browser_take_screenshot(filename: "{$DCRV_DIR}/regression/fase-{N}-{rota}.png")
|
|
405
|
+
Se erro novo: registrar como regressao (severidade HIGH)
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
Regressoes entram no issue board com prioridade maxima (corrigir antes de issues novas).
|
|
409
|
+
</smoke_regression>
|
|
410
|
+
|
|
411
|
+
<success_criteria>
|
|
412
|
+
- [ ] Projeto classificado (UI, API, ambos, nenhum)
|
|
413
|
+
- [ ] Detectores relevantes executados na ordem correta
|
|
414
|
+
- [ ] Issues deduplicadas e classificadas por severidade
|
|
415
|
+
- [ ] ISSUE-BOARD.md gerado
|
|
416
|
+
- [ ] Dispatcher diagnosticou e roteou corretamente (se auto_fix)
|
|
417
|
+
- [ ] Especialistas corrigiram issues com commits atomicos (se auto_fix)
|
|
418
|
+
- [ ] Re-verificacao executada nas issues corrigidas (se auto_fix)
|
|
419
|
+
- [ ] DCRV-REPORT.md gerado com metricas
|
|
420
|
+
- [ ] Issues pendentes salvas para carryover (se scope=phase)
|
|
421
|
+
</success_criteria>
|
|
@@ -199,11 +199,66 @@ grep "^status:" "$PHASE_DIR"/*-VERIFICATION.md | cut -d: -f2 | tr -d ' '
|
|
|
199
199
|
|
|
200
200
|
| Status | Acao |
|
|
201
201
|
|--------|------|
|
|
202
|
-
| `passed` | ->
|
|
203
|
-
| `human_needed` | **Se $BUILDER_MODE:** Considerar PASSED, registrar para revisao final no DELIVERY.md. **Se modo normal:** Apresentar itens para teste humano, obter aprovacao. |
|
|
202
|
+
| `passed` | -> deep_quality_check |
|
|
203
|
+
| `human_needed` | **Se $BUILDER_MODE:** Considerar PASSED, registrar para revisao final no DELIVERY.md. **Se modo normal:** Apresentar itens para teste humano, obter aprovacao. Depois -> deep_quality_check |
|
|
204
204
|
| `gaps_found` | Apresentar resumo de lacunas, oferecer `/up:planejar-fase {fase} --gaps` |
|
|
205
205
|
</step>
|
|
206
206
|
|
|
207
|
+
<step name="deep_quality_check">
|
|
208
|
+
**Verificacao profunda via DCRV (Detectar → Classificar → Resolver → Verificar)**
|
|
209
|
+
|
|
210
|
+
**Se $BUILDER_MODE = true:**
|
|
211
|
+
Rodar DCRV automaticamente (o builder controla isso via builder.md). Pular para update_roadmap.
|
|
212
|
+
|
|
213
|
+
**Se modo normal (interativo):**
|
|
214
|
+
|
|
215
|
+
Detectar se fase tem UI ou API:
|
|
216
|
+
```bash
|
|
217
|
+
# Checar se fase criou/modificou UI
|
|
218
|
+
UI_FILES=$(grep -l "page.tsx\|component\|\.css\|\.tsx" "$PHASE_DIR"/*-SUMMARY.md 2>/dev/null | wc -l)
|
|
219
|
+
# Checar se fase criou/modificou API
|
|
220
|
+
API_FILES=$(grep -l "route.ts\|api/\|endpoint\|handler" "$PHASE_DIR"/*-SUMMARY.md 2>/dev/null | wc -l)
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Se fase tem UI ou API:
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
227
|
+
UP > VERIFICACAO PROFUNDA DISPONIVEL
|
|
228
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
229
|
+
|
|
230
|
+
A fase passou na verificacao de codigo. Quer rodar verificacao profunda?
|
|
231
|
+
|
|
232
|
+
Isso testa:
|
|
233
|
+
- Visual: alinhamento, consistencia, design tokens
|
|
234
|
+
- Interacao: clica em CADA botao/link/elemento
|
|
235
|
+
- API: testa cada endpoint com payloads validos e invalidos
|
|
236
|
+
|
|
237
|
+
Opcoes:
|
|
238
|
+
1. Rodar verificacao profunda (recomendado)
|
|
239
|
+
2. Rodar apenas relatorio (sem corrigir)
|
|
240
|
+
3. Pular e continuar
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Se usuario escolhe 1:**
|
|
244
|
+
Executar workflow DCRV com scope=phase, auto_fix=true:
|
|
245
|
+
```
|
|
246
|
+
Referencia: @~/.claude/up/workflows/dcrv.md
|
|
247
|
+
SCOPE=phase, PHASE_DIR={phase_dir}, PHASE_NUMBER={phase_number}, MAX_CYCLES=3, AUTO_FIX=true
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Se usuario escolhe 2:**
|
|
251
|
+
Executar workflow DCRV com scope=light, auto_fix=false:
|
|
252
|
+
```
|
|
253
|
+
SCOPE=light, AUTO_FIX=false
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
**Se usuario escolhe 3:**
|
|
257
|
+
Pular silenciosamente.
|
|
258
|
+
|
|
259
|
+
Apos DCRV (se rodou): -> update_roadmap
|
|
260
|
+
</step>
|
|
261
|
+
|
|
207
262
|
<step name="update_roadmap">
|
|
208
263
|
**Marcar fase completa e atualizar todos arquivos de rastreamento:**
|
|
209
264
|
|
package/workflows/rapido.md
CHANGED
|
@@ -81,7 +81,7 @@ Task(
|
|
|
81
81
|
- Criar UM UNICO plano com 1-3 tarefas focadas
|
|
82
82
|
- Tarefas rapidas devem ser atomicas e autocontidas
|
|
83
83
|
- Sem fase de pesquisa
|
|
84
|
-
- Alvo ~
|
|
84
|
+
- Alvo ~10% uso de contexto (simples, focado)
|
|
85
85
|
</constraints>
|
|
86
86
|
|
|
87
87
|
<output>
|
|
@@ -131,6 +131,34 @@ Apos executor retornar:
|
|
|
131
131
|
|
|
132
132
|
---
|
|
133
133
|
|
|
134
|
+
**Passo 5.5: DCRV Light (se criou UI ou API)**
|
|
135
|
+
|
|
136
|
+
Detectar se tarefa criou/modificou UI ou API:
|
|
137
|
+
```bash
|
|
138
|
+
# Checar SUMMARY por arquivos de UI/API
|
|
139
|
+
UI_MATCH=$(grep -c "page.tsx\|component\|\.css\|\.tsx" "${QUICK_DIR}/${next_num}-SUMMARY.md" 2>/dev/null)
|
|
140
|
+
API_MATCH=$(grep -c "route.ts\|api/\|endpoint\|handler" "${QUICK_DIR}/${next_num}-SUMMARY.md" 2>/dev/null)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Se UI_MATCH > 0 ou API_MATCH > 0:**
|
|
144
|
+
|
|
145
|
+
Rodar DCRV light (1 ciclo, apenas relatorio + correcao rapida):
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
Referencia: @~/.claude/up/workflows/dcrv.md
|
|
149
|
+
SCOPE=light, MAX_CYCLES=1, MAX_ISSUES_PER_CYCLE=10, AUTO_FIX=true
|
|
150
|
+
DCRV_DIR=${QUICK_DIR}/dcrv
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Reportar resultado brevemente:
|
|
154
|
+
```
|
|
155
|
+
DCRV Light: {resolved}/{total} issues corrigidas
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Se nenhum match:** Pular silenciosamente (tarefa nao tem UI/API).
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
134
162
|
**Passo 6: Atualizar STATE.md**
|
|
135
163
|
|
|
136
164
|
**6a. Verificar se secao "Tarefas Rapidas Completadas" existe:**
|
package/workflows/ux-tester.md
CHANGED
|
@@ -306,9 +306,35 @@ improvements: [N]
|
|
|
306
306
|
| Foco invisivel | [N] | [lista] |
|
|
307
307
|
```
|
|
308
308
|
|
|
309
|
+
## Passo 3.5: DCRV — Detectores Automaticos
|
|
310
|
+
|
|
311
|
+
Apos o relatorio UX (que avalia experiencia e percepcao), rodar detectores automaticos que pegam issues objetivas que o UX tester pode nao ver.
|
|
312
|
+
|
|
313
|
+
**Referencia:** `@~/.claude/up/workflows/dcrv.md`
|
|
314
|
+
|
|
315
|
+
Rodar com:
|
|
316
|
+
```
|
|
317
|
+
SCOPE=global (testar tudo)
|
|
318
|
+
AUTO_FIX=false (apenas detectar — implementacao sera no Passo 4)
|
|
319
|
+
MAX_CYCLES=1 (apenas 1 ciclo de deteccao)
|
|
320
|
+
PORT={porta do dev server ja rodando}
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
Apos DCRV retornar:
|
|
324
|
+
1. Ler DCRV-REPORT.md
|
|
325
|
+
2. Mesclar issues do DCRV com issues do UX Review:
|
|
326
|
+
- Issues VIS-* do visual critic → adicionar na dimensao "Consistencia" do UX-REPORT
|
|
327
|
+
- Issues INT-* do exhaustive tester → adicionar na dimensao "Feedback" do UX-REPORT
|
|
328
|
+
- Issues API-* do api tester → adicionar como secao "Robustez API" do UX-REPORT
|
|
329
|
+
3. Deduplicar: se UX review e DCRV encontraram o mesmo problema, manter a versao mais detalhada
|
|
330
|
+
4. Atualizar scores do UX-REPORT com base nas issues adicionais
|
|
331
|
+
|
|
332
|
+
Isso garante que o relatorio UX e COMPLETO — experiencia (do UX tester) + objetividade (dos detectores).
|
|
333
|
+
|
|
309
334
|
## Passo 4: Implementar Melhorias
|
|
310
335
|
|
|
311
336
|
**NAO perguntar ao usuario.** Implementar TODAS as melhorias que sao seguras de aplicar.
|
|
337
|
+
Isso inclui tanto issues do UX Review quanto issues do DCRV mescladas no passo anterior.
|
|
312
338
|
|
|
313
339
|
### 4.1 Classificar Issues por Implementabilidade
|
|
314
340
|
|
|
@@ -65,6 +65,53 @@ ls "$phase_dir"/*-SUMMARY.md 2>/dev/null
|
|
|
65
65
|
Ler cada SUMMARY.md para extrair entregaveis testaveis.
|
|
66
66
|
</step>
|
|
67
67
|
|
|
68
|
+
<step name="auto_detect_issues">
|
|
69
|
+
**Pre-validacao automatica antes do teste humano**
|
|
70
|
+
|
|
71
|
+
Antes de pedir ao usuario para testar, rodar detectores automaticos para corrigir issues obvias.
|
|
72
|
+
O humano testa um sistema ja pre-validado — nao perde tempo com botoes quebrados ou erros de console.
|
|
73
|
+
|
|
74
|
+
Detectar se fase tem UI ou API:
|
|
75
|
+
```bash
|
|
76
|
+
UI_FILES=$(find app pages src -name "page.tsx" -o -name "*.component.tsx" 2>/dev/null | head -1)
|
|
77
|
+
API_FILES=$(find app/api pages/api -name "route.ts" -o -name "*.ts" 2>/dev/null | head -1)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Se tem UI ou API:**
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
84
|
+
UP > PRE-VALIDACAO AUTOMATICA
|
|
85
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
86
|
+
|
|
87
|
+
Rodando detectores automaticos antes do teste manual...
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Rodar DCRV light:
|
|
91
|
+
```
|
|
92
|
+
Referencia: @~/.claude/up/workflows/dcrv.md
|
|
93
|
+
SCOPE=phase, PHASE_DIR={phase_dir}, PHASE_NUMBER={phase_number}
|
|
94
|
+
MAX_CYCLES=1, AUTO_FIX=true
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Reportar resultado:
|
|
98
|
+
```
|
|
99
|
+
Pre-validacao: {resolved}/{total} issues automaticas corrigidas
|
|
100
|
+
Pronto para teste manual.
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Se DCRV encontrou issues criticas nao corrigidas:**
|
|
104
|
+
Avisar o usuario antes de iniciar UAT:
|
|
105
|
+
```
|
|
106
|
+
Aviso: {N} issues criticas detectadas e NAO corrigidas automaticamente.
|
|
107
|
+
O teste manual pode encontrar esses problemas. Considere rodar /up:planejar-fase {fase} --gaps primeiro.
|
|
108
|
+
|
|
109
|
+
Continuar com teste manual mesmo assim? (sim/nao)
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Se nao tem UI/API:** Pular silenciosamente.
|
|
113
|
+
</step>
|
|
114
|
+
|
|
68
115
|
<step name="extract_tests">
|
|
69
116
|
**Extrair entregaveis testaveis do SUMMARY.md:**
|
|
70
117
|
|