up-cc 0.16.1 → 2.0.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 (134) hide show
  1. package/README.md +87 -577
  2. package/package.json +5 -3
  3. package/up/CHANGELOG.md +110 -0
  4. package/up/agents/up-arquiteto.md +95 -39
  5. package/up/agents/up-auditor.md +218 -0
  6. package/up/agents/up-executor.md +94 -31
  7. package/up/agents/up-mapeador-codigo.md +63 -10
  8. package/up/agents/up-pesquisador.md +278 -0
  9. package/up/agents/up-revisor.md +249 -0
  10. package/up/agents/up-sintetizador.md +156 -179
  11. package/up/agents/up-tester.md +280 -0
  12. package/up/agents/up-verificador.md +95 -11
  13. package/up/bin/install.js +182 -19
  14. package/up/bin/lib/core.cjs +17 -43
  15. package/up/bin/lib/github.cjs +495 -0
  16. package/up/bin/lib/multica.cjs +424 -0
  17. package/up/bin/up-tools.cjs +167 -46
  18. package/up/commands/auditar.md +66 -0
  19. package/up/commands/build.md +54 -43
  20. package/up/commands/depurar.md +1 -1
  21. package/up/commands/plan.md +52 -38
  22. package/up/commands/rapido.md +15 -9
  23. package/up/commands/testar.md +81 -122
  24. package/up/commands/up.md +106 -0
  25. package/up/hooks/up-session-start.js +107 -0
  26. package/up/references/engineering-principles.md +1 -1
  27. package/up/references/governance-rules.md +5 -5
  28. package/up/references/production-requirements.md +1 -1
  29. package/up/references/severity-levels.md +2 -2
  30. package/up/references/tdd-evidence-types.md +81 -0
  31. package/up/skills/up-brainstorm/SKILL.md +39 -0
  32. package/up/skills/up-tdd/SKILL.md +39 -0
  33. package/up/skills/up-verificar-antes-de-concluir/SKILL.md +49 -0
  34. package/up/skills/usando-up/SKILL.md +26 -0
  35. package/up/templates/audit-plan.md +3 -3
  36. package/up/templates/audit-report.md +2 -2
  37. package/up/templates/design-tokens.md +2 -2
  38. package/up/workflows/auditar.md +255 -0
  39. package/up/workflows/build.md +600 -386
  40. package/up/workflows/dcrv.md +183 -99
  41. package/up/workflows/governance.md +112 -220
  42. package/up/workflows/plan.md +169 -399
  43. package/up/workflows/rapido.md +7 -1
  44. package/up/workflows/up.md +447 -0
  45. package/up/agents/up-analista-codigo.md +0 -446
  46. package/up/agents/up-api-tester.md +0 -405
  47. package/up/agents/up-architecture-supervisor.md +0 -126
  48. package/up/agents/up-audit-supervisor.md +0 -83
  49. package/up/agents/up-auditor-modernidade.md +0 -378
  50. package/up/agents/up-auditor-performance.md +0 -426
  51. package/up/agents/up-auditor-ux.md +0 -396
  52. package/up/agents/up-backend-specialist.md +0 -175
  53. package/up/agents/up-blind-validator.md +0 -259
  54. package/up/agents/up-chief-architect.md +0 -184
  55. package/up/agents/up-chief-engineer.md +0 -202
  56. package/up/agents/up-chief-operations.md +0 -123
  57. package/up/agents/up-chief-product.md +0 -103
  58. package/up/agents/up-chief-quality.md +0 -211
  59. package/up/agents/up-clone-crawler.md +0 -234
  60. package/up/agents/up-clone-design-extractor.md +0 -227
  61. package/up/agents/up-clone-feature-mapper.md +0 -225
  62. package/up/agents/up-clone-prd-writer.md +0 -169
  63. package/up/agents/up-clone-verifier.md +0 -227
  64. package/up/agents/up-code-reviewer.md +0 -229
  65. package/up/agents/up-consolidador-ideias.md +0 -493
  66. package/up/agents/up-database-specialist.md +0 -169
  67. package/up/agents/up-delivery-auditor.md +0 -247
  68. package/up/agents/up-devops-agent.md +0 -203
  69. package/up/agents/up-execution-supervisor.md +0 -315
  70. package/up/agents/up-exhaustive-tester.md +0 -348
  71. package/up/agents/up-frontend-specialist.md +0 -152
  72. package/up/agents/up-operations-supervisor.md +0 -94
  73. package/up/agents/up-pesquisador-mercado.md +0 -350
  74. package/up/agents/up-pesquisador-projeto.md +0 -358
  75. package/up/agents/up-planning-auditor.md +0 -284
  76. package/up/agents/up-planning-supervisor.md +0 -260
  77. package/up/agents/up-product-analyst.md +0 -192
  78. package/up/agents/up-product-supervisor.md +0 -83
  79. package/up/agents/up-project-ceo.md +0 -352
  80. package/up/agents/up-qa-agent.md +0 -171
  81. package/up/agents/up-quality-supervisor.md +0 -178
  82. package/up/agents/up-requirements-validator.md +0 -230
  83. package/up/agents/up-security-reviewer.md +0 -137
  84. package/up/agents/up-sintetizador-melhorias.md +0 -407
  85. package/up/agents/up-system-designer.md +0 -332
  86. package/up/agents/up-technical-writer.md +0 -188
  87. package/up/agents/up-verification-supervisor.md +0 -111
  88. package/up/agents/up-visual-critic.md +0 -358
  89. package/up/commands/adicionar-fase.md +0 -47
  90. package/up/commands/adicionar-testes.md +0 -145
  91. package/up/commands/ajuda.md +0 -176
  92. package/up/commands/atualizar.md +0 -103
  93. package/up/commands/clone-builder.md +0 -67
  94. package/up/commands/configurar.md +0 -219
  95. package/up/commands/custos.md +0 -67
  96. package/up/commands/dashboard.md +0 -48
  97. package/up/commands/discutir-fase.md +0 -35
  98. package/up/commands/executar-fase.md +0 -40
  99. package/up/commands/ideias.md +0 -49
  100. package/up/commands/iniciar.md +0 -31
  101. package/up/commands/mapear-codigo.md +0 -63
  102. package/up/commands/melhorias.md +0 -45
  103. package/up/commands/mobile-first.md +0 -71
  104. package/up/commands/modo-builder.md +0 -186
  105. package/up/commands/novo-projeto.md +0 -40
  106. package/up/commands/onboard.md +0 -69
  107. package/up/commands/pausar.md +0 -33
  108. package/up/commands/planejar-fase.md +0 -45
  109. package/up/commands/progresso.md +0 -33
  110. package/up/commands/remover-fase.md +0 -34
  111. package/up/commands/resetar.md +0 -27
  112. package/up/commands/retomar.md +0 -35
  113. package/up/commands/saude.md +0 -103
  114. package/up/commands/ux-tester.md +0 -63
  115. package/up/commands/verificar-trabalho.md +0 -35
  116. package/up/workflows/adicionar-fase.md +0 -112
  117. package/up/workflows/builder-e2e.md +0 -501
  118. package/up/workflows/builder.md +0 -3419
  119. package/up/workflows/ceo-intake.md +0 -305
  120. package/up/workflows/ceo-updates.md +0 -183
  121. package/up/workflows/clone-builder.md +0 -320
  122. package/up/workflows/discutir-fase.md +0 -336
  123. package/up/workflows/executar-fase.md +0 -358
  124. package/up/workflows/executar-plano.md +0 -659
  125. package/up/workflows/ideias.md +0 -381
  126. package/up/workflows/iniciar.md +0 -235
  127. package/up/workflows/melhorias.md +0 -409
  128. package/up/workflows/mobile-first.md +0 -692
  129. package/up/workflows/novo-projeto.md +0 -778
  130. package/up/workflows/planejar-fase.md +0 -293
  131. package/up/workflows/progresso.md +0 -226
  132. package/up/workflows/retomar.md +0 -231
  133. package/up/workflows/ux-tester.md +0 -526
  134. package/up/workflows/verificar-trabalho.md +0 -308
@@ -1,19 +1,40 @@
1
1
  <purpose>
2
2
  Workflow `/up:build` — Execucao de projeto previamente planejado.
3
3
 
4
- Requer `.plano/PLAN-READY.md` (gerado por `/up:plan`).
4
+ Requer `.plano/PLAN-READY.md` (gerado por `/up:plan`). Conduz Build (loop por fase) + Quality Gate
5
+ global + Delivery. Pode executar projeto planejado em outro runtime — confia no PLAN-READY.md.
5
6
 
6
- Conduz Estagios 3 (Build) + 4 (Quality Gate) + 4.5 (Delivery Audit) + 5 (Delivery).
7
-
8
- Pode executar projeto planejado em outro runtime — confia no PLAN-READY.md.
7
+ Este e o MOTOR UNICO de execucao do redesign v2. Absorveu executar-fase.md, executar-plano.md e a
8
+ parte de execucao do modo-builder (builder.md, que foi deletado).
9
9
  </purpose>
10
10
 
11
+ <migrado_de_builder>
12
+ O antigo builder.md (3416 linhas) foi deletado. Capacidades reais migradas para ca (ou pro up.md/plan.md),
13
+ SEM trazer governanca hierarquica/supervisores/CEO:
14
+
15
+ - **Intake autonomo de projeto + pesquisa inline de stack:** migrado para `workflows/up.md` (Passo 2,
16
+ classify-task escala o brainstorm; greenfield spawna 4x up-pesquisador; modo light = mini-scan inline).
17
+ `/up:build` assume que isso ja rodou e que existe PLAN-READY.md.
18
+ - **Crash recovery via LOCK.md:** preservado aqui (Estagio 0.3).
19
+ - **Routing por tipo de plano (frontend/backend/database/misto):** preservado (Estagio 3.2), AGORA via
20
+ CONTEXTO no `up-executor` (carrega skill/ref de dominio sob demanda), sem agentes specialist separados.
21
+ - **Pre-inline de contexto via `up-tools.cjs context`:** preservado (Estagio 3.3), economiza tokens por spawn.
22
+ - **Verification ladder deterministica (verify-static antes do verificador-LLM):** preservada (Estagio 3.6).
23
+ - **E2E + DCRV por fase:** delega a `@~/.claude/up/workflows/dcrv.md` (que absorveu builder-e2e.md).
24
+ - **Modo light (pipeline enxuto):** o conceito de "feature pequena = menos cerimonia" agora e decidido
25
+ upstream pelo classify-task (em up.md). Aqui o pipeline e o mesmo; o cap de rework e 1 round.
26
+
27
+ NAO migrado (morto de proposito): CEO/chiefs/supervisores, governanca hierarquica, re-plans com 2 niveis
28
+ de aprovacao LLM, updates periodicos ao dono.
29
+ </migrado_de_builder>
30
+
11
31
  <core_principle>
12
- Este workflow assume que o projeto foi completamente planejado por `/up:plan`.
32
+ Pipeline final por fase (redesign v2):
13
33
 
14
- Diferenca do builder:
15
- - Builder: planeja + executa em sequencia, no mesmo runtime
16
- - Build: SO executa, le PLAN-READY.md gerado anteriormente (mesmo runtime ou outro)
34
+ ```
35
+ [up-planejador (replan LOCAL, so se preciso)] -> up-executor (roteia por contexto) -> up-verificador
36
+ -> [GATE approvals.log] -> up-revisor -> marcar completa
37
+ ```
17
38
 
