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.
Files changed (58) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +259 -49
  3. package/agents/up-api-tester.md +405 -0
  4. package/agents/up-arquiteto.md +461 -0
  5. package/agents/up-backend-specialist.md +158 -0
  6. package/agents/up-blind-validator.md +259 -0
  7. package/agents/up-clone-crawler.md +234 -0
  8. package/agents/up-clone-design-extractor.md +227 -0
  9. package/agents/up-clone-feature-mapper.md +225 -0
  10. package/agents/up-clone-prd-writer.md +169 -0
  11. package/agents/up-clone-verifier.md +227 -0
  12. package/agents/up-code-reviewer.md +225 -0
  13. package/agents/up-database-specialist.md +152 -0
  14. package/agents/up-devops-agent.md +203 -0
  15. package/agents/up-executor.md +45 -5
  16. package/agents/up-exhaustive-tester.md +348 -0
  17. package/agents/up-frontend-specialist.md +135 -0
  18. package/agents/up-product-analyst.md +192 -0
  19. package/agents/up-qa-agent.md +171 -0
  20. package/agents/up-requirements-validator.md +230 -0
  21. package/agents/up-security-reviewer.md +137 -0
  22. package/agents/up-system-designer.md +332 -0
  23. package/agents/up-technical-writer.md +188 -0
  24. package/agents/up-visual-critic.md +358 -0
  25. package/bin/up-tools.cjs +84 -2
  26. package/commands/clone-builder.md +67 -0
  27. package/commands/dashboard.md +48 -0
  28. package/commands/depurar.md +1 -1
  29. package/commands/mobile-first.md +71 -0
  30. package/commands/modo-builder.md +178 -0
  31. package/commands/ux-tester.md +63 -0
  32. package/package.json +1 -1
  33. package/references/blueprints/audit.md +29 -0
  34. package/references/blueprints/booking.md +49 -0
  35. package/references/blueprints/community.md +48 -0
  36. package/references/blueprints/crm.md +40 -0
  37. package/references/blueprints/dashboard.md +48 -0
  38. package/references/blueprints/data-management.md +42 -0
  39. package/references/blueprints/ecommerce.md +51 -0
  40. package/references/blueprints/marketplace.md +48 -0
  41. package/references/blueprints/notifications.md +32 -0
  42. package/references/blueprints/saas-users.md +50 -0
  43. package/references/blueprints/settings.md +31 -0
  44. package/references/engineering-principles.md +205 -0
  45. package/references/production-requirements.md +106 -0
  46. package/references/state-persistence.md +74 -0
  47. package/templates/builder-defaults.md +73 -0
  48. package/templates/delivery.md +279 -0
  49. package/templates/design-tokens.md +151 -0
  50. package/workflows/builder-e2e.md +501 -0
  51. package/workflows/builder.md +2248 -0
  52. package/workflows/clone-builder.md +320 -0
  53. package/workflows/executar-fase.md +28 -2
  54. package/workflows/executar-plano.md +404 -6
  55. package/workflows/mobile-first.md +692 -0
  56. package/workflows/novo-projeto.md +22 -0
  57. package/workflows/rapido.md +1 -1
  58. 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 com regras de desvio + portoes de autenticacao. Verificar criterios de conclusao. Commitar. Registrar hash para Summary.
62
- - `type="checkpoint:*"`: PARAR -> checkpoint_protocol -> esperar usuario -> continuar apenas apos confirmacao.
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 | PARAR -> apresentar decisao -> rastrear `[Regra 4 - Arquitetural]` | Perguntar usuario |
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 passou, criterios de conclusao atendidos), commitar imediatamente.
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>