up-cc 0.3.3 → 0.4.1
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/LICENSE +21 -0
- package/README.md +259 -49
- package/agents/up-api-tester.md +405 -0
- package/agents/up-arquiteto.md +461 -0
- package/agents/up-backend-specialist.md +158 -0
- package/agents/up-blind-validator.md +259 -0
- package/agents/up-clone-crawler.md +234 -0
- package/agents/up-clone-design-extractor.md +227 -0
- package/agents/up-clone-feature-mapper.md +225 -0
- package/agents/up-clone-prd-writer.md +169 -0
- package/agents/up-clone-verifier.md +227 -0
- package/agents/up-code-reviewer.md +225 -0
- package/agents/up-database-specialist.md +152 -0
- package/agents/up-devops-agent.md +203 -0
- package/agents/up-executor.md +45 -5
- package/agents/up-exhaustive-tester.md +348 -0
- package/agents/up-frontend-specialist.md +135 -0
- package/agents/up-product-analyst.md +192 -0
- package/agents/up-qa-agent.md +171 -0
- package/agents/up-requirements-validator.md +230 -0
- package/agents/up-security-reviewer.md +137 -0
- package/agents/up-system-designer.md +332 -0
- package/agents/up-technical-writer.md +188 -0
- package/agents/up-visual-critic.md +358 -0
- package/bin/up-tools.cjs +84 -2
- package/commands/clone-builder.md +67 -0
- package/commands/dashboard.md +48 -0
- package/commands/depurar.md +1 -1
- package/commands/mobile-first.md +71 -0
- package/commands/modo-builder.md +178 -0
- package/commands/ux-tester.md +63 -0
- package/package.json +1 -1
- package/references/blueprints/audit.md +29 -0
- package/references/blueprints/booking.md +49 -0
- package/references/blueprints/community.md +48 -0
- package/references/blueprints/crm.md +40 -0
- package/references/blueprints/dashboard.md +48 -0
- package/references/blueprints/data-management.md +42 -0
- package/references/blueprints/ecommerce.md +51 -0
- package/references/blueprints/marketplace.md +48 -0
- package/references/blueprints/notifications.md +32 -0
- package/references/blueprints/saas-users.md +50 -0
- package/references/blueprints/settings.md +31 -0
- package/references/engineering-principles.md +205 -0
- package/references/production-requirements.md +106 -0
- package/references/state-persistence.md +74 -0
- package/templates/builder-defaults.md +73 -0
- package/templates/delivery.md +279 -0
- package/templates/design-tokens.md +151 -0
- package/workflows/builder-e2e.md +501 -0
- package/workflows/builder.md +2248 -0
- package/workflows/clone-builder.md +320 -0
- package/workflows/executar-fase.md +28 -2
- package/workflows/executar-plano.md +404 -6
- package/workflows/mobile-first.md +692 -0
- package/workflows/novo-projeto.md +22 -0
- package/workflows/rapido.md +1 -1
- package/workflows/ux-tester.md +500 -0
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
<purpose>
|
|
2
2
|
Executar um prompt de fase (PLAN.md) e criar o resumo do resultado (SUMMARY.md).
|
|
3
|
+
|
|
4
|
+
**PRINCIPIO CENTRAL: Verificacao funcional por task.**
|
|
5
|
+
Cada task NAO esta completa ate que funcione DE VERDADE — nao apenas que o arquivo exista.
|
|
6
|
+
Backend task → curl o endpoint, verificar resposta.
|
|
7
|
+
Frontend task → abrir no browser, verificar que renderiza e interage.
|
|
8
|
+
Integracao → verificar que frontend chama backend corretamente.
|
|
3
9
|
</purpose>
|
|
4
10
|
|
|
5
11
|
<required_reading>
|
|
@@ -20,6 +26,122 @@ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
|
20
26
|
Extrair do init JSON: `commit_docs`, `phase_dir`, `phase_number`, `plans`, `summaries`, `incomplete_plans`, `state_path`, `config_path`.
|
|
21
27
|
|
|
22
28
|
Se `.plano/` faltando: erro.
|
|
29
|
+
|
|
30
|
+
**Detectar modo de execucao:**
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
BUILDER_MODE=$(node -e "try{const c=JSON.parse(require('fs').readFileSync('.plano/config.json','utf8'));console.log(c.builder_mode===true?'true':'false')}catch{console.log('false')}" 2>/dev/null)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Tambem verificar se o prompt contem `<builder_mode>`. Se sim: `$BUILDER_MODE = true`.
|
|
37
|
+
|
|
38
|
+
**Quando `$BUILDER_MODE = true`:**
|
|
39
|
+
- NAO usar AskUserQuestion em nenhum momento
|
|
40
|
+
- NAO mostrar menus de "Proximo" ou sugerir comandos
|
|
41
|
+
- NAO parar pra pedir confirmacao (Regra 4 → decidir autonomamente)
|
|
42
|
+
- Retornar resultado silenciosamente para o orquestrador
|
|
43
|
+
</step>
|
|
44
|
+
|
|
45
|
+
<step name="setup_test_data">
|
|
46
|
+
## CRITICO: Criar Dados de Teste ANTES de Executar Tasks
|
|
47
|
+
|
|
48
|
+
Se o projeto tem banco de dados (Supabase, Postgres, SQLite, etc.), criar dados de teste para poder verificar funcionalidades.
|
|
49
|
+
|
|
50
|
+
**Detectar banco:**
|
|
51
|
+
```bash
|
|
52
|
+
# Supabase
|
|
53
|
+
grep -r "SUPABASE_URL\|supabase" .env* package.json 2>/dev/null | head -3
|
|
54
|
+
|
|
55
|
+
# Prisma
|
|
56
|
+
ls prisma/schema.prisma 2>/dev/null
|
|
57
|
+
|
|
58
|
+
# Drizzle
|
|
59
|
+
ls drizzle.config.* 2>/dev/null
|
|
60
|
+
|
|
61
|
+
# SQLite
|
|
62
|
+
find . -name "*.db" -o -name "*.sqlite" 2>/dev/null | head -3
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Se banco disponivel e vazio (projeto novo/greenfield):**
|
|
66
|
+
|
|
67
|
+
1. Rodar migrations pendentes:
|
|
68
|
+
```bash
|
|
69
|
+
npx prisma migrate dev 2>/dev/null || npx supabase db push 2>/dev/null || npx drizzle-kit push 2>/dev/null
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
2. Criar usuario de teste (se sistema tem auth):
|
|
73
|
+
```bash
|
|
74
|
+
# Via Supabase CLI
|
|
75
|
+
npx supabase functions invoke create-test-user 2>/dev/null
|
|
76
|
+
|
|
77
|
+
# Ou via API do proprio app (se signup endpoint existe)
|
|
78
|
+
curl -s -X POST http://localhost:$DEV_PORT/api/auth/signup \
|
|
79
|
+
-H "Content-Type: application/json" \
|
|
80
|
+
-d '{"email":"teste@teste.com","password":"Teste123!","name":"Usuario Teste"}'
|
|
81
|
+
|
|
82
|
+
# Ou via SQL direto (Supabase)
|
|
83
|
+
# INSERT INTO auth.users ...
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Dados de teste padrao:**
|
|
87
|
+
|
|
88
|
+
| Tipo | Dados |
|
|
89
|
+
|------|-------|
|
|
90
|
+
| **Admin** | admin@teste.com / Admin123! / role: admin |
|
|
91
|
+
| **Usuario** | user@teste.com / User123! / role: user |
|
|
92
|
+
| **Nomes** | Usar nomes realistas (Maria Silva, Joao Santos) |
|
|
93
|
+
| **Valores** | Numeros redondos (100, 250, 1000) |
|
|
94
|
+
| **Datas** | Data atual ou proxima semana |
|
|
95
|
+
| **Textos** | "Teste automatico - [dominio]" |
|
|
96
|
+
|
|
97
|
+
3. Criar seed data do dominio (se seed script existe):
|
|
98
|
+
```bash
|
|
99
|
+
npm run db:seed 2>/dev/null || npx prisma db seed 2>/dev/null || npx tsx prisma/seed.ts 2>/dev/null
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
4. Se NAO existe seed script: criar dados via API apos endpoints estarem prontos (durante execucao das tasks)
|
|
103
|
+
|
|
104
|
+
**Salvar credenciais de teste para uso durante verificacao:**
|
|
105
|
+
```
|
|
106
|
+
$TEST_ADMIN_EMAIL = "admin@teste.com"
|
|
107
|
+
$TEST_ADMIN_PASSWORD = "Admin123!"
|
|
108
|
+
$TEST_USER_EMAIL = "user@teste.com"
|
|
109
|
+
$TEST_USER_PASSWORD = "User123!"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Se banco NAO disponivel ou sem acesso:** Pular. Registrar como `[PRECISA-CREDENCIAL]`.
|
|
113
|
+
|
|
114
|
+
</step>
|
|
115
|
+
|
|
116
|
+
<step name="start_dev_server">
|
|
117
|
+
## CRITICO: Subir Dev Server ANTES de Executar Qualquer Task
|
|
118
|
+
|
|
119
|
+
Detectar e subir o servidor de desenvolvimento:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Detectar comando de dev
|
|
123
|
+
if [ -f package.json ]; then
|
|
124
|
+
DEV_CMD=$(node -e "const p=require('./package.json'); const s=p.scripts||{}; console.log(s.dev||s.start||'')")
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
# Subir em background
|
|
128
|
+
if [ -n "$DEV_CMD" ]; then
|
|
129
|
+
npm run dev > /tmp/up-dev-server.log 2>&1 &
|
|
130
|
+
DEV_PID=$!
|
|
131
|
+
|
|
132
|
+
# Esperar ficar pronto (max 30s)
|
|
133
|
+
PORT=$(node -e "const p=require('./package.json'); const s=p.scripts||{}; const d=s.dev||''; const m=d.match(/--port\s+(\d+)|PORT=(\d+)/); console.log(m?m[1]||m[2]:'3000')" 2>/dev/null || echo "3000")
|
|
134
|
+
for i in $(seq 1 30); do
|
|
135
|
+
curl -s http://localhost:$PORT > /dev/null 2>&1 && break
|
|
136
|
+
sleep 1
|
|
137
|
+
done
|
|
138
|
+
fi
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Se o servidor subiu: `$DEV_SERVER_ACTIVE = true`, `$DEV_PORT = $PORT`
|
|
142
|
+
Se nao subiu: `$DEV_SERVER_ACTIVE = false` — continuar sem verificacao funcional runtime (fallback para verificacao estatica)
|
|
143
|
+
|
|
144
|
+
**Manter o servidor rodando durante TODA a execucao do plano.**
|
|
23
145
|
</step>
|
|
24
146
|
|
|
25
147
|
<step name="identify_plan">
|
|
@@ -58,13 +180,200 @@ Desvios sao normais -- tratar via regras abaixo.
|
|
|
58
180
|
|
|
59
181
|
1. Ler arquivos de @contexto do prompt
|
|
60
182
|
2. Por tarefa:
|
|
61
|
-
- `type="auto"`: Implementar
|
|
62
|
-
- `type="checkpoint:*"`: PARAR -> checkpoint_protocol -> esperar usuario -> continuar
|
|
183
|
+
- `type="auto"`: Implementar → **verificar funcionalmente** → commitar → registrar
|
|
184
|
+
- `type="checkpoint:*"`: PARAR -> checkpoint_protocol -> esperar usuario -> continuar
|
|
63
185
|
3. Executar verificacoes `<verification>`
|
|
64
186
|
4. Confirmar `<success_criteria>` atendido
|
|
65
187
|
5. Documentar desvios no Summary
|
|
66
188
|
</step>
|
|
67
189
|
|
|
190
|
+
<runtime_verification>
|
|
191
|
+
## VERIFICACAO FUNCIONAL POR TASK (CRITICO)
|
|
192
|
+
|
|
193
|
+
**Apos CADA task implementada, ANTES de commitar, verificar que FUNCIONA:**
|
|
194
|
+
|
|
195
|
+
### Task de Backend (API route, endpoint, middleware)
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# 1. Verificar que o servidor recarregou (hot reload)
|
|
199
|
+
sleep 2
|
|
200
|
+
|
|
201
|
+
# 2. Se endpoint requer auth, fazer login primeiro com usuario de teste
|
|
202
|
+
# Usar credenciais criadas no step setup_test_data
|
|
203
|
+
AUTH_TOKEN=""
|
|
204
|
+
if [endpoint requer auth]; then
|
|
205
|
+
AUTH_RESPONSE=$(curl -s -X POST http://localhost:$DEV_PORT/api/auth/login \
|
|
206
|
+
-H "Content-Type: application/json" \
|
|
207
|
+
-d "{\"email\":\"$TEST_ADMIN_EMAIL\",\"password\":\"$TEST_ADMIN_PASSWORD\"}")
|
|
208
|
+
AUTH_TOKEN=$(echo $AUTH_RESPONSE | node -e "process.stdin.on('data',d=>{try{console.log(JSON.parse(d).token||JSON.parse(d).data?.token||'')}catch{console.log('')}})")
|
|
209
|
+
fi
|
|
210
|
+
|
|
211
|
+
# 3. Testar o endpoint criado/modificado
|
|
212
|
+
curl -s -X POST http://localhost:$DEV_PORT/api/messages \
|
|
213
|
+
-H "Content-Type: application/json" \
|
|
214
|
+
-H "Authorization: Bearer $AUTH_TOKEN" \
|
|
215
|
+
-d '{"content":"teste automatico"}' \
|
|
216
|
+
-w "\n%{http_code}"
|
|
217
|
+
|
|
218
|
+
# 4. Verificar response
|
|
219
|
+
# - Status code correto (200, 201, etc.)?
|
|
220
|
+
# - Response body tem a estrutura esperada?
|
|
221
|
+
# - Nao retornou 500 ou erro?
|
|
222
|
+
# - Se 401: credencial de teste invalida ou auth middleware errado
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**Se resposta inesperada:**
|
|
226
|
+
1. Ler log do servidor: `tail -20 /tmp/up-dev-server.log`
|
|
227
|
+
2. Identificar erro (import faltando, typo, tipo errado)
|
|
228
|
+
3. Corrigir inline
|
|
229
|
+
4. Re-testar (max 3 tentativas)
|
|
230
|
+
5. Se ainda falha: registrar como issue e continuar
|
|
231
|
+
|
|
232
|
+
### Task de Frontend (componente, pagina, UI)
|
|
233
|
+
|
|
234
|
+
Se Playwright MCP disponivel:
|
|
235
|
+
```
|
|
236
|
+
browser_navigate(url: "http://localhost:$DEV_PORT/[rota]")
|
|
237
|
+
browser_snapshot()
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Verificar:
|
|
241
|
+
- Pagina renderiza sem erro? (nao tela branca)
|
|
242
|
+
- Componente esperado existe no snapshot?
|
|
243
|
+
- Console sem erros? `browser_console_messages(level: "error")`
|
|
244
|
+
|
|
245
|
+
Se Playwright NAO disponivel:
|
|
246
|
+
```bash
|
|
247
|
+
# Fallback: verificar que a pagina responde
|
|
248
|
+
curl -s http://localhost:$DEV_PORT/[rota] | head -20
|
|
249
|
+
# Deve retornar HTML, nao erro
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**Se tela branca ou erro:**
|
|
253
|
+
1. Checar console/logs
|
|
254
|
+
2. Corrigir (import faltando, componente errado, props faltando)
|
|
255
|
+
3. Re-testar (max 3 tentativas)
|
|
256
|
+
|
|
257
|
+
### Task de Integracao (frontend chamando backend)
|
|
258
|
+
|
|
259
|
+
```
|
|
260
|
+
# 0. Se pagina requer auth, fazer login primeiro via Playwright
|
|
261
|
+
if [rota protegida]:
|
|
262
|
+
browser_navigate(url: "http://localhost:$DEV_PORT/login")
|
|
263
|
+
browser_snapshot()
|
|
264
|
+
browser_fill_form(fields: [
|
|
265
|
+
{ref: "[email-input]", value: "$TEST_ADMIN_EMAIL"},
|
|
266
|
+
{ref: "[password-input]", value: "$TEST_ADMIN_PASSWORD"}
|
|
267
|
+
])
|
|
268
|
+
browser_click(ref: "[submit-button]")
|
|
269
|
+
# Esperar redirect pos-login
|
|
270
|
+
browser_snapshot() # deve estar na pagina protegida agora
|
|
271
|
+
|
|
272
|
+
# 1. Navegar para a pagina
|
|
273
|
+
browser_navigate(url: "http://localhost:$DEV_PORT/[rota]")
|
|
274
|
+
|
|
275
|
+
# 2. Interagir (clicar botao, submeter form)
|
|
276
|
+
browser_snapshot()
|
|
277
|
+
browser_click(ref: "[ref-do-botao]")
|
|
278
|
+
# ou
|
|
279
|
+
browser_fill_form(fields: [...])
|
|
280
|
+
browser_press_key(key: "Enter")
|
|
281
|
+
|
|
282
|
+
# 3. Verificar que a acao funcionou
|
|
283
|
+
browser_snapshot() # novo estado
|
|
284
|
+
browser_network_requests() # API foi chamada?
|
|
285
|
+
|
|
286
|
+
# 4. Checar erros
|
|
287
|
+
browser_console_messages(level: "error")
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**Se a acao nao funcionou:**
|
|
291
|
+
1. Checar network requests — API retornou erro?
|
|
292
|
+
2. Checar console — erro no frontend?
|
|
293
|
+
3. Comparar URL do fetch com a rota real do backend
|
|
294
|
+
4. Corrigir conexao frontend↔backend
|
|
295
|
+
5. Re-testar (max 3 tentativas)
|
|
296
|
+
|
|
297
|
+
### Task de Database (schema, migration, seed)
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
# Verificar que migration rodou
|
|
301
|
+
npx prisma migrate status 2>/dev/null || npx supabase db push --dry-run 2>/dev/null
|
|
302
|
+
|
|
303
|
+
# Verificar que seed populou
|
|
304
|
+
# (se seed task)
|
|
305
|
+
curl -s http://localhost:$DEV_PORT/api/[recurso] | head -5
|
|
306
|
+
# Deve retornar dados, nao lista vazia
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Quando Pular Verificacao Funcional
|
|
310
|
+
|
|
311
|
+
- Task de config/setup (tsconfig, eslint, deps): pular
|
|
312
|
+
- Task de types/interfaces only: pular
|
|
313
|
+
- Task de testes (escrita de testes): pular (testes sao a verificacao)
|
|
314
|
+
- `$DEV_SERVER_ACTIVE = false`: pular runtime, usar verificacao estatica
|
|
315
|
+
|
|
316
|
+
### Quando Precisa de Credencial/Acesso Externo
|
|
317
|
+
|
|
318
|
+
Se a verificacao requer algo que o executor NAO tem:
|
|
319
|
+
- Cookies de sessao do usuario (Instagram, WhatsApp, etc.)
|
|
320
|
+
- Login em servico externo (dashboard de terceiro, admin panel externo)
|
|
321
|
+
- Token OAuth com permissoes especificas
|
|
322
|
+
- Acesso fisico (camera, microfone, GPS)
|
|
323
|
+
- Pagamento real (testar checkout com cartao)
|
|
324
|
+
|
|
325
|
+
**NAO perguntar ao usuario. NAO parar o builder.**
|
|
326
|
+
|
|
327
|
+
Em vez disso:
|
|
328
|
+
1. Testar o maximo possivel SEM a credencial (mock, dados locais, dry-run)
|
|
329
|
+
2. Registrar no SUMMARY.md como `[PRECISA-CREDENCIAL]`:
|
|
330
|
+
|
|
331
|
+
```markdown
|
|
332
|
+
## Verificacoes Pendentes (Credenciais Necessarias)
|
|
333
|
+
|
|
334
|
+
| Task | O que testar | Credencial necessaria | Como obter |
|
|
335
|
+
|------|-------------|----------------------|-----------|
|
|
336
|
+
| 3 | Integração Instagram | Cookie de sessão Instagram | Login manual no Playwright |
|
|
337
|
+
| 5 | Webhook WhatsApp | Token UazAPI configurado | Configurar em .env |
|
|
338
|
+
| 7 | Checkout Stripe | Chave de teste Stripe | Dashboard Stripe > API Keys |
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
Estas verificacoes serao agregadas no DELIVERY.md na secao "Testes Pendentes de Credenciais".
|
|
342
|
+
|
|
343
|
+
### Verificacao Estatica (Fallback)
|
|
344
|
+
|
|
345
|
+
Se dev server nao esta ativo:
|
|
346
|
+
```bash
|
|
347
|
+
# TypeScript compila?
|
|
348
|
+
npx tsc --noEmit 2>&1 | tail -10
|
|
349
|
+
|
|
350
|
+
# ESLint passa?
|
|
351
|
+
npx eslint src/ --quiet 2>&1 | tail -10
|
|
352
|
+
|
|
353
|
+
# Build funciona?
|
|
354
|
+
npm run build 2>&1 | tail -10
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
</runtime_verification>
|
|
358
|
+
|
|
359
|
+
<task_completion_protocol>
|
|
360
|
+
## Protocolo de Conclusao por Task
|
|
361
|
+
|
|
362
|
+
Uma task SO esta completa quando:
|
|
363
|
+
|
|
364
|
+
1. **Codigo escrito** — arquivo(s) criado(s)/modificado(s)
|
|
365
|
+
2. **Verificacao funcional PASSOU** — endpoint responde / pagina renderiza / acao funciona
|
|
366
|
+
3. **Commit feito** — atomico, com mensagem descritiva
|
|
367
|
+
4. **Hash registrado** — para o SUMMARY
|
|
368
|
+
|
|
369
|
+
Se verificacao funcional FALHA apos 3 tentativas:
|
|
370
|
+
- Registrar como `[FUNCIONAL-FALHA]` no SUMMARY com descricao do problema
|
|
371
|
+
- Commitar o que tem (codigo pode estar correto mas dependencia de outra task)
|
|
372
|
+
- Continuar para proxima task
|
|
373
|
+
- O code reviewer (Reflect step) vai pegar isso depois
|
|
374
|
+
|
|
375
|
+
</task_completion_protocol>
|
|
376
|
+
|
|
68
377
|
<deviation_rules>
|
|
69
378
|
|
|
70
379
|
## Regras de Desvio
|
|
@@ -76,16 +385,26 @@ Voce VAI descobrir trabalho nao planejado. Aplicar automaticamente, rastrear tod
|
|
|
76
385
|
| **1: Bug** | Comportamento quebrado, erros, queries erradas, erros de tipo, vulns de seguranca | Corrigir -> testar -> verificar -> rastrear `[Regra 1 - Bug]` | Auto |
|
|
77
386
|
| **2: Critico Faltante** | Essenciais faltando: tratamento de erro, validacao, auth, CSRF/CORS | Adicionar -> testar -> verificar -> rastrear `[Regra 2 - Critico Faltante]` | Auto |
|
|
78
387
|
| **3: Bloqueante** | Impede conclusao: deps faltando, tipos errados, imports quebrados | Corrigir bloqueio -> verificar que prossegue -> rastrear `[Regra 3 - Bloqueante]` | Auto |
|
|
79
|
-
| **4: Arquitetural** | Mudanca estrutural: nova tabela DB, mudanca de schema, novo servico |
|
|
388
|
+
| **4: Arquitetural** | Mudanca estrutural: nova tabela DB, mudanca de schema, novo servico | **Se $BUILDER_MODE:** decidir autonomamente → rastrear `[Regra 4 - Arquitetural (auto)]`. **Se modo normal:** PARAR → apresentar decisao → rastrear. | Perguntar (normal) / Auto (builder) |
|
|
389
|
+
| **5: Conexao Frontend↔Backend** | Frontend chama URL errada, payload errado, response shape diferente | Corrigir URL/payload/parsing -> re-testar -> rastrear `[Regra 5 - Conexao]` | Auto |
|
|
390
|
+
|
|
391
|
+
**Regra 5 e NOVA e CRITICA.** A maioria dos problemas "nada funciona" vem de:
|
|
392
|
+
- Frontend fazendo fetch para `/api/messages` mas backend tem `/api/message` (sem s)
|
|
393
|
+
- Frontend enviando `{ message: "oi" }` mas backend espera `{ content: "oi" }`
|
|
394
|
+
- Frontend esperando `response.data.messages` mas backend retorna `response.messages`
|
|
395
|
+
- Frontend usando `GET` mas backend espera `POST`
|
|
396
|
+
- CORS bloqueando a requisicao
|
|
397
|
+
|
|
398
|
+
**SEMPRE verificar**: URL + metodo HTTP + payload shape + response shape + CORS.
|
|
80
399
|
|
|
81
|
-
**Prioridade:** Regra 4 (PARAR) > Regras 1-3 (auto) > incerto -> Regra 4
|
|
400
|
+
**Prioridade:** Regra 4 (PARAR) > Regra 5 (conexao) > Regras 1-3 (auto) > incerto -> Regra 4
|
|
82
401
|
|
|
83
402
|
</deviation_rules>
|
|
84
403
|
|
|
85
404
|
<task_commit>
|
|
86
405
|
## Protocolo de Commit por Tarefa
|
|
87
406
|
|
|
88
|
-
Apos cada tarefa (verificacao
|
|
407
|
+
Apos cada tarefa (verificacao funcional PASSOU, criterios de conclusao atendidos), commitar imediatamente.
|
|
89
408
|
|
|
90
409
|
**1. Verificar:** `git status --short`
|
|
91
410
|
|
|
@@ -127,6 +446,47 @@ Exibir: box `CHECKPOINT: [Tipo]` -> Progresso {X}/{Y} -> Nome da tarefa -> conte
|
|
|
127
446
|
| human-action (1%) | O que foi automatizado + UM passo manual | "feito" |
|
|
128
447
|
</step>
|
|
129
448
|
|
|
449
|
+
<step name="wave_integration_check">
|
|
450
|
+
## Verificacao de Integracao por Wave
|
|
451
|
+
|
|
452
|
+
**Apos TODAS as tasks de uma wave completarem**, verificar que as pecas se conectam:
|
|
453
|
+
|
|
454
|
+
```bash
|
|
455
|
+
# 1. App ainda roda? (hot reload pode ter quebrado)
|
|
456
|
+
curl -s http://localhost:$DEV_PORT/ > /dev/null 2>&1
|
|
457
|
+
if [ $? -ne 0 ]; then
|
|
458
|
+
echo "DEV SERVER CAIU — reiniciando"
|
|
459
|
+
npm run dev > /tmp/up-dev-server.log 2>&1 &
|
|
460
|
+
DEV_PID=$!
|
|
461
|
+
sleep 5
|
|
462
|
+
fi
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
Se Playwright disponivel:
|
|
466
|
+
```
|
|
467
|
+
# 2. Navegar para pagina principal da feature
|
|
468
|
+
browser_navigate(url: "http://localhost:$DEV_PORT/[rota-principal]")
|
|
469
|
+
browser_snapshot()
|
|
470
|
+
|
|
471
|
+
# 3. Verificar que nao ha erros de console
|
|
472
|
+
browser_console_messages(level: "error")
|
|
473
|
+
|
|
474
|
+
# 4. Verificar que dados carregam (se aplicavel)
|
|
475
|
+
# O snapshot deve mostrar dados reais, nao loading infinito ou erro
|
|
476
|
+
|
|
477
|
+
# 5. Tentar interacao basica
|
|
478
|
+
browser_click(ref: "[botao-principal]") # se existir
|
|
479
|
+
browser_snapshot() # verificar resultado
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
**Se integracao quebrada:**
|
|
483
|
+
- Identificar: e problema de URL? payload? auth? CORS?
|
|
484
|
+
- Corrigir (Regra 5 de desvio)
|
|
485
|
+
- Re-testar
|
|
486
|
+
- Commitar fix: `fix({fase}-{plano}): corrigir integracao [descricao]`
|
|
487
|
+
|
|
488
|
+
</step>
|
|
489
|
+
|
|
130
490
|
<step name="create_summary">
|
|
131
491
|
Criar `{fase}-{plano}-SUMMARY.md` em `.plano/fases/XX-nome/`.
|
|
132
492
|
|
|
@@ -135,6 +495,28 @@ Criar `{fase}-{plano}-SUMMARY.md` em `.plano/fases/XX-nome/`.
|
|
|
135
495
|
Titulo: `# Fase [X] Plano [Y]: [Nome] Resumo`
|
|
136
496
|
|
|
137
497
|
One-liner SUBSTANCIAL: "Auth JWT com rotacao de refresh usando jose library" nao "Autenticacao implementada"
|
|
498
|
+
|
|
499
|
+
**NOVO — Secao de verificacao funcional no SUMMARY:**
|
|
500
|
+
|
|
501
|
+
```markdown
|
|
502
|
+
## Verificacao Funcional
|
|
503
|
+
|
|
504
|
+
| Task | Tipo | Verificacao | Resultado |
|
|
505
|
+
|------|------|------------|-----------|
|
|
506
|
+
| 1 | backend | curl POST /api/messages → 201 | PASSOU |
|
|
507
|
+
| 2 | frontend | /chat renderiza, input existe | PASSOU |
|
|
508
|
+
| 3 | integracao | enviar mensagem → aparece na lista | PASSOU |
|
|
509
|
+
| 4 | backend | curl GET /api/messages → 200 + array | PASSOU |
|
|
510
|
+
|
|
511
|
+
**Dev server:** ativo na porta {PORT}
|
|
512
|
+
**Problemas de conexao frontend↔backend:** {0 | N encontrados e corrigidos}
|
|
513
|
+
```
|
|
514
|
+
</step>
|
|
515
|
+
|
|
516
|
+
<step name="cleanup_dev_server">
|
|
517
|
+
**NAO matar o dev server ao finalizar o plano.**
|
|
518
|
+
O proximo plano da mesma fase vai precisar dele.
|
|
519
|
+
O servidor so e morto no final da FASE (pelo orquestrador executar-fase.md).
|
|
138
520
|
</step>
|
|
139
521
|
|
|
140
522
|
<step name="update_current_position">
|
|
@@ -169,6 +551,20 @@ node "$HOME/.claude/up/bin/up-tools.cjs" commit "docs({fase}-{plano}): completar
|
|
|
169
551
|
</step>
|
|
170
552
|
|
|
171
553
|
<step name="offer_next">
|
|
554
|
+
|
|
555
|
+
**Se $BUILDER_MODE = true:**
|
|
556
|
+
NAO mostrar menus ou sugerir proximos passos. Retornar resultado silenciosamente:
|
|
557
|
+
```markdown
|
|
558
|
+
## PLANO COMPLETO
|
|
559
|
+
|
|
560
|
+
**Plano:** {fase}-{plano}
|
|
561
|
+
**Tarefas:** {completadas}/{total}
|
|
562
|
+
**Verificacao funcional:** {passed}/{total}
|
|
563
|
+
```
|
|
564
|
+
O orquestrador do builder controla o que vem depois. FIM.
|
|
565
|
+
|
|
566
|
+
**Se modo normal (interativo):**
|
|
567
|
+
|
|
172
568
|
```bash
|
|
173
569
|
ls -1 .plano/fases/[dir-fase-atual]/*-PLAN.md 2>/dev/null | wc -l
|
|
174
570
|
ls -1 .plano/fases/[dir-fase-atual]/*-SUMMARY.md 2>/dev/null | wc -l
|
|
@@ -185,8 +581,10 @@ ls -1 .plano/fases/[dir-fase-atual]/*-SUMMARY.md 2>/dev/null | wc -l
|
|
|
185
581
|
|
|
186
582
|
<success_criteria>
|
|
187
583
|
- Todas tarefas do PLAN.md completadas
|
|
584
|
+
- **Verificacao funcional passou por task (endpoint responde, pagina renderiza, acao funciona)**
|
|
585
|
+
- **Integracao frontend↔backend verificada**
|
|
188
586
|
- Todas verificacoes passam
|
|
189
|
-
- SUMMARY.md criado com conteudo substancial
|
|
587
|
+
- SUMMARY.md criado com conteudo substancial E secao de verificacao funcional
|
|
190
588
|
- STATE.md atualizado (posicao, decisoes, problemas, sessao)
|
|
191
589
|
- ROADMAP.md atualizado
|
|
192
590
|
</success_criteria>
|