18
39
  **Model routing configuravel (v0.9.0+):**
19
40
  Antes de spawnar qualquer agente, resolver o modelo:
@@ -21,41 +42,41 @@ Antes de spawnar qualquer agente, resolver o modelo:
21
42
  MODEL=$(node "$HOME/.claude/up/bin/up-tools.cjs" config resolve-model {agent-name} --raw)
22
43
  ```
23
44
  Se `default`: nao passar `model=`. Se `opus/sonnet/haiku`: passar `model="{MODEL}"` no spawn.
24
- Isso permite que o usuario configure via `/up:configurar` quais agentes usam qual modelo.
25
- Sem configuracao, todos usam o modelo do runtime (comportamento v0.6.0).
26
45
 
27
46
  **Re-plan local permitido (max 2):**
28
- Se durante execucao o execution-supervisor detectar que um plano esta inviavel,
29
- ele pode pedir REQUEST_REPLAN. O planejador local refaz o plano daquela fase.
30
- NUNCA volta pro runtime que planejou originalmente.
31
-
32
- **REGRA ANTI-COLAPSO SEPARACAO RIGIDA DE AGENTES:**
33
-
34
- O LLM tende a otimizar colapsando passos — dar ao mesmo agente tarefas de executar + verificar,
35
- ou pular supervisores por parecer "overhead". Isso e PROIBIDO.
36
-
37
- **Cada passo do Stage 3 DEVE ser um Agent() SEPARADO.**
38
- **NUNCA combinar dois passos em um unico spawn.**
39
- **NUNCA instruir um agente a fazer o trabalho de outro.**
40
-
41
- Exemplo do que NAO fazer:
42
- ```
43
- # ERRADO combina execucao + verificacao
44
- Agent(subagent_type="up-executor", prompt="Executar E verificar a fase...")
45
-
46
- # ERRADO pula supervisor
47
- # (executar e marcar completa sem passar por execution-supervisor)
48
- ```
49
-
50
- **Mecanismo de enforcement: GATES verificaveis.**
51
- Cada supervisor DEVE escrever no `.plano/governance/approvals.log`.
52
- Cada GATE verifica que o log tem a entry esperada.
53
- Se o gate falha, NAO avance — spawne o agente faltante.
54
-
55
- **Pipeline obrigatorio por fase:**
56
- ```
57
- Specialist → [GATE A] → EXECUTION-SUPERVISOR → [GATE B] → Verificador → [GATE C] → VERIFICATION-SUPERVISOR → [GATE D] → E2E + DCRV → CHIEF-ENGINEER → [GATE E] → Marcar completa
58
- ```
47
+ Se durante a execucao ficar claro que um plano e inviavel, o orquestrador pode re-planejar a fase
48
+ LOCALMENTE via `up-planejador` (self-check). NUNCA volta pro runtime que planejou originalmente.
49
+
50
+ **SEPARACAO RIGIDA DE AGENTES:**
51
+ O LLM tende a colapsar passos (mesmo agente executa + verifica). Isso e PROIBIDO. Cada passo do Stage 3
52
+ e um `Agent()` SEPARADO. O enforcement e o GATE deterministico do `approvals.log`
53
+ (ver `@~/.claude/up/workflows/governance.md`), nao uma piramide de supervisores.
54
+
55
+ **GitHub-nativo e o DEFAULT (v2):**
56
+ - **PADRAO (sem flag):** cada fase abre uma worktree + branch `up/fase-NN-slug` e (se houver `gh` + remote)
57
+ uma issue do GitHub; no fim da fase, se a fase tem UI, **sobe o dev server e PEDE aprovacao visual antes de
58
+ mergear** (3.8.0), depois fecha (merge local / PR / deixa / descarta). Isto e o caminho quente.
59
+ Controlado por `config.github_native=true` (default).
60
+ - `--solo`: ESCAPE HATCH sem cerimonia. Forca `github_native=false` SO nesta execucao. Commit atomico na
61
+ branch ATUAL. Zero worktree, zero issue, zero PR, zero rede. (Mesmo comportamento de `/up:rapido`.)
62
+ - **Teste visual antes do merge (`require_visual_test`, default true):** fase de UI sobe dev server e exige
63
+ o dono aprovar na tela ANTES do merge (3.8.0). Projeto em PRODUCAO: deixe ligado (nada sobe sem voce ver).
64
+ - `--auto`: pula o MENU de fechamento. Apos o GATE aprovar, `finish-phase --mode auto` (PR -> merge squash ->
65
+ cleanup). MAS o teste visual (3.8.0) ainda roda se `require_visual_test=true` (so `false` deixa o --auto
66
+ mergear UI sem aprovacao). So faz sentido com github_native ligado.
67
+ - `--board`: espelha status no Multica (espelho de board OPT-IN, BATCHED no fim da onda/fase). NAO ha
68
+ stream ao vivo no fluxo local: o board mostra so o status (`todo -> in_progress -> in_review -> done /
69
+ blocked`), nunca cada tool_use. Chamadas via `up-tools.cjs multica {init|sync|board}` (que usa
70
+ `multica.cjs`, deteccao `uname -s` Mac->`ssh server-ecoup`, FAIL-OPEN: se `multica` indisponivel, avisa
71
+ e segue sem board, nunca crasha). So roda quando `--board` ligado.
72
+
73
+ **FAIL-OPEN universal:** `start-phase`/`finish-phase` detectam `gh` + remote. Faltando qualquer um, degradam
74
+ para git local (worktree local + merge local; issue/PR = null) com aviso, NUNCA crasham. `git worktree` e
75
+ sempre local e funciona offline. Com `--solo` nao ha nem worktree (commit direto na branch atual).
76
+
77
+ **Onde o estado vive:** `git-map.json` e canonico no working dir PRINCIPAL (`.plano/git-map.json`). O `.plano/`
78
+ de cada fase viaja na branch da fase (worktree) e volta pra main no merge. STATE.md permanece a fonte humana
79
+ de "onde estou"; git-map.json e o indice maquina de "onde esta cada fase no GitHub".
59
80
  </core_principle>
60
81
 
61
82
  <process>
@@ -66,21 +87,19 @@ Specialist → [GATE A] → EXECUTION-SUPERVISOR → [GATE B] → Verificador
66
87
 
67
88
  ```bash
68
89
  if [ ! -f ~/.claude/up/owner-profile.md ]; then
69
- echo "Owner profile nao existe NESTE runtime. Rodando /up:onboard..."
70
- # Delegar pro workflow onboarding.md
90
+ echo "Owner profile nao existe NESTE runtime. Rodando onboarding..."
91
+ # Delegar pro workflow @~/.claude/up/workflows/onboarding.md
71
92
  fi
72
93
  ```
73
94
 
74
- **IMPORTANTE:** O profile e do RUNTIME ATUAL, nao do runtime que planejou. Cada runtime tem seu profile.
95
+ O profile e do RUNTIME ATUAL, nao do runtime que planejou.
75
96
 
76
97
  ### 0.2 PLAN-READY.md Existe?
77
98
 
78
99
  ```bash
79
100
  if [ ! -f .plano/PLAN-READY.md ]; then
80
101
  echo "ERRO: Este projeto nao foi planejado."
81
- echo ""
82
- echo "Use /up:plan primeiro pra planejar o projeto."
83
- echo "Ou /up:modo-builder pra planejar e executar de uma vez."
102
+ echo "Use /up:plan primeiro. Ou /up \"descricao\" -> /up:plan -> /up:build."
84
103
  exit 1
85
104
  fi
86
105
  ```
@@ -91,7 +110,8 @@ fi
91
110
  ls .plano/LOCK.md 2>/dev/null
92
111
  ```
93
112
 
94
- Se LOCK.md existe e `stage: build`: retomar.
113
+ Se LOCK.md existe e `stage: build`: retomar do passo/fase correto (pular o que ja tem SUMMARY/VERIFICATION).
114
+ Se `status: completed`: deletar LOCK.md e iniciar normalmente.
95
115
 
96
116
  ## Estagio V: VALIDACAO LIGHT
97
117
 
@@ -100,7 +120,6 @@ Se LOCK.md existe e `stage: build`: retomar.
100
120
  ### V.1 Parsear PLAN-READY.md
101
121
 
102
122
  ```bash
103
- # Extrair frontmatter
104
123
  PLANNED_RUNTIME=$(grep "runtime:" .plano/PLAN-READY.md | head -1 | awk '{print $2}')
105
124
  INTENDED_RUNTIME=$(grep -A1 "intended_execution:" .plano/PLAN-READY.md | tail -1 | awk '{print $2}')
106
125
  TOTAL_PHASES=$(grep "total_phases:" .plano/PLAN-READY.md | awk '{print $2}')
@@ -110,15 +129,13 @@ CONFIDENCE=$(grep "planning_confidence:" .plano/PLAN-READY.md | awk '{print $2}'
110
129
  ### V.2 Validacao de Compatibilidade
111
130
 
112
131
  ```bash
113
- CURRENT_RUNTIME="claude-code" # detectar
132
+ CURRENT_RUNTIME="claude-code"
114
133
  [ -d ~/.config/opencode ] && CURRENT_RUNTIME="opencode"
115
134
  [ -d ~/.gemini ] && CURRENT_RUNTIME="gemini-cli"
116
135
 
117
- # Se intended_execution especifica um runtime e nao e o atual, alertar
118
136
  if [ "$INTENDED_RUNTIME" != "same" ] && [ "$INTENDED_RUNTIME" != "any" ] && [ "$INTENDED_RUNTIME" != "$CURRENT_RUNTIME" ]; then
119
- echo "AVISO: Plano gerado pra $INTENDED_RUNTIME, voce esta em $CURRENT_RUNTIME"
120
- echo "Pode haver incompatibilidades. Continuar mesmo assim?"
121
- # AskUserQuestion sim/nao
137
+ echo "AVISO: Plano gerado pra $INTENDED_RUNTIME, voce esta em $CURRENT_RUNTIME. Continuar?"
138
+ # AskUserQuestion sim/nao (output direto, sem CEO)
122
139
  fi
123
140
  ```
124
141
 
@@ -133,141 +150,229 @@ fi
133
150
 
134
151
  ### V.4 Validar Planos Listados
135
152
 
136
- Pra cada plano listado em PLAN-READY.md, checar se arquivo existe:
137
-
138
153
  ```bash
139
- # Extrair lista de planos do PLAN-READY.md
140
154
  PLANS=$(grep -oE "fases/[0-9]+-[a-z-]+/[0-9]+-[0-9]+-PLAN.md" .plano/PLAN-READY.md)
141
-
142
155
  for plan in $PLANS; do
143
- if [ ! -f ".plano/$plan" ]; then
144
- echo "FALTANDO: $plan"
145
- FAIL=1
146
- fi
156
+ [ ! -f ".plano/$plan" ] && echo "FALTANDO: $plan" && FAIL=1
147
157
  done
148
158
  ```
149
159
 
150
160
  ### V.5 Decidir
151
161
 
152
- **Se todos arquivos OK:** prosseguir.
162
+ **Tudo OK:** prosseguir. **Falta algo:** alertar o dono (AskUserQuestion), oferecer re-planejar
163
+ localmente (`/up:plan`) ou abortar.
153
164
 
154
- **Se algo falta:**
155
- - Alertar usuario
156
- - Oferecer: "Posso planejar localmente?" (re-roda /up:plan)
157
- - Ou abortar
165
+ ## Estagio C: CONFIRMACAO DO DONO (orquestrador, sem CEO)
158
166
 
159
- ## Estagio C: CEO CONFIRMA
167
+ Output direto do orquestrador (le owner-profile pra tom):
160
168
 
161
- Spawnar CEO local:
169
+ ```
170
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
171
+ UP > BUILD
172
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
162
173
 
163
- ```python
164
- Agent(
165
- subagent_type="up-project-ceo",
166
- prompt="""
167
- Confirmar execucao de projeto previamente planejado.
168
-
169
- <files_to_read>
170
- - ~/.claude/up/owner-profile.md (perfil LOCAL deste runtime)
171
- - .plano/BRIEFING.md (briefing original)
172
- - .plano/PLAN-READY.md (resumo do planejamento)
173
- - .plano/AUDIT-PLAN.md (audit do planejamento)
174
- - .plano/PENDING.md
175
- </files_to_read>
176
-
177
- Apresentar ao dono:
178
- - "Detectei projeto planejado em {runtime} por {ceo_name_anterior}"
179
- - Resumo: N fases, M planos
180
- - Planning confidence: X/100
181
- - Pendencias conhecidas
182
- - "Iniciar execucao? (enter pra continuar)"
183
-
184
- Se dono confirmar: prosseguir.
185
- Se recusar: abortar.
186
- """
187
- )
174
+ Projeto planejado em {runtime}.
175
+ Resumo: {N} fases, {M} planos. Planning confidence: {X}/100.
176
+ Pendencias conhecidas: {de PENDING.md}.
177
+
178
+ Modo git: {GITHUB_MODE} (GitHub-nativo e o default; --solo desliga; --auto pula o menu)
179
+ ```
180
+
181
+ Resolver `GITHUB_MODE` antes do banner:
182
+
183
+ ```bash
184
+ # --solo forca github_native=false SO nesta execucao
185
+ if [ "$SOLO" = "true" ]; then
186
+ GITHUB_NATIVE=false
187
+ else
188
+ GITHUB_NATIVE=$(node "$HOME/.claude/up/bin/up-tools.cjs" config get github_native --raw 2>/dev/null)
189
+ [ -z "$GITHUB_NATIVE" ] && GITHUB_NATIVE=true # default TRUE
190
+ fi
191
+
192
+ if [ "$GITHUB_NATIVE" = "true" ]; then
193
+ GITHUB_MODE="GitHub-nativo (worktree + issue + PR/menu por fase)"
194
+ [ "$AUTO" = "true" ] && GITHUB_MODE="GitHub-nativo --auto (PR + merge squash automatico)"
195
+ else
196
+ GITHUB_MODE="--solo (commit atomico na branch atual, sem worktree/issue/PR)"
197
+ fi
198
+
199
+ # --board liga o espelho Multica (OPT-IN). So tem efeito se passado explicitamente.
200
+ BOARD=false
201
+ [ "$BOARD_FLAG" = "true" ] && BOARD=true
202
+ [ "$BOARD" = "true" ] && GITHUB_MODE="$GITHUB_MODE + Multica board (espelho de status, batched, fail-open)"
188
203
  ```
189
204
 
190
- ## Estagio 3: BUILD (loop por fase com GATES verificaveis)
205
+ Confirmar via AskUserQuestion ("Iniciar execucao?"). Se recusar: abortar.
206
+
207
+ ## Estagio 3: BUILD (loop por fase — com GATE deterministico)
191
208
 
192
- **Inicializar governance:**
209
+ **Inicializar governance** (ver `@~/.claude/up/workflows/governance.md`):
193
210
  ```bash
194
211
  mkdir -p .plano/governance
195
212
  touch .plano/governance/approvals.log
196
- echo "# Build governance initialized at $(date -u +%Y-%m-%dT%H:%M:%SZ)" >> .plano/governance/approvals.log
213
+ [ -s .plano/governance/approvals.log ] || \
214
+ echo "# Build governance initialized at $(date -u +%Y-%m-%dT%H:%M:%SZ)" >> .plano/governance/approvals.log
215
+ ```
216
+
217
+ **Inicializar board no Multica (so se `--board`, UMA vez no inicio do projeto):**
218
+ `multica init` garante o `project` no Multica + a issue-pai (e as issues-filhas por fase, se `/up:plan`
219
+ ja as criou) e grava `metadata up_project=<repo>`. FAIL-OPEN: se `multica` indisponivel ou der erro,
220
+ avisa e segue sem board (nunca crasha o build). Deteccao `uname -s` fica dentro de `multica.cjs`.
221
+
222
+ ```bash
223
+ if [ "$BOARD" = "true" ]; then
224
+ # init = ensureProject + issue-pai (idempotente; reconcilia via metadata up_project).
225
+ MULTICA_INIT=$(node "$HOME/.claude/up/bin/up-tools.cjs" multica init --raw 2>/dev/null) \
226
+ || echo "AVISO: Multica indisponivel (init). Seguindo sem board."
227
+ fi
197
228
  ```
198
229
 
199
230
  Para cada fase em ROADMAP.md (em ordem):
200
231
 
201
- ### 3.1 Carregar Plano da Fase
232
+ ### 3.0 Abrir a fase (GitHub-nativo - DEFAULT)
233
+
234
+ A menos que `--solo` (ou `github_native=false`), abrir worktree + branch + issue ANTES de executar a fase.
235
+
236
+ ```bash
237
+ PHASE_SLUG=$(node "$HOME/.claude/up/bin/up-tools.cjs" slug "{phase_name}" --raw)
238
+
239
+ if [ "$GITHUB_NATIVE" = "true" ]; then
240
+ # Cria worktree + branch up/fase-NN-slug; se gh+remote, cria issue. Escreve .plano/git-map.json.
241
+ # Fail-open: sem gh/remote -> worktree local, issue=null, aviso (nunca crasha).
242
+ START=$(node "$HOME/.claude/up/bin/up-tools.cjs" github start-phase \
243
+ --phase {phase_number} --slug "$PHASE_SLUG" --raw)
244
+ if [[ "$START" == @file:* ]]; then START=$(cat "${START#@file:}"); fi
245
+ WORKTREE=$(echo "$START" | grep -oE '"worktree"[^,}]*' | sed 's/.*: *"//;s/"//')
246
+ BRANCH=$(echo "$START" | grep -oE '"branch"[^,}]*' | sed 's/.*: *"//;s/"//')
247
+ ISSUE=$(echo "$START" | grep -oE '"issue"[^,}]*' | sed 's/.*: *//')
248
+ echo "Fase {phase_number}: branch=$BRANCH worktree=$WORKTREE issue=${ISSUE:-null}"
249
+ else
250
+ # --solo: sem worktree/issue. Trabalho acontece na branch atual.
251
+ WORKTREE="$(pwd)"; BRANCH="$(git rev-parse --abbrev-ref HEAD 2>/dev/null)"; ISSUE=""
252
+ fi
253
+ ```
254
+
255
+ **Entrar na worktree (so se github_native):** o trabalho da fase (executor, commits) acontece
256
+ DENTRO de `$WORKTREE`. Preferir a tool nativa do harness **EnterWorktree** apontando para `$WORKTREE`; se
257
+ indisponivel, a worktree ja foi criada por `start-phase` (basta usar `--cwd "$WORKTREE"` nos comandos
258
+ `up-tools.cjs` e `cd "$WORKTREE"` antes de `git add/commit`). O `.plano/` da fase viaja na branch da fase;
259
+ `git-map.json` permanece canonico no working dir principal. Ao terminar a fase usar **ExitWorktree** (ou
260
+ voltar `cd` para o repo principal) antes de atualizar `git-map.json` na main.
261
+
262
+ > Em `--solo`, IGNORAR EnterWorktree/ExitWorktree: tudo na branch atual.
263
+
264
+ **Multica: marcar a fase em execucao (so se `--board`, 1 chamada na ENTRADA da fase).**
265
+ Uma transicao por fase (nao por microtransicao): status `in_progress` + metadata `gh_issue`/`branch`.
266
+ FAIL-OPEN: erro ou `multica` indisponivel -> avisa e segue.
267
+
268
+ ```bash
269
+ if [ "$BOARD" = "true" ]; then
270
+ node "$HOME/.claude/up/bin/up-tools.cjs" multica sync \
271
+ --phase {phase_number} --status in_progress \
272
+ --gh-issue "${ISSUE:-}" --branch "${BRANCH:-}" --raw 2>/dev/null \
273
+ || echo "AVISO: Multica indisponivel (sync in_progress fase {phase_number}). Seguindo."
274
+ fi
275
+ ```
276
+
277
+ ### 3.1 Descobrir planos + waves da fase (MULTI-PLANO)
278
+
279
+ Uma fase tem N planos agrupados em WAVES. O motor de waves vive em `up-tools.cjs`; aqui so o consumimos.
280
+ NAO existe mais "1 plano por fase" (era a regressao do `head -1`): descobrimos TODOS os planos e o
281
+ agrupamento por wave do disco.
282
+
283
+ Os planos vivem DENTRO de `$WORKTREE` (a `.plano/` da fase viaja na branch da fase). Por isso TODA chamada
284
+ de descoberta usa `--cwd "$WORKTREE"` (em `--solo`, `$WORKTREE` = repo principal, entao funciona igual).
202
285
 
203
286
  ```bash
204
- PHASE_DIR=$(ls -d .plano/fases/{phase_number}-* 2>/dev/null)
205
- PLAN=$(ls "$PHASE_DIR"/*-PLAN.md | head -1)
287
+ # (a) Metadados da fase + flag de paralelizacao (config). Trata @file: (saida > 50KB).
288
+ INIT=$(node "$HOME/.claude/up/bin/up-tools.cjs" init executar-fase {phase_number} --cwd "$WORKTREE" --raw)
289
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
290
+ # init executar-fase retorna: phase_found, phase_dir, phase_number, phase_name, phase_slug,
291
+ # plans[] (nomes de arquivo), incomplete_plans[], plan_count, incomplete_count, paralelizacao, commit_docs.
292
+ PHASE_DIR="$WORKTREE/$(echo "$INIT" | grep -oE '"phase_dir"[^,}]*' | sed 's/.*: *"//;s/"//')"
293
+ PARALLELIZATION=$(echo "$INIT" | grep -oE '"paralelizacao"[^,}]*' | grep -oE '(true|false)')
294
+ PLAN_COUNT=$(echo "$INIT" | grep -oE '"plan_count"[^,}]*' | grep -oE '[0-9]+')
295
+ [ -z "$PARALLELIZATION" ] && PARALLELIZATION=true
296
+ [ "$PLAN_COUNT" = "0" ] && echo "GATE A FALHOU: sem planos na Fase {phase_number}." && exit 1
297
+
298
+ # (b) Inventario com agrupamento por WAVE (este e o motor de waves real).
299
+ PLAN_INDEX=$(node "$HOME/.claude/up/bin/up-tools.cjs" phase-plan-index {phase_number} --cwd "$WORKTREE" --raw)
300
+ if [[ "$PLAN_INDEX" == @file:* ]]; then PLAN_INDEX=$(cat "${PLAN_INDEX#@file:}"); fi
301
+ # phase-plan-index retorna: phase, plans[] (cada: id, wave [int], autonomous [bool], objective,
302
+ # files_modified[], task_count, has_summary [bool]), waves (map wave->[ids]), incomplete[], has_checkpoints.
206
303
  ```
207
304
 
208
- ### 3.2 Detectar Tipo de Plano (Specialist Routing)
305
+ Parsear de `$PLAN_INDEX`: a lista `plans[]` e o mapa `waves` (chave = numero da wave, valor = ids dos
306
+ planos daquela wave). Ordenar as waves por numero CRESCENTE. Para resolver o arquivo de um plano a partir
307
+ do id: `PLAN="$PHASE_DIR/${id}-PLAN.md"` (fallback `"$PHASE_DIR/PLAN.md"` se id vazio).
308
+
309
+ > Por que paralelizar dentro da wave e SEGURO: o agrupamento por wave ja garante que os planos da MESMA
310
+ > wave sao INDEPENDENTES entre si (arquivos disjuntos, sem dependencia mutua). Qualquer plano que dependa
311
+ > de outro cai numa wave POSTERIOR. Entao rodar todos os planos de uma wave em paralelo nunca causa
312
+ > conflito de escrita. Waves rodam SEMPRE em ordem (a wave N+1 so comeca quando a wave N inteira termina).
313
+
314
+ ### 3.2 + 3.3 LOOP DE WAVES: detectar tipo (por plano) + spawnar executor(es)
209
315
 
210
- Ler o frontmatter do plano pra determinar qual specialist usar:
211
- - Frontend tasks → up-frontend-specialist
212
- - Backend tasks → up-backend-specialist
213
- - Database tasks → up-database-specialist
214
- - Misto → up-executor
316
+ Iterar as waves em ordem crescente. Para CADA wave:
215
317
 
216
- ### 3.3 Spawnar Specialist (PASSO 1 Agent SEPARADO)
318
+ 1. **Selecionar os planos da wave que ainda NAO tem SUMMARY** (resume): pular todo plano com
319
+ `has_summary: true` no `$PLAN_INDEX` (idempotencia/retomada). Se a wave inteira ja esta concluida,
320
+ anuncia e pula pra proxima wave.
217
321
 
218
- **Wave 2 (v0.11+) pre-inline context:**
219
- ANTES do spawn, montar contexto via `up-tools.cjs context`. Isso injeta
220
- PLAN, STATE, config, governance comprimida, engineering principles,
221
- requirements-slice direto no prompt. O agente NAO refaz Read desses
222
- arquivos. Economiza ~30k tokens por spawn.
322
+ 2. **Para CADA plano selecionado da wave, montar contexto e detectar tipo (PRE-spawn, por plano):**
223
323
 
224
324
  ```bash
225
- SPECIALIST_AGENT="up-executor" # ou specialist baseado em type do plano
325
+ # Roda UMA VEZ por plano da wave (PLAN = $PHASE_DIR/<id>-PLAN.md).
326
+ EXECUTOR_AGENT="up-executor" # SEMPRE up-executor (Onda 2: sem specialists separados)
226
327
 
227
- # Wave 6+ manifest filtra refs por papel
328
+ # 3.2 (por plano): tipo apenas informa o executor qual dominio carregar; o agente nao muda.
329
+ PLAN_TYPE=$(grep -oE '^type:[[:space:]]*[a-z-]+' "$PLAN" | head -1 | sed 's/type:[[:space:]]*//')
330
+ EXECUTOR_DOMAIN="$PLAN_TYPE" # frontend|backend|database|misto (vazio = misto)
331
+
332
+ # Pre-inline de contexto (economiza ~30k tokens/spawn), por plano:
228
333
  CTX=$(node "$HOME/.claude/up/bin/up-tools.cjs" context \
229
334
  --plan "${PLAN}" \
230
335
  --state \
231
336
  --config \
232
337
  --requirements "${PHASE_NUMBER}" \
233
- --manifest "${SPECIALIST_AGENT}" \
234
- --raw)
338
+ --manifest "${EXECUTOR_AGENT}" \
339
+ --cwd "$WORKTREE" --raw)
235
340
 
236
- # Wave 5+ — complexity-aware model routing per plan
237
341
  MODEL=$(node "$HOME/.claude/up/bin/up-tools.cjs" resolve-model-for-plan \
238
- "${PLAN}" "${SPECIALIST_AGENT}" --raw)
239
- CLASSIFY=$(node "$HOME/.claude/up/bin/up-tools.cjs" classify-task "${PLAN}" --raw)
240
- COMPLEXITY=$(echo "$CLASSIFY" | grep -oE '"complexity"[^,]+' | grep -oE '"(simple|standard|complex)"' | tr -d '"')
241
- SCORE=$(echo "$CLASSIFY" | grep -oE '"score"\s*:\s*[0-9]+' | grep -oE '[0-9]+')
242
-
243
- # Wave 6+ — Iron rule: validar plan
244
- VALIDATE=$(node "$HOME/.claude/up/bin/up-tools.cjs" validate-plan "${PLAN}" --raw)
245
- VALIDATE_PASS=$(echo "$VALIDATE" | grep -oE '"pass"\s*:\s*(true|false)' | grep -oE '(true|false)')
246
- if [ "$VALIDATE_PASS" = "false" ]; then
247
- echo "IRON RULE FALHOU: Plan ${PLAN} excede limites. Voltando pro planejador."
248
- echo "$VALIDATE" | grep -A 20 'suggestions'
249
- exit 1
250
- fi
251
-
252
- node "$HOME/.claude/up/bin/up-tools.cjs" routing-log \
253
- --plan "${PLAN}" --agent "${SPECIALIST_AGENT}" --model "${MODEL}" \
254
- --complexity "${COMPLEXITY}" --score "${SCORE}" --outcome pending
342
+ "${PLAN}" "${EXECUTOR_AGENT}" --cwd "$WORKTREE" --raw)
255
343
  ```
256
344
 
345
+ 3. **Spawnar o(s) executor(es) da wave:**
346
+ - **Se `PARALLELIZATION=true`:** spawnar TODOS os executores da wave EM PARALELO (multiplos `Agent()`
347
+ numa UNICA mensagem do orquestrador, um por plano selecionado da wave).
348
+ - **Se `PARALLELIZATION=false`:** spawnar os executores da wave um por vez (sequencial), esperando cada
349
+ um antes do proximo.
350
+
351
+ O prompt de cada `Agent` e o bloco abaixo, parametrizado POR PLANO (`{PLAN}`, `{EXECUTOR_DOMAIN}`,
352
+ `{CTX}` daquele plano). Um executor = um plano.
353
+
257
354
  ```python
258
355
  Agent(
259
- subagent_type="{up-specialist}",
356
+ subagent_type="up-executor",
260
357
  prompt=f"""
261
- Executar Plano da Fase {phase_number}.
262
-
358
+ Executar o Plano {PLAN} (Fase {phase_number}, wave {wave}).
359
+
360
+ Tipo do plano (dominio a carregar por contexto): {EXECUTOR_DOMAIN}
361
+ Roteie POR CONTEXTO conforme o tipo: frontend -> carregar skill/ref de UI/CSS e DESIGN-TOKENS;
362
+ backend -> ref de API/server; database -> ref de schema/migrations; misto -> conforme cada tarefa.
363
+ NAO existem agentes specialist separados: voce e o unico executor e adapta ao dominio.
364
+
365
+ Escopo: SOMENTE este plano. Outros planos da mesma wave rodam em paralelo em arquivos disjuntos;
366
+ NAO toque em arquivos fora dos <files> das tarefas DESTE plano.
367
+
263
368
  <prompt_context>
264
369
  {CTX}
265
370
  </prompt_context>
266
-
371
+
267
372
  <production_requirements_compressed>
268
- Categorias a respeitar (71 requisitos no total):
269
- - UIST (UI States): loading/error/empty/success em TODA operacao async
270
- - ERR (Error handling): boundaries, try/catch, sessao expirada, 404
373
+ Categorias a respeitar (71 requisitos):
374
+ - UIST: loading/error/empty/success em TODA operacao async
375
+ - ERR: boundaries, try/catch, sessao expirada, 404
271
376
  - PERF: lazy loading, code split, debounce, pagination > 20 items, cache
272
377
  - FORM: validacao inline, mensagens especificas, autofocus, mascaras
273
378
  - RESP: 375px funcional, touch 44x44, hamburger mobile
@@ -275,175 +380,102 @@ Agent(
275
380
  - SEC: rotas protegidas, CSRF, XSS, rate limit, env vars, RLS
276
381
  - POLISH: hover, transicoes 150-300ms, design tokens
277
382
  </production_requirements_compressed>
278
-
383
+
279
384
  <files_to_read>
280
- O contexto principal ja esta no <prompt_context> acima. Ler do disco APENAS:
385
+ O contexto principal ja esta no <prompt_context>. Ler do disco APENAS:
281
386
  - ./CLAUDE.md (se existir)
282
- - .plano/fases/{phase_number}/PHASE.md (se existir, complemento curto)
387
+ - .plano/fases/{phase_number}/PHASE.md (se existir)
283
388
  - .plano/DESIGN-TOKENS.md (so se frontend e existir)
284
- - Arquivos referenciados em <files> das tarefas (codigo a editar)
285
-
286
- TIER 3 — Sob demanda apenas:
287
- - .plano/PROJECT.md (so se precisar visao geral)
288
- - .plano/SYSTEM-DESIGN.md (so se decisao de arquitetura aparecer)
289
- - .plano/REQUIREMENTS.md (so se a slice nao tiver info suficiente)
290
-
291
- NAO refazer Read em PLAN, STATE.md, config.json, REQUIREMENTS-SLICE.md,
292
- engineering-principles — ja estao inline em <prompt_context>.
389
+ - Arquivos referenciados em <files> das tarefas DESTE plano (codigo a editar)
390
+
391
+ Sob demanda apenas: .plano/PROJECT.md, .plano/SYSTEM-DESIGN.md, .plano/REQUIREMENTS.md
392
+ NAO refazer Read em PLAN/STATE/config/REQUIREMENTS-SLICE/engineering-principles (ja inline).
293
393
  </files_to_read>
294
-
295
- Implementar todas as tarefas. Commitar atomicamente.
296
- Gerar SUMMARY.md.
394
+
395
+ Implementar todas as tarefas DESTE plano. Se o plano pedir, gerar tambem artefatos de
396
+ prod/docs/testes inline (papeis de devops/technical-writer/qa absorvidos pelo executor).
397
+ Commitar atomicamente. Gerar o SUMMARY.md DESTE plano.
297
398
  """
298
399
  )
299
400
  ```
300
401
 
301
- ### --- GATE A: Verificar que execucao produziu artefatos ---
302
-
303
- ```bash
304
- echo "=== GATE A: Verificando artefatos da execucao (Fase ${PHASE_NUMBER}) ==="
305
- SUMMARY_COUNT=$(ls ${PHASE_DIR}/*-SUMMARY.md 2>/dev/null | wc -l)
306
- [ "$SUMMARY_COUNT" -eq 0 ] && echo "GATE A FALHOU: Nenhum SUMMARY.md. Re-executar specialist." && exit 1
307
- echo "GATE A OK: ${SUMMARY_COUNT} SUMMARY(s)"
308
- ```
402
+ 4. **Esperar TODOS os executores da wave terminarem** antes de iniciar a proxima wave (`Agent`/`Task`
403
+ bloqueia ate retornar; a barreira da wave e o ponto onde se espera todos).
309
404
 
310
- ### --- Patch routing outcome (Wave 5+) ---
405
+ 5. **--- GATE A (por wave): todos os planos da wave com SUMMARY ---**
311
406
 
312
407
  ```bash
313
- if [ "$SUMMARY_COUNT" -gt 0 ]; then
314
- OUTCOME=success
315
- elif echo "$SPAWN_RETURN" | grep -q "^ABORTED:"; then
316
- OUTCOME=abort
317
- else
318
- OUTCOME=rework
319
- fi
320
-
321
- node "$HOME/.claude/up/bin/up-tools.cjs" routing-log --update \
322
- --plan "${PLAN}" --agent "${SPECIALIST_AGENT}" --model "${MODEL}" \
323
- --complexity "${COMPLEXITY}" --score "${SCORE}" \
324
- --outcome "${OUTCOME}" --rework-cycles "${REWORK_COUNT:-0}"
408
+ echo "=== GATE A: artefatos da wave ${wave} (Fase ${PHASE_NUMBER}) ==="
409
+ # Espera-se 1 SUMMARY por plano nao-pulado da wave. Conferir cada id da wave:
410
+ WAVE_MISSING=0
411
+ for PLAN_ID in $WAVE_PLAN_IDS; do # WAVE_PLAN_IDS = ids dos planos selecionados desta wave
412
+ [ -f "${PHASE_DIR}/${PLAN_ID}-SUMMARY.md" ] || { echo "GATE A: SUMMARY faltando para plano ${PLAN_ID}"; WAVE_MISSING=$((WAVE_MISSING+1)); }
413
+ done
414
+ [ "$WAVE_MISSING" -gt 0 ] && echo "GATE A FALHOU na wave ${wave}: ${WAVE_MISSING} SUMMARY(s) ausente(s). Re-executar o(s) plano(s) faltante(s)." && exit 1
415
+ echo "GATE A OK (wave ${wave})"
325
416
  ```
326
417
 
327
- ### 3.4 Execution Supervisor Revisa (PASSO 2 Agent SEPARADO)
418
+ - Se algum SUMMARY da wave faltar: re-spawnar SO o(s) executor(es) do(s) plano(s) faltante(s) (mesmo
419
+ bloco `Agent`), depois reavaliar o GATE A da wave. Falha real e sistemica (toda a wave falhou) ->
420
+ parar e alertar o dono (AskUserQuestion).
328
421
 
329
- ```python
330
- Agent(
331
- subagent_type="up-execution-supervisor",
332
- prompt=f"""
333
- Revisar execucao da Fase {phase_number}.
334
-
335
- <governance_compressed>
336
- DECISOES: APPROVE | REQUEST_CHANGES | REQUEST_REPLAN | ESCALATE
337
- REWORK: max 3 ciclos antes de forcar approval com debito
338
- NUNCA APROVAR: trabalho nao verificado, evidencia ambigua, claim sem backing,
339
- stub/placeholder, falta de wiring
340
- </governance_compressed>
341
-
342
- <engineering_principles_compressed>
343
- 1. Implementacao real (zero placeholder)
344
- 2. Correto, nao rapido
345
- 3. Conectado ponta a ponta
346
- 4. Consistencia (seguir patterns existentes)
347
- 5. Dados reais
348
- 6. Custo futuro
349
- </engineering_principles_compressed>
350
-
351
- <files_to_read>
352
- - {PLAN}
353
- - {PHASE_DIR}/*-SUMMARY.md
354
- - git diff (use Bash)
355
- - .plano/fases/{phase_number}/REQUIREMENTS-SLICE.md (se existir)
356
-
357
- Sob demanda apenas:
358
- - $HOME/.claude/up/references/engineering-principles-compressed.md (exemplos)
359
- - $HOME/.claude/up/references/governance-rules-compressed.md (hierarquia)
360
- - $HOME/.claude/up/references/rework-limits-compressed.md (fluxos)
361
- - $HOME/.claude/up/references/production-requirements-compressed.md (IDs especificos)
362
- </files_to_read>
363
-
364
- Decisao: APPROVE | REQUEST_CHANGES | REQUEST_REPLAN | ESCALATE
365
-
366
- REQUEST_REPLAN: Se descobrir que o plano e fundamentalmente errado/inviavel.
367
- Max 2 re-plans por projeto.
368
-
369
- **OUTPUT OBRIGATORIO (fazer ANTES de retornar):**
370
- ```bash
371
- echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | phase-{phase_number} | execution-supervisor | {{DECISAO}} | {{motivo}}" >> .plano/governance/approvals.log
372
- ```
373
- Sem este log, o GATE B vai bloquear o avanço.
374
- """
375
- )
376
- ```
422
+ 6. **Prosseguir para a proxima wave.** Repetir 1-5 ate a ultima wave.
377
423
 
378
- ### --- GATE B: Verificar que execution-supervisor logou ---
424
+ **Fim do loop de waves:** ao sair do loop, TODOS os planos da fase tem SUMMARY. GATE A consolidado:
379
425
 
380
426
  ```bash
381
- echo "=== GATE B: Verificando governance da execucao (Fase ${PHASE_NUMBER}) ==="
382
- EXEC_ENTRY=$(grep "phase-${PHASE_NUMBER}.*execution-supervisor" .plano/governance/approvals.log 2>/dev/null | tail -1)
383
- [ -z "$EXEC_ENTRY" ] && echo "GATE B FALHOU: execution-supervisor NAO logou. Spawnar agora." && exit 1
384
- echo "GATE B OK: $EXEC_ENTRY"
427
+ echo "=== GATE A consolidado (Fase ${PHASE_NUMBER}) ==="
428
+ SUMMARY_COUNT=$(ls ${PHASE_DIR}/*-SUMMARY.md 2>/dev/null | wc -l)
429
+ [ "$SUMMARY_COUNT" -lt "$PLAN_COUNT" ] && echo "GATE A FALHOU: ${SUMMARY_COUNT}/${PLAN_COUNT} SUMMARY(s). Re-executar plano(s) faltante(s)." && exit 1
430
+ echo "GATE A OK: ${SUMMARY_COUNT}/${PLAN_COUNT} SUMMARY(s) (todas as waves)"
385
431
  ```
386
432
 
387
- ### 3.5 Processar Decisao do Supervisor
388
-
389
- **Se APPROVE:** prosseguir para verificacao.
433
+ > A partir daqui (3.4-3.9) o escopo e a FASE INTEIRA (todos os planos / todos os SUMMARYs), nao mais
434
+ > "o plano". Roda UMA VEZ por fase, depois de TODAS as waves.
390
435
 
391
- **Se REQUEST_CHANGES:** re-spawn specialist com feedback (max 3 ciclos).
436
+ ### 3.4 Re-plan local (so se um plano especifico se revelar inviavel)
392
437
 
393
- **Se REQUEST_REPLAN:**
438
+ Por-plano: se durante a execucao de UM plano especifico ficar evidente que ele e fundamentalmente
439
+ errado/inviavel, o orquestrador re-planeja SO aquele plano, LOCALMENTE (max 2 por projeto). Sem
440
+ supervisor: o `up-planejador` faz self-check. `{PLAN}` aqui = o plano inviavel especifico (nao a fase).
394
441
 
395
442
  ```bash
396
443
  REPLAN_COUNT=$(cat .plano/governance/replans.log 2>/dev/null | wc -l)
397
444
  if [ "$REPLAN_COUNT" -ge 2 ]; then
398
- echo "Max re-plans atingido. Escalando pro CEO."
399
- # ESCALATE
445
+ echo "Max re-plans atingido. Alertar o dono (AskUserQuestion)."
400
446
  else
401
- # Re-planejar fase localmente
402
- echo "REQUEST_REPLAN aprovado. Re-planejando fase {phase_number} localmente..."
403
-
404
- # Spawnar planejador LOCAL (Agent SEPARADO)
405
- Agent(
406
- subagent_type="up-planejador",
407
- prompt=f"""
408
- RE-PLAN da Fase {phase_number}.
409
-
410
- Plano original: {PLAN}
411
- Razao do re-plan: {execution_supervisor_reason}
412
-
413
- Refaca o plano corrigindo o problema descoberto.
414
- """
415
- )
416
-
417
- # Salvar como -PLAN-v2.md
418
- mv "$PLAN" "${PLAN%-PLAN.md}-PLAN-v1.md"
419
-
420
- # Registrar
421
- echo "$(date -u) | phase-{phase_number} | execution-supervisor | REPLAN | reason: {reason}" >> .plano/governance/replans.log
422
-
423
- # Planning-supervisor revisa novo plano (Agent SEPARADO)
424
- Agent(subagent_type="up-planning-supervisor", prompt="""
425
- Revisar re-plan da fase {phase_number}.
426
- **OUTPUT OBRIGATORIO:** logar em .plano/governance/approvals.log
427
- """)
428
-
429
- # Voltar pro 3.3 (re-spawn specialist)
447
+ echo "REQUEST_REPLAN. Re-planejando fase {phase_number} localmente..."
430
448
  fi
431
449
  ```
432
450
 
433
- **Se ESCALATE:** chief-engineer entra.
451
+ ```python
452
+ # Re-plan LOCAL — Agent SEPARADO (so up-planejador, sem camada de revisao intermediaria)
453
+ Agent(subagent_type="up-planejador", prompt=f"""
454
+ RE-PLAN da Fase {phase_number}.
455
+ Plano original: {PLAN}
456
+ Razao: {motivo descoberto na execucao}
457
+ Refaca o plano corrigindo o problema. Self-check: confirme viabilidade e completude antes de retornar.
458
+ """)
459
+ ```
460
+
461
+ ```bash
462
+ mv "$PLAN" "${PLAN%-PLAN.md}-PLAN-v1.md"
463
+ echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | phase-{phase_number} | up-planejador | REPLAN | {motivo}" >> .plano/governance/replans.log
464
+ # Voltar pro LOOP DE WAVES (3.2+3.3): re-spawnar o executor SO desse plano, na wave dele, com o plano novo.
465
+ ```
434
466
 
435
- ### 3.6 Verificacao (PASSO 3 Agent SEPARADO)
467
+ ### 3.5 Verificacao da FASE (PASSO 2 - Agent SEPARADO)
436
468
 
437
- **Wave 4 (v0.13+) Verification Ladder Determinística**
469
+ Roda UMA VEZ por fase, depois de TODAS as waves. O verificador valida a FASE INTEIRA (todos os planos /
470
+ todos os SUMMARYs juntos), nao 1 plano isolado. Um unico VERIFICATION.md cobre a fase.
438
471
 
439
- ANTES do verificador-LLM, rodar checks deterministicos:
472
+ **Verification ladder deterministica primeiro:**
440
473
 
441
474
  ```bash
442
475
  STATIC=$(node "$HOME/.claude/up/bin/up-tools.cjs" verify-static --raw)
443
476
  STATIC_OVERALL=$(echo "$STATIC" | grep -oE 'overall.{1,20}' | head -1 | grep -oE '"(pass|fail|skip)"' | tr -d '"')
444
477
 
445
478
  if [ "$STATIC_OVERALL" = "pass" ]; then
446
- # Pular verificador-LLM, criar VERIFICATION.md sintetico
447
479
  cat > "${PHASE_DIR}/VERIFICATION.md" <<EOF
448
480
  ---
449
481
  status: passed
@@ -457,194 +489,376 @@ EOF
457
489
  fi
458
490
  ```
459
491
 
460
- Se STATIC=fail ou skip: spawnar verificador-LLM com static logs como contexto:
492
+ Se STATIC=fail ou skip: spawnar `up-verificador` com os logs estaticos como contexto:
461
493
 
462
494
  ```python
463
495
  Agent(subagent_type="up-verificador", prompt=f"""
464
- Verificar fase {phase_number}.
465
-
496
+ Verificar a FASE {phase_number} INTEIRA (todos os planos / todos os SUMMARYs juntos, nao 1 plano).
497
+ Conferir o objetivo da fase contra o codebase real e cruzar os REQUIREMENTS desta fase com o que
498
+ TODOS os SUMMARYs ({PHASE_DIR}/*-SUMMARY.md) entregaram.
466
499
  <static_check_results overall="{STATIC_OVERALL}">
467
500
  Logs em .plano/runtime/verify-static-*.log
468
501
  </static_check_results>
469
-
470
- FOCAR no que falhou nos checks. Nao reexecutar tudo.
502
+ FOCAR no que falhou. Exigir evidencia fresca por tipo de codigo. Gerar UM VERIFICATION.md da fase.
471
503
  """)
472
504
  ```
473
505
 
474
- ### --- GATE C: Verificar que verificacao produziu artefatos ---
506
+ ### --- GATE B: artefatos da verificacao ---
475
507
 
476
508
  ```bash
477
- echo "=== GATE C: Verificando artefatos da verificacao (Fase ${PHASE_NUMBER}) ==="
509
+ echo "=== GATE B: artefatos da verificacao (Fase ${PHASE_NUMBER}) ==="
478
510
  VERIF_COUNT=$(ls ${PHASE_DIR}/*-VERIFICATION.md 2>/dev/null | wc -l)
479
- [ "$VERIF_COUNT" -eq 0 ] && echo "GATE C FALHOU: Sem VERIFICATION.md. Spawnar verificador." && exit 1
480
- echo "GATE C OK: ${VERIF_COUNT} VERIFICATION(s)"
511
+ [ "$VERIF_COUNT" -eq 0 ] && echo "GATE B FALHOU: sem VERIFICATION.md. Spawnar verificador." && exit 1
512
+ echo "GATE B OK: ${VERIF_COUNT} VERIFICATION(s)"
481
513
  ```
482
514
 
483
- ### 3.6.1 Verification Supervisor (PASSO 4 — Agent SEPARADO)
515
+ ### 3.6 E2E + DCRV (PASSO 3)
484
516
 
485
- ```python
486
- Agent(subagent_type="up-verification-supervisor", prompt=f"""
487
- Revisar verificacao da Fase {phase_number}.
488
- Decisao: APPROVE | REQUEST_CHANGES | ESCALATE
489
-
490
- **OUTPUT OBRIGATORIO (fazer ANTES de retornar):**
491
- ```bash
492
- echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | phase-{phase_number} | verification-supervisor | {{DECISAO}} | {{motivo}}" >> .plano/governance/approvals.log
493
- ```
494
- """)
517
+ Delegar ao loop DCRV (que absorveu builder-e2e). Ver `@~/.claude/up/workflows/dcrv.md`.
518
+
519
+ ```
520
+ SCOPE=phase, PHASE_DIR={PHASE_DIR}, PHASE_NUMBER={phase_number}, AUTO_FIX=true, MAX_CYCLES=3
495
521
  ```
496
522
 
497
- ### --- GATE D: Verificar que AMBOS supervisores logaram ---
523
+ Pular se a fase nao tem UI nem API (infra/schema).
524
+
525
+ ### 3.7 Revisao da FASE (PASSO 4 - Agent SEPARADO)
526
+
527
+ Roda UMA VEZ por fase, depois de TODAS as waves. O revisor revisa a FASE consolidada (todos os planos /
528
+ todos os SUMMARYs juntos).
529
+
530
+ **Derivar o tipo de evidencia esperado (Fase 3 - TDD por tipo).** A fase pode ter VARIOS planos de tipos
531
+ diferentes; agregamos o `type` do frontmatter de TODOS os planos da fase e exigimos a evidencia mais forte
532
+ aplicavel (UI > glue > logic): se QUALQUER plano da fase e UI -> exige `ui:visual`; senao se qualquer plano
533
+ e integracao -> `glue:smoke`; senao `logic:test_pass`. O GATE so aprova com `evidence=<tipo>:<resultado>`
534
+ do tipo certo:
498
535
 
499
536
  ```bash
500
- echo "=== GATE D: Verificando governance completa (Fase ${PHASE_NUMBER}) ==="
501
- EXEC_OK=$(grep -c "phase-${PHASE_NUMBER}.*execution-supervisor" .plano/governance/approvals.log 2>/dev/null)
502
- VERIF_OK=$(grep -c "phase-${PHASE_NUMBER}.*verification-supervisor" .plano/governance/approvals.log 2>/dev/null)
503
- [ "$EXEC_OK" -eq 0 ] || [ "$VERIF_OK" -eq 0 ] && echo "GATE D FALHOU: supervisor faltante" && exit 1
504
- echo "GATE D OK: ambos supervisores logaram"
537
+ # Agrega os tipos de TODOS os planos da fase (nao mais 1 plano via head -1).
538
+ PHASE_TYPES=$(grep -hoE '^type:[[:space:]]*[a-z-]+' ${PHASE_DIR}/*-PLAN.md 2>/dev/null | sed 's/type:[[:space:]]*//')
539
+ if echo "$PHASE_TYPES" | grep -qE '^(frontend|ui|css)$'; then
540
+ EVIDENCE_TYPE="ui"; EVIDENCE_RESULT="visual" # UI/CSS -> captura visual antes/depois (Playwright)
541
+ elif echo "$PHASE_TYPES" | grep -qE '^(integration|glue|webhook)$'; then
542
+ EVIDENCE_TYPE="glue"; EVIDENCE_RESULT="smoke" # integracao (Asaas/uazapi/etc) -> smoke-test
543
+ else
544
+ EVIDENCE_TYPE="logic"; EVIDENCE_RESULT="test_pass" # parser/calculo/API-propria/bugfix -> teste red-green
545
+ fi
546
+ echo "Fase {phase_number}: evidence esperada (agregada da fase) = ${EVIDENCE_TYPE}:${EVIDENCE_RESULT}"
505
547
  ```
506
548
 
507
- ### 3.7 E2E + DCRV (PASSO 5)
508
-
509
- Ver builder.md secao 3.1.5 (E2E) e 3.1.5.1 (DCRV).
549
+ A evidencia ja foi PRODUZIDA upstream: `logic:test_pass` pelo verificador (red-green); `ui:visual` pela
550
+ captura visual antes/depois do `up-tester` no DCRV (3.6); `glue:smoke` pelo smoke do DCRV (3.6). O revisor
551
+ apenas CONFIRMA que ela existe e a carimba no approvals.log. Ver `@~/.claude/up/workflows/dcrv.md`.
510
552
 
511
- ### 3.8 Chief-engineer Aprova Fase (PASSO 6 Agent SEPARADO)
553
+ Spawnar `up-revisor` (UNICO, two-stage). Substitui supervisores, chiefs e auditores gold.
512
554
 
513
555
  ```python
514
556
  Agent(
515
- subagent_type="up-chief-engineer",
557
+ subagent_type="up-revisor",
516
558
  prompt=f"""
517
- Revisar Fase {phase_number} consolidada.
518
- Validar coerencia plano vs execucao vs verificacao.
519
- Decidir: APPROVE | REQUEST_CHANGES | ESCALATE_CEO
520
-
521
- **OUTPUT OBRIGATORIO (fazer ANTES de retornar):**
559
+ Revisar a Fase {phase_number} consolidada (two-stage).
560
+
561
+ STAGE 1 — spec-compliance cetico: assuma que "terminou rapido demais". Valide o comportamento
562
+ contra os REQUIREMENTS desta fase navegando/inspecionando o resultado real (nao confie no codigo
563
+ nem no SUMMARY). Emita um Confidence Score (0-100) de delivery.
564
+ STAGE 2 — code-quality: padroes, edge cases, OWASP/security, wiring ponta a ponta.
565
+
566
+ <files_to_read>
567
+ - {PHASE_DIR}/*-PLAN.md (TODOS os planos da fase)
568
+ - {PHASE_DIR}/*-SUMMARY.md (TODOS os SUMMARYs da fase)
569
+ - {PHASE_DIR}/*-VERIFICATION.md
570
+ - {PHASE_DIR}/dcrv/DCRV-REPORT.md (se existir)
571
+ - git diff (use Bash)
572
+ - .plano/fases/{phase_number}/REQUIREMENTS-SLICE.md (se existir)
573
+ Sob demanda: $HOME/.claude/up/references/engineering-principles-compressed.md,
574
+ $HOME/.claude/up/references/production-requirements-compressed.md
575
+ </files_to_read>
576
+
577
+ Veredito unico: APPROVE | REQUEST_CHANGES | BLOCK.
578
+
579
+ **EVIDENCIA OBRIGATORIA (Fase 3 - TDD por tipo):** so APPROVE se houver evidencia fresca do tipo
580
+ `{EVIDENCE_TYPE}` desta fase:
581
+ - logic (parser/calculo/API-propria/bugfix): teste red-green passando -> evidence=logic:test_pass
582
+ - ui (UI/CSS): captura visual antes/depois (Playwright, do up-tester) -> evidence=ui:visual
583
+ - glue (integracao Asaas/uazapi/etc): smoke-test passando -> evidence=glue:smoke
584
+ Se a evidencia do tipo certo NAO existe, o veredito NAO pode ser APPROVE (use REQUEST_CHANGES para
585
+ forcar a producao da evidencia).
586
+
587
+ **OUTPUT OBRIGATORIO (ANTES de retornar) - formato estendido com campo evidence:**
522
588
  ```bash
523
- echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | phase-{phase_number} | chief-engineer | {{DECISAO}} | {{motivo}}" >> .plano/governance/approvals.log
589
+ echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | phase-{phase_number} | up-revisor | {{DECISAO}} | {{motivo}} | evidence={EVIDENCE_TYPE}:{EVIDENCE_RESULT}" >> .plano/governance/approvals.log
524
590
  ```
591
+ Sem este log COM o campo evidence preenchido do tipo certo, o GATE de fase bloqueia o avanco.
525
592
  """
526
593
  )
527
594
  ```
528
595
 
529
- ### --- GATE E: Verificar TODA governanca antes de marcar completa ---
596
+ ### --- GATE de fase: veredito do revisor (deterministico) ---
597
+
598
+ Aplicar o gate de `@~/.claude/up/workflows/governance.md`:
530
599
 
531
600
  ```bash
532
- echo "=== GATE E: Verificacao FINAL (Fase ${PHASE_NUMBER}) ==="
601
+ echo "=== GATE: Fase ${PHASE_NUMBER} ==="
533
602
  SUMMARY_OK=$(ls ${PHASE_DIR}/*-SUMMARY.md 2>/dev/null | wc -l)
534
- VERIF_FILE_OK=$(ls ${PHASE_DIR}/*-VERIFICATION.md 2>/dev/null | wc -l)
535
- EXEC_OK=$(grep -c "phase-${PHASE_NUMBER}.*execution-supervisor" .plano/governance/approvals.log 2>/dev/null)
536
- VERIF_OK=$(grep -c "phase-${PHASE_NUMBER}.*verification-supervisor" .plano/governance/approvals.log 2>/dev/null)
537
- CHIEF_OK=$(grep -c "phase-${PHASE_NUMBER}.*chief-engineer" .plano/governance/approvals.log 2>/dev/null)
603
+ VERIF_OK=$(ls ${PHASE_DIR}/*-VERIFICATION.md 2>/dev/null | wc -l)
604
+ REVISOR_ENTRY=$(grep "phase-${PHASE_NUMBER}.*up-revisor" .plano/governance/approvals.log 2>/dev/null | tail -1)
538
605
 
539
606
  PASS=true
540
- [ "$SUMMARY_OK" -eq 0 ] && echo "FALHA: Sem SUMMARY.md" && PASS=false
541
- [ "$VERIF_FILE_OK" -eq 0 ] && echo "FALHA: Sem VERIFICATION.md" && PASS=false
542
- [ "$EXEC_OK" -eq 0 ] && echo "FALHA: execution-supervisor NAO rodou" && PASS=false
543
- [ "$VERIF_OK" -eq 0 ] && echo "FALHA: verification-supervisor NAO rodou" && PASS=false
544
- [ "$CHIEF_OK" -eq 0 ] && echo "FALHA: chief-engineer NAO rodou" && PASS=false
607
+ [ "$SUMMARY_OK" -eq 0 ] && echo "FALHA: sem SUMMARY.md" && PASS=false
608
+ [ "$VERIF_OK" -eq 0 ] && echo "FALHA: sem VERIFICATION.md" && PASS=false
609
+ [ -z "$REVISOR_ENTRY" ] && echo "FALHA: up-revisor NAO logou" && PASS=false
610
+
611
+ # Fase 3 - TDD: a entry do revisor PRECISA ter o campo evidence=<tipo>:<resultado> do tipo certo.
612
+ EVIDENCE_FIELD=$(echo "$REVISOR_ENTRY" | grep -oE 'evidence=(logic|ui|glue):(test_pass|visual|smoke)')
613
+ if [ -z "$EVIDENCE_FIELD" ]; then
614
+ echo "FALHA: up-revisor logou sem campo evidence=<tipo>:<resultado>. Re-rodar revisor com prova fresca." && PASS=false
615
+ elif [ -n "$EVIDENCE_TYPE" ] && ! echo "$EVIDENCE_FIELD" | grep -q "evidence=${EVIDENCE_TYPE}:"; then
616
+ echo "FALHA: evidence de tipo errado ($EVIDENCE_FIELD; esperado ${EVIDENCE_TYPE}). Re-rodar com prova certa." && PASS=false
617
+ fi
618
+
619
+ DECISION=$(echo "$REVISOR_ENTRY" | awk -F'|' '{gsub(/ /,"",$4); print $4}')
545
620
 
546
621
  if [ "$PASS" = false ]; then
547
- echo "GATE E FALHOU: Voltar e executar passos faltantes."
622
+ echo "GATE FALHOU: spawnar o agente faltante e re-rodar."
548
623
  exit 1
549
- else
550
- echo "GATE E OK: Todos 5 checks passaram."
551
624
  fi
552
625
  ```
553
626
 
554
- ### 3.9 Marcar Completa e Avancar
627
+ **Processar o veredito:**
628
+ - `APPROVE`: prosseguir para 3.8.
629
+ - `REQUEST_CHANGES`: cap de rework 1 round (ver governance.md passo 4). Round 0 -> re-spawn do(s)
630
+ executor(es) do(s) plano(s) apontado(s) no review (mesmo bloco Agent de 3.2+3.3, parametrizado por
631
+ plano); round >= 1 -> forced approval com debito tecnico. Depois re-rodar verificador da fase + revisor.
632
+ - `BLOCK`: interromper e alertar o dono (AskUserQuestion).
633
+
634
+ ### 3.8 Fechar a fase: teste visual (pre-merge) + merge
635
+
636
+ So apos o GATE aprovar (APPROVE ou forced approval registrado).
637
+
638
+ **Caso `--solo` (github_native=false):** nada a fazer aqui. Tudo ja foi committado atomicamente na branch
639
+ atual. Seguir direto para 3.9. (Sem worktree, sem teste-visual-gate, sem merge.)
640
+
641
+ #### 3.8.0 Checkpoint de teste visual (PRE-MERGE) - so GitHub-nativo
642
+
643
+ Roda ANTES de qualquer merge. Garante que NADA sobe sem o dono ver na tela. Resolver:
644
+
645
+ ```bash
646
+ REQUIRE_VISUAL=$(node "$HOME/.claude/up/bin/up-tools.cjs" config get require_visual_test --raw 2>/dev/null)
647
+ [ -z "$REQUIRE_VISUAL" ] && REQUIRE_VISUAL=true
648
+ # HAS_UI: a fase tocou em UI? (tipo do plano frontend/ui/css OU package.json com script dev/start/serve)
649
+ HAS_DEV=$(node -e "try{const s=require('./package.json').scripts||{};process.stdout.write((s.dev||s.start||s.serve)?'1':'')}catch(e){}" 2>/dev/null)
650
+ ```
651
+
652
+ **Aplica o gate quando:** (HAS_UI ou HAS_DEV) E NAO (`--auto` E REQUIRE_VISUAL=false).
653
+ Ou seja: por padrao SEMPRE pede aprovacao visual antes do merge em fase de UI. Para PULAR (CI/yolo):
654
+ `--auto` + setar `require_visual_test=false` no config. Para projeto em PRODUCAO: deixe o default (true).
655
+
656
+ Se aplica:
657
+
658
+ 1. **Subir o dev server DENTRO da worktree** (o codigo da fase vive na worktree - voce testa o codigo REAL
659
+ da fase, nao a main). Ainda DENTRO da worktree, antes de sair dela:
660
+
661
+ ```bash
662
+ PORT=${PORT:-3000}
663
+ if ! curl -s "http://localhost:${PORT}" >/dev/null 2>&1; then
664
+ ( npm run dev > /tmp/up-build-dev-${phase_number}.log 2>&1 & ) \
665
+ || ( npm start > /tmp/up-build-dev-${phase_number}.log 2>&1 & )
666
+ for i in $(seq 1 40); do curl -s "http://localhost:${PORT}" >/dev/null 2>&1 && break; sleep 1; done
667
+ fi
668
+ echo "Dev server da Fase {phase_number} no ar: http://localhost:${PORT}"
669
+ ```
670
+
671
+ 2. **Perguntar (AskUserQuestion):**
672
+
673
+ ```
674
+ header: "Fase {phase_number}: testar antes de mergear?"
675
+ question: "Subi o dev server em http://localhost:{PORT} com o codigo desta fase. Testar primeiro ou pode mergear?"
676
+ options:
677
+ - "Testar primeiro (deixo o server no ar)"
678
+ - "Pode mergear"
679
+ - "Deixa a branch (nao mergeia agora)"
680
+ - "Descarta a fase"
681
+ ```
682
+
683
+ 3. **Se "Testar primeiro":** MANTEM o dev server no ar, repete a URL, e ESPERA o dono testar. Quando ele
684
+ voltar, perguntar de novo:
685
+
686
+ ```
687
+ header: "Testou a Fase {phase_number}?"
688
+ question: "E ai, pode fechar?"
689
+ options:
690
+ - "Aprovado, pode mergear"
691
+ - "Achei problema, quero ajustar"
692
+ ```
693
+
694
+ - **"Achei problema, quero ajustar":** pedir a descricao do problema, re-spawnar `up-executor` pra corrigir
695
+ NA WORKTREE (mesma branch da fase), re-rodar `up-verificador` + GATE (3.6/3.7), e VOLTAR pro 3.8.0
696
+ (re-testa com o dev server). Loop ate o dono aprovar. (E o "quando eu disser nao, ajusta; quando eu
697
+ disser sim, merge".)
698
+ - **"Aprovado, pode mergear":** segue como "Pode mergear".
699
+
700
+ 4. **Matar o dev server** antes de sair da worktree e mergear:
701
+
702
+ ```bash
703
+ pkill -f "npm run dev" 2>/dev/null || true; pkill -f "npm start" 2>/dev/null || true
704
+ ```
705
+
706
+ A escolha do checkpoint define a acao de fechamento (3.8.1): "Pode mergear"/"Aprovado" -> MERGE;
707
+ "Deixa a branch" -> nao mergeia; "Descarta" -> remove sem merge.
708
+
709
+ **Fase SEM UI** (infra/schema/backend puro) ou `--auto` com `require_visual_test=false`: pula 3.8.0.
710
+ Nesse caso, GitHub-nativo interativo ainda apresenta o mesmo AskUserQuestion de 4 opcoes (sem o passo do
711
+ dev server) pra o dono decidir merge/PR/deixa/descarta. `--auto` com fase sem UI fecha direto (sem perguntar).
712
+
713
+ #### 3.8.1 Merge e avancar
714
+
715
+ Sair da worktree (**ExitWorktree** ou `cd` de volta ao repo principal) para que `finish-phase` opere e
716
+ atualize `git-map.json` na main. Mapear a escolha de 3.8.0 para `finish-phase`
717
+ (`--mode menu|auto|solo`):
718
+
719
+ ```bash
720
+ case "$ESCOLHA" in
721
+ # Pode mergear / Aprovado: finish-phase --mode auto faz gh pr create (Closes #N) -> merge squash -> cleanup.
722
+ # FAIL-OPEN: sem gh/remote, --mode auto degrada para merge LOCAL da branch na base + cleanup (issue/PR=null).
723
+ mergear|aprovado) node "$HOME/.claude/up/bin/up-tools.cjs" github finish-phase --phase {phase_number} --mode auto --strategy squash ;;
724
+ # Deixa a branch: nao mergeia; worktree+branch vivos. menu so atualiza git-map.json (status=in_review).
725
+ deixa) node "$HOME/.claude/up/bin/up-tools.cjs" github finish-phase --phase {phase_number} --mode menu ;;
726
+ # Descarta: orquestrador remove worktree + branch (sem merge); reflete em git-map.json via status=cancelled.
727
+ descarta) echo "Descartando fase {phase_number}: remover worktree + branch (sem merge)." ;;
728
+ esac
729
+ ```
730
+
731
+ `finish-phase --mode auto` faz: gh pr create (body com `Closes #<issue>` quando ha issue) -> merge (squash
732
+ default, ou `--strategy merge|rebase`) -> cleanup worktree+branch, e atualiza `git-map.json`. FAIL-OPEN: sem
733
+ gh/remote, faz merge LOCAL da branch da fase na base e remove a worktree (issue/PR = null). `--mode solo` nao
734
+ faz nada (usado quando ja esta tudo committado na branch atual); em `--solo` o fluxo nem chega aqui.
735
+
736
+ **Multica: sync BATCHED no FIM da fase/onda (so se `--board`).**
737
+ Uma unica chamada que reflete TODAS as transicoes acumuladas da fase de uma vez (nao por microtransicao):
738
+ status final + metadata `gh_issue`/`branch`/`pr`. Mapeamento de status UP -> Multica:
739
+ `done->done`, `in_review->in_review`, `blocked->blocked` (descarte/opcao 4 -> `cancelled`). Status final:
740
+ opcoes 1/2 (merge/PR) -> `done`; opcao 3 (deixa branch) -> `in_review`; opcao 4 (descarta) -> `cancelled`.
741
+ A KEY do Multica ja vai no body do PR (`Closes MUL-X`) via `finish-phase`, entao o merge auto-avanca a
742
+ issue pra `done` no proprio Multica; este `sync done` e idempotente. FAIL-OPEN: erro -> avisa e segue.
743
+
744
+ ```bash
745
+ if [ "$BOARD" = "true" ]; then
746
+ case "$ESCOLHA" in
747
+ 1|2) MB_STATUS=done ;;
748
+ 3) MB_STATUS=in_review ;;
749
+ 4) MB_STATUS=cancelled ;;
750
+ *) MB_STATUS=done ;; # --auto sem menu = fechou = done
751
+ esac
752
+ # Ler pr_number do git-map.json da fase (escrito por finish-phase), se houver.
753
+ MB_PR=$(node "$HOME/.claude/up/bin/up-tools.cjs" github status --phase {phase_number} --raw 2>/dev/null \
754
+ | grep -oE '"pr"[^,}]*' | sed 's/.*: *//;s/"//g')
755
+ node "$HOME/.claude/up/bin/up-tools.cjs" multica sync \
756
+ --phase {phase_number} --status "$MB_STATUS" \
757
+ --gh-issue "${ISSUE:-}" --branch "${BRANCH:-}" --pr "${MB_PR:-}" --raw 2>/dev/null \
758
+ || echo "AVISO: Multica indisponivel (sync $MB_STATUS fase {phase_number}). Seguindo."
759
+ fi
760
+ ```
761
+
762
+ > Em `--solo` o fluxo nem chega aqui (sem `--board`): nenhuma chamada Multica.
763
+
764
+ ### 3.9 Reassessment de roadmap (pos-fase, inline, ~30s)
765
+
766
+ Apos o GATE aprovar e ANTES de planejar/executar a proxima fase, o orquestrador re-avalia o ROADMAP inline (sem agente separado). Migrado do builder.md 3.1.7 (caira por omissao no corte; recolocado).
767
+
768
+ Ler ROADMAP.md (fases futuras) + os SUMMARY da fase recem-completa e checar 3 coisas:
769
+ - **(a) Fase futura virou redundante?** A fase atual pode ter coberto algo que uma fase futura faria (ex: auth da Fase 3 ja entregou o RBAC que a Fase 6 planejava). Se sim: marcar a fase futura como `Removida (coberta pela Fase {X})` no ROADMAP.
770
+ - **(b) Fase futura precisa de ajuste?** Decisao arquitetural desta fase muda o escopo de fases futuras (ex: escolheu tRPC, fases de API mudam). Se sim: atualizar objetivo/criterios da fase futura.
771
+ - **(c) Surgiu necessidade nova critica?** Ler `.plano/captures/` (se existir). Insight que bloqueia fases futuras vira fase nova; melhoria so vai pro Polish.
772
+
773
+ Se houve mudanca no roadmap:
774
+
775
+ ```bash
776
+ node "$HOME/.claude/up/bin/up-tools.cjs" commit "docs: reassessment apos fase {X}" --files .plano/ROADMAP.md
777
+ ```
555
778
 
556
- **So apos GATE E passar.**
779
+ Log de 1 linha: `Reassessment: [sem mudancas | X ajustadas | Y removidas | Z adicionadas]`. Sem mudanca: seguir silenciosamente. Diferente do re-plan LOCAL do Estagio 3.4 (que so corrige a fase corrente): aqui poda/ajusta o roadmap FUTURO a luz do que ja foi construido.
557
780
 
558
781
  ## Estagio 4: QUALITY GATE GLOBAL
559
782
 
560
- Mesmo processo do builder.md secao Estagio 4. Sem model routing.
783
+ Rodar DCRV em escopo global apos todas as fases:
784
+
785
+ ```
786
+ SCOPE=global, AUTO_FIX=true, MAX_CYCLES=5
787
+ ```
788
+
789
+ Ver `@~/.claude/up/workflows/dcrv.md`. Carryover de issues por fase ja foi acumulado em
790
+ `.plano/issues-carryover/`.
561
791
 
562
- ## Estagio 4.5: DELIVERY AUDIT
792
+ ## Estagio 4.5: REVISAO DE DELIVERY (consolidada)
793
+
794
+ Spawnar `up-revisor` em escopo global (Confidence Score de delivery do projeto inteiro). Substitui a
795
+ antiga auditoria de delivery dedicada.
563
796
 
564
797
  ```python
565
- Agent(subagent_type="up-delivery-auditor", ...)
798
+ Agent(subagent_type="up-revisor", prompt="""
799
+ Revisao final de delivery (escopo: projeto). Stage 1 valida comportamento vs REQUIREMENTS globais;
800
+ Stage 2 confere qualidade/seguranca cross-fase. Emitir Confidence Score (0-100) e veredito.
801
+ Logar em .plano/governance/approvals.log com escopo 'delivery'.
802
+ """)
566
803
  ```
567
804
 
568
805
  ## Estagio 5: DELIVERY
569
806
 
570
- Mesmo processo. CEO local apresenta resultado.
807
+ Apresentacao = output direto do orquestrador (sem CEO). Le owner-profile pra tom.
571
808
 
572
809
  ### 5.X Marcar Projeto Completo
573
810
 
574
811
  ```bash
575
- # PLAN-READY.md → PROJECT-COMPLETE.md
576
812
  mv .plano/PLAN-READY.md .plano/PROJECT-COMPLETE.md
577
813
  ```
578
814
 
815
+ **Multica: fechar o board (so se `--board`).** Sync batched final marca a issue-pai como `done` (idempotente).
816
+ FAIL-OPEN. Imprimir a URL do board pro dono ver o resultado.
817
+
818
+ ```bash
819
+ if [ "$BOARD" = "true" ]; then
820
+ node "$HOME/.claude/up/bin/up-tools.cjs" multica sync --status done --raw 2>/dev/null \
821
+ || echo "AVISO: Multica indisponivel (sync final). Seguindo."
822
+ node "$HOME/.claude/up/bin/up-tools.cjs" multica board --raw 2>/dev/null # imprime a URL do board
823
+ fi
824
+ ```
825
+
579
826
  Adicionar ao frontmatter:
580
827
  ```yaml
581
828
  status: complete
582
829
  completed_at: [timestamp]
583
830
  completed_by:
584
831
  runtime: [current]
585
- ceo_name: [local]
586
- final_confidence: [from audit]
832
+ final_confidence: [do up-revisor de delivery]
587
833
  ```
588
834
 
589
835
  </process>
590
836
 
591
- <replans>
592
-
593
- ## Re-plans Locais (max 2)
594
-
595
- Quando: execution-supervisor descobre que o plano original esta inviavel.
596
-
597
- Como funciona:
598
-
599
- ```
600
- Execution falha
601
-
602
- execution-supervisor analisa
603
-
604
- Decide: REQUEST_REPLAN
605
-
606
- Verifica replans.log < 2?
607
- ├─ Sim: prosseguir
608
- └─ Nao: ESCALATE pro CEO
609
-
610
- Spawnar planejador LOCAL no runtime atual
611
-
612
- Refaz plano daquela fase
613
-
614
- Salva como PLAN-v2.md (preserva v1 pra historico)
615
-
616
- Planning-supervisor LOCAL revisa
617
-
618
- Se APPROVE: voltar pro executor com novo plano
619
- Se REJECT: ESCALATE pro chief-engineer
620
- ```
621
-
622
- Registro em `.plano/governance/replans.log`:
623
- ```
624
- 2026-04-11T15:30:00Z | phase-3 | execution-supervisor | REPLAN | cycle 1/2
625
- reason: Library X discontinued, need to use Y instead
626
- original_plan: 03-01-PLAN-v1.md
627
- new_plan: 03-01-PLAN.md (was v2)
628
- ```
629
-
630
- </replans>
631
-
632
837
  <success_criteria>
633
838
  - [ ] Owner profile LOCAL validado
634
839
  - [ ] PLAN-READY.md existe e parseado
635
840
  - [ ] Validacao light passou (artefatos + planos existem)
636
- - [ ] CEO confirmou execucao
841
+ - [ ] Dono confirmou execucao (orquestrador, sem CEO)
637
842
  - [ ] Governance inicializada (.plano/governance/approvals.log)
638
- - [ ] Todas fases executadas com SUMMARY.md (GATE A por fase)
639
- - [ ] Execution-supervisor revisou CADA fase (GATE B logou em approvals.log)
640
- - [ ] Verificador produziu VERIFICATION.md por fase (GATE C)
641
- - [ ] Verification-supervisor revisou CADA verificacao (GATE D logou em approvals.log)
642
- - [ ] Chief-engineer aprovou CADA fase (GATE E logou em approvals.log)
643
- - [ ] GATE E passou para CADA fase (todos 5 checks OK)
644
- - [ ] Re-plans registrados (se houve)
645
- - [ ] Quality Gate global passou
646
- - [ ] Delivery audit aprovou
647
- - [ ] CEO apresentou resultado
648
- - [ ] PLAN-READY.md PROJECT-COMPLETE.md
649
- - [ ] .plano/governance/approvals.log tem entries de TODOS supervisores e chiefs
843
+ - [ ] Todas as fases executadas com SUMMARY.md (GATE A)
844
+ - [ ] Verificador produziu VERIFICATION.md por fase (GATE B); ladder estatica usada quando possivel
845
+ - [ ] E2E + DCRV rodaram por fase (delegado a dcrv.md)
846
+ - [ ] up-revisor emitiu veredito por fase e LOGOU em approvals.log COM campo evidence=<tipo>:<resultado>
847
+ - [ ] GATE de fase deterministico passou (APPROVE + evidence do tipo certo, ou forced approval com debito)
848
+ - [ ] GitHub-nativo (default): worktree+branch+issue por fase via `github start-phase`; menu 4 opcoes /
849
+ `github finish-phase` no fim. `--solo` degrada para commit na branch atual (sem worktree/issue/PR)
850
+ - [ ] Execucao sempre via up-executor (roteia por contexto: frontend/backend/database/misto); SEM agentes
851
+ specialist separados (Onda 2 do corte)
852
+ - [ ] `--board`: Multica init no inicio (project+pai), sync `in_progress` na entrada da fase, sync BATCHED
853
+ no fim da fase/onda (status+metadata gh_issue/branch/pr), sync done + board URL no delivery. Tudo
854
+ fail-open (nunca crasha) e batched (nao por microtransicao). Sem `--board`: zero chamada Multica
855
+ - [ ] Cap de rework de 1 round respeitado
856
+ - [ ] Re-plans locais registrados (se houve, max 2)
857
+ - [ ] Quality Gate global rodou
858
+ - [ ] up-revisor fez revisao de delivery consolidada
859
+ - [ ] PLAN-READY.md -> PROJECT-COMPLETE.md
860
+ - [ ] Nenhuma referencia a CEO, chiefs, camadas de revisao intermediaria, auditores gold ou builder-e2e
861
+ - [ ] Nenhuma referencia aos 3 specialists de dominio nem aos 3 detectores DCRV antigos (6 agentes
862
+ deletados na Onda 2; tudo via up-executor e up-tester)
650
863
  </success_criteria>
864
+ </output>