up-cc 0.14.0 → 0.16.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 (171) hide show
  1. package/package.json +9 -9
  2. package/{agents → up/agents}/up-architecture-supervisor.md +1 -1
  3. package/{agents → up/agents}/up-audit-supervisor.md +1 -1
  4. package/{agents → up/agents}/up-backend-specialist.md +13 -3
  5. package/{agents → up/agents}/up-chief-architect.md +1 -1
  6. package/{agents → up/agents}/up-chief-engineer.md +1 -1
  7. package/{agents → up/agents}/up-chief-operations.md +2 -2
  8. package/{agents → up/agents}/up-chief-product.md +1 -1
  9. package/{agents → up/agents}/up-chief-quality.md +1 -1
  10. package/{agents → up/agents}/up-code-reviewer.md +2 -2
  11. package/{agents → up/agents}/up-database-specialist.md +13 -3
  12. package/{agents → up/agents}/up-execution-supervisor.md +4 -4
  13. package/{agents → up/agents}/up-executor.md +107 -9
  14. package/{agents → up/agents}/up-frontend-specialist.md +13 -3
  15. package/{agents → up/agents}/up-operations-supervisor.md +1 -1
  16. package/{agents → up/agents}/up-planejador.md +17 -1
  17. package/{agents → up/agents}/up-planning-supervisor.md +3 -3
  18. package/{agents → up/agents}/up-product-supervisor.md +1 -1
  19. package/{agents → up/agents}/up-project-ceo.md +2 -2
  20. package/{agents → up/agents}/up-quality-supervisor.md +1 -1
  21. package/{agents → up/agents}/up-system-designer.md +2 -2
  22. package/{agents → up/agents}/up-verification-supervisor.md +1 -1
  23. package/{agents → up/agents}/up-visual-critic.md +1 -1
  24. package/{bin → up/bin}/lib/core.cjs +132 -0
  25. package/{bin → up/bin}/up-tools.cjs +1341 -3
  26. package/up/commands/adicionar-fase.md +47 -0
  27. package/up/commands/configurar.md +219 -0
  28. package/{commands → up/commands}/depurar.md +1 -1
  29. package/{commands → up/commands}/planejar-fase.md +4 -2
  30. package/up/templates/config.json +8 -0
  31. package/up/workflows/build.md +650 -0
  32. package/{workflows → up/workflows}/builder.md +766 -35
  33. package/{workflows → up/workflows}/executar-plano.md +69 -0
  34. package/{workflows → up/workflows}/governance.md +3 -3
  35. package/{workflows → up/workflows}/plan.md +214 -29
  36. package/{workflows → up/workflows}/planejar-fase.md +63 -5
  37. package/commands/adicionar-fase.md +0 -33
  38. package/commands/configurar.md +0 -106
  39. package/templates/config.json +0 -6
  40. package/workflows/build.md +0 -431
  41. /package/{agents → up/agents}/up-analista-codigo.md +0 -0
  42. /package/{agents → up/agents}/up-api-tester.md +0 -0
  43. /package/{agents → up/agents}/up-arquiteto.md +0 -0
  44. /package/{agents → up/agents}/up-auditor-modernidade.md +0 -0
  45. /package/{agents → up/agents}/up-auditor-performance.md +0 -0
  46. /package/{agents → up/agents}/up-auditor-ux.md +0 -0
  47. /package/{agents → up/agents}/up-blind-validator.md +0 -0
  48. /package/{agents → up/agents}/up-clone-crawler.md +0 -0
  49. /package/{agents → up/agents}/up-clone-design-extractor.md +0 -0
  50. /package/{agents → up/agents}/up-clone-feature-mapper.md +0 -0
  51. /package/{agents → up/agents}/up-clone-prd-writer.md +0 -0
  52. /package/{agents → up/agents}/up-clone-verifier.md +0 -0
  53. /package/{agents → up/agents}/up-consolidador-ideias.md +0 -0
  54. /package/{agents → up/agents}/up-delivery-auditor.md +0 -0
  55. /package/{agents → up/agents}/up-depurador.md +0 -0
  56. /package/{agents → up/agents}/up-devops-agent.md +0 -0
  57. /package/{agents → up/agents}/up-exhaustive-tester.md +0 -0
  58. /package/{agents → up/agents}/up-mapeador-codigo.md +0 -0
  59. /package/{agents → up/agents}/up-pesquisador-mercado.md +0 -0
  60. /package/{agents → up/agents}/up-pesquisador-projeto.md +0 -0
  61. /package/{agents → up/agents}/up-planning-auditor.md +0 -0
  62. /package/{agents → up/agents}/up-product-analyst.md +0 -0
  63. /package/{agents → up/agents}/up-qa-agent.md +0 -0
  64. /package/{agents → up/agents}/up-requirements-validator.md +0 -0
  65. /package/{agents → up/agents}/up-roteirista.md +0 -0
  66. /package/{agents → up/agents}/up-security-reviewer.md +0 -0
  67. /package/{agents → up/agents}/up-sintetizador-melhorias.md +0 -0
  68. /package/{agents → up/agents}/up-sintetizador.md +0 -0
  69. /package/{agents → up/agents}/up-technical-writer.md +0 -0
  70. /package/{agents → up/agents}/up-verificador.md +0 -0
  71. /package/{bin → up/bin}/install.js +0 -0
  72. /package/{bin → up/bin}/up-instrument.cjs +0 -0
  73. /package/{commands → up/commands}/adicionar-testes.md +0 -0
  74. /package/{commands → up/commands}/ajuda.md +0 -0
  75. /package/{commands → up/commands}/atualizar.md +0 -0
  76. /package/{commands → up/commands}/build.md +0 -0
  77. /package/{commands → up/commands}/clone-builder.md +0 -0
  78. /package/{commands → up/commands}/custos.md +0 -0
  79. /package/{commands → up/commands}/dashboard.md +0 -0
  80. /package/{commands → up/commands}/discutir-fase.md +0 -0
  81. /package/{commands → up/commands}/executar-fase.md +0 -0
  82. /package/{commands → up/commands}/ideias.md +0 -0
  83. /package/{commands → up/commands}/iniciar.md +0 -0
  84. /package/{commands → up/commands}/mapear-codigo.md +0 -0
  85. /package/{commands → up/commands}/melhorias.md +0 -0
  86. /package/{commands → up/commands}/mobile-first.md +0 -0
  87. /package/{commands → up/commands}/modo-builder.md +0 -0
  88. /package/{commands → up/commands}/novo-projeto.md +0 -0
  89. /package/{commands → up/commands}/onboard.md +0 -0
  90. /package/{commands → up/commands}/pausar.md +0 -0
  91. /package/{commands → up/commands}/plan.md +0 -0
  92. /package/{commands → up/commands}/progresso.md +0 -0
  93. /package/{commands → up/commands}/rapido.md +0 -0
  94. /package/{commands → up/commands}/remover-fase.md +0 -0
  95. /package/{commands → up/commands}/resetar.md +0 -0
  96. /package/{commands → up/commands}/retomar.md +0 -0
  97. /package/{commands → up/commands}/saude.md +0 -0
  98. /package/{commands → up/commands}/testar.md +0 -0
  99. /package/{commands → up/commands}/ux-tester.md +0 -0
  100. /package/{commands → up/commands}/verificar-trabalho.md +0 -0
  101. /package/{hooks → up/hooks}/up-context-monitor.js +0 -0
  102. /package/{hooks → up/hooks}/up-statusline.js +0 -0
  103. /package/{references → up/references}/audit-modernidade.md +0 -0
  104. /package/{references → up/references}/audit-performance.md +0 -0
  105. /package/{references → up/references}/audit-ux.md +0 -0
  106. /package/{references → up/references}/blueprints/audit.md +0 -0
  107. /package/{references → up/references}/blueprints/booking.md +0 -0
  108. /package/{references → up/references}/blueprints/community.md +0 -0
  109. /package/{references → up/references}/blueprints/crm.md +0 -0
  110. /package/{references → up/references}/blueprints/dashboard.md +0 -0
  111. /package/{references → up/references}/blueprints/data-management.md +0 -0
  112. /package/{references → up/references}/blueprints/ecommerce.md +0 -0
  113. /package/{references → up/references}/blueprints/marketplace.md +0 -0
  114. /package/{references → up/references}/blueprints/notifications.md +0 -0
  115. /package/{references → up/references}/blueprints/saas-users.md +0 -0
  116. /package/{references → up/references}/blueprints/settings.md +0 -0
  117. /package/{references → up/references}/checkpoints.md +0 -0
  118. /package/{references → up/references}/engineering-principles-compressed.md +0 -0
  119. /package/{references → up/references}/engineering-principles.md +0 -0
  120. /package/{references → up/references}/git-integration.md +0 -0
  121. /package/{references → up/references}/governance-rules-compressed.md +0 -0
  122. /package/{references → up/references}/governance-rules.md +0 -0
  123. /package/{references → up/references}/production-requirements-compressed.md +0 -0
  124. /package/{references → up/references}/production-requirements.md +0 -0
  125. /package/{references → up/references}/questioning.md +0 -0
  126. /package/{references → up/references}/rework-limits-compressed.md +0 -0
  127. /package/{references → up/references}/rework-limits.md +0 -0
  128. /package/{references → up/references}/severity-levels.md +0 -0
  129. /package/{references → up/references}/state-persistence.md +0 -0
  130. /package/{references → up/references}/ui-brand.md +0 -0
  131. /package/{templates → up/templates}/audit-plan.md +0 -0
  132. /package/{templates → up/templates}/audit-report.md +0 -0
  133. /package/{templates → up/templates}/builder-defaults.md +0 -0
  134. /package/{templates → up/templates}/checklist.md +0 -0
  135. /package/{templates → up/templates}/continue-here.md +0 -0
  136. /package/{templates → up/templates}/delivery.md +0 -0
  137. /package/{templates → up/templates}/design-tokens.md +0 -0
  138. /package/{templates → up/templates}/owner-profile.md +0 -0
  139. /package/{templates → up/templates}/owner.md +0 -0
  140. /package/{templates → up/templates}/pending.md +0 -0
  141. /package/{templates → up/templates}/plan-ready.md +0 -0
  142. /package/{templates → up/templates}/project.md +0 -0
  143. /package/{templates → up/templates}/report.md +0 -0
  144. /package/{templates → up/templates}/requirements.md +0 -0
  145. /package/{templates → up/templates}/roadmap.md +0 -0
  146. /package/{templates → up/templates}/state.md +0 -0
  147. /package/{templates → up/templates}/suggestion.md +0 -0
  148. /package/{templates → up/templates}/summary.md +0 -0
  149. /package/{workflows → up/workflows}/adicionar-fase.md +0 -0
  150. /package/{workflows → up/workflows}/builder-e2e.md +0 -0
  151. /package/{workflows → up/workflows}/ceo-intake.md +0 -0
  152. /package/{workflows → up/workflows}/ceo-updates.md +0 -0
  153. /package/{workflows → up/workflows}/clone-builder.md +0 -0
  154. /package/{workflows → up/workflows}/dcrv.md +0 -0
  155. /package/{workflows → up/workflows}/discutir-fase.md +0 -0
  156. /package/{workflows → up/workflows}/executar-fase.md +0 -0
  157. /package/{workflows → up/workflows}/ideias.md +0 -0
  158. /package/{workflows → up/workflows}/iniciar.md +0 -0
  159. /package/{workflows → up/workflows}/mapear-codigo.md +0 -0
  160. /package/{workflows → up/workflows}/melhorias.md +0 -0
  161. /package/{workflows → up/workflows}/mobile-first.md +0 -0
  162. /package/{workflows → up/workflows}/novo-projeto.md +0 -0
  163. /package/{workflows → up/workflows}/onboarding.md +0 -0
  164. /package/{workflows → up/workflows}/pausar.md +0 -0
  165. /package/{workflows → up/workflows}/progresso.md +0 -0
  166. /package/{workflows → up/workflows}/rapido.md +0 -0
  167. /package/{workflows → up/workflows}/remover-fase.md +0 -0
  168. /package/{workflows → up/workflows}/resetar.md +0 -0
  169. /package/{workflows → up/workflows}/retomar.md +0 -0
  170. /package/{workflows → up/workflows}/ux-tester.md +0 -0
  171. /package/{workflows → up/workflows}/verificar-trabalho.md +0 -0
@@ -165,9 +165,78 @@ Apresentar identificacao do plano, esperar confirmacao.
165
165
  ```bash
166
166
  PLAN_START_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
167
167
  PLAN_START_EPOCH=$(date +%s)
168
+
169
+ # Wave 3 (v0.12+) — timeout supervisor + stuck detector
170
+ mkdir -p .plano/runtime
171
+ ACTIVITY_LOG=".plano/runtime/agent-activity-${PHASE:-current}.log"
172
+ echo "${PLAN_START_TIME}|start|${PHASE:-current}" >> "$ACTIVITY_LOG"
173
+ LAST_ACTIVITY_EPOCH=$PLAN_START_EPOCH
174
+
175
+ TIMEOUT_SOFT=${UP_TIMEOUT_SOFT:-1200} # 20m
176
+ TIMEOUT_HARD=${UP_TIMEOUT_HARD:-1800} # 30m
177
+ TIMEOUT_IDLE=${UP_TIMEOUT_IDLE:-600} # 10m
168
178
  ```
169
179
  </step>
170
180
 
181
+ <step name="timeout_check_protocol">
182
+ **Wave 3 — Timeout & Stuck Detection (executar entre tarefas)**
183
+
184
+ Apos COMPLETAR cada tarefa do plano:
185
+
186
+ 1. Append activity log:
187
+ ```bash
188
+ echo "$(date -u +%Y-%m-%dT%H:%M:%SZ)|task_complete|task_${TASK_NUMBER}" >> "$ACTIVITY_LOG"
189
+ LAST_ACTIVITY_EPOCH=$(date +%s)
190
+ ```
191
+
192
+ 2. Run timeout + stuck check:
193
+ ```bash
194
+ TIMEOUT=$(node "$HOME/.claude/up/bin/up-tools.cjs" timeout \
195
+ --start $PLAN_START_EPOCH \
196
+ --soft $TIMEOUT_SOFT \
197
+ --hard $TIMEOUT_HARD \
198
+ --idle-since $LAST_ACTIVITY_EPOCH \
199
+ --idle $TIMEOUT_IDLE)
200
+ STUCK=$(node "$HOME/.claude/up/bin/up-tools.cjs" stuck-check \
201
+ --log "$ACTIVITY_LOG" --window 10 --threshold 3)
202
+ ```
203
+
204
+ 3. Decisao por status:
205
+
206
+ | Status | Acao |
207
+ |--------|------|
208
+ | `ok` | Continuar normal |
209
+ | `soft_warning` | Acelerar — pular tarefas opcionais, simplificar |
210
+ | `idle_warning` | Tentar destravar; se proxima tarefa nao avanca, abortar |
211
+ | `hard_abort` | PARAR e retornar ABORTED_TIMEOUT |
212
+ | stuck=true | PARAR e retornar ABORTED_STUCK |
213
+
214
+ 4. Se hard_abort ou stuck:
215
+ ```bash
216
+ mkdir -p .plano/governance
217
+ echo "$(date -u +%Y-%m-%dT%H:%M:%SZ)|phase-${PHASE}|executor|ABORTED|${TIMEOUT_STATUS:-stuck}|elapsed=$(($(date +%s) - PLAN_START_EPOCH))s" >> .plano/governance/aborts.log
218
+
219
+ # Salvar PARTIAL-SUMMARY.md com tarefas completas
220
+ cat > "${PHASE_DIR}/PARTIAL-SUMMARY.md" <<'EOF'
221
+ ---
222
+ phase: ${PHASE}
223
+ status: aborted
224
+ reason: ${TIMEOUT_STATUS:-stuck}
225
+ last_completed_task: ${TASK_NUMBER}
226
+ EOF
227
+ ```
228
+
229
+ Retornar mensagem estruturada:
230
+ ```
231
+ ABORTED: Fase {phase} por {timeout|stuck}
232
+ Tarefas: {N}/{TOTAL} completas
233
+ Decorrido: {elapsed}s
234
+ Estado parcial: .plano/fases/{phase}/PARTIAL-SUMMARY.md
235
+ ```
236
+
237
+ NAO continuar trabalho apos abort. Orquestrador decide proximo passo (retry com escopo reduzido, escalar pro chief, etc).
238
+ </step>
239
+
171
240
  <step name="load_prompt">
172
241
  ```bash
173
242
  cat .plano/fases/XX-nome/{fase}-{plano}-PLAN.md
@@ -61,9 +61,9 @@ Agent(
61
61
  </files_to_read>
62
62
 
63
63
  Versoes COMPLETAS (so se decisao precisa de detalhe):
64
- - Read $HOME/.claude/up/references/governance-rules.md
65
- - Read $HOME/.claude/up/references/rework-limits.md
66
- - Read $HOME/.claude/up/references/engineering-principles.md
64
+ - Read $HOME/.claude/up/references/governance-rules-compressed.md
65
+ - Read $HOME/.claude/up/references/rework-limits-compressed.md
66
+ - Read $HOME/.claude/up/references/engineering-principles-compressed.md
67
67
 
68
68
  Avaliar contra criterios objetivos.
69
69
  Retornar: APPROVE | REQUEST_CHANGES | ESCALATE
@@ -17,8 +17,39 @@ Diferenca do builder:
17
17
 
18
18
  Por que? Para permitir que o build rode em outro runtime (ex: planeja em Claude Code, executa em OpenCode).
19
19
 
20
- **Sem model routing** runtime decide o modelo.
20
+ **Model routing configuravel (v0.9.0+):**
21
+ Antes de spawnar qualquer agente, resolver o modelo:
22
+ ```bash
23
+ MODEL=$(node "$HOME/.claude/up/bin/up-tools.cjs" config resolve-model {agent-name} --raw)
24
+ ```
25
+ Se `default`: nao passar `model=`. Se `opus/sonnet/haiku`: passar `model="{MODEL}"` no spawn.
26
+ Isso permite que o usuario configure via `/up:configurar` quais agentes usam qual modelo.
27
+ Sem configuracao, todos usam o modelo do runtime (comportamento v0.6.0).
28
+
21
29
  **Sonnet-ready obrigatorio** — todos planos em nivel maximo de detalhe.
30
+
31
+ **REGRA ANTI-COLAPSO — SEPARACAO RIGIDA DE AGENTES:**
32
+
33
+ O LLM tende a otimizar colapsando passos — dar ao mesmo agente tarefas de analisar + projetar,
34
+ ou pular supervisores por parecer "overhead". Isso e PROIBIDO.
35
+
36
+ **Cada passo abaixo DEVE ser um Agent() SEPARADO.**
37
+ **NUNCA combinar dois passos em um unico spawn.**
38
+ **NUNCA instruir um agente a fazer o trabalho de outro.**
39
+
40
+ Exemplo do que NAO fazer:
41
+ ```
42
+ # ERRADO — combina product-analyst + system-designer
43
+ Agent(subagent_type="up-product-analyst", prompt="Analisar produto E projetar sistema...")
44
+
45
+ # ERRADO — pula supervisor
46
+ Agent(subagent_type="up-arquiteto", prompt="Estruturar e validar...")
47
+ ```
48
+
49
+ **Mecanismo de enforcement: GATES verificaveis.**
50
+ Cada supervisor DEVE escrever no `.plano/governance/approvals.log`.
51
+ Cada GATE verifica que o log tem a entry esperada.
52
+ Se o gate falha, NAO avance — spawne o agente faltante.
22
53
  </core_principle>
23
54
 
24
55
  <process>
@@ -95,34 +126,112 @@ fi
95
126
 
96
127
  **Brownfield:** spawnar 4 mapeadores em paralelo (ver builder.md secao similar).
97
128
 
98
- ### 2.3 Pipeline de Arquitetura
129
+ ### 2.3 Pipeline de Arquitetura (com GATES verificaveis)
130
+
131
+ **Inicializar governance:**
132
+ ```bash
133
+ mkdir -p .plano/governance
134
+ touch .plano/governance/approvals.log
135
+ echo "# Governance initialized at $(date -u +%Y-%m-%dT%H:%M:%SZ)" >> .plano/governance/approvals.log
136
+ ```
99
137
 
100
- Spawnar em sequencia:
138
+ Spawnar em sequencia — CADA UM e um Agent() SEPARADO:
101
139
 
102
140
  ```python
103
- # Product Analyst
141
+ # PASSO 1: Product Analyst
104
142
  Agent(subagent_type="up-product-analyst", prompt="...")
143
+ ```
105
144
 
106
- # Product-supervisor revisa
107
- Agent(subagent_type="up-product-supervisor", prompt="...")
145
+ ```bash
146
+ # GATE: PRODUCT-ANALYSIS.md existe?
147
+ [ -f .plano/PRODUCT-ANALYSIS.md ] && echo "OK" || { echo "FALHOU: re-spawnar product-analyst"; exit 1; }
148
+ ```
108
149
 
109
- # System Designer
150
+ ```python
151
+ # PASSO 2: Product-supervisor revisa
152
+ Agent(subagent_type="up-product-supervisor", prompt="""
153
+ ...
154
+ **OUTPUT OBRIGATORIO (fazer ANTES de retornar):**
155
+ ```bash
156
+ echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | architecture | product-supervisor | {DECISAO} | {motivo}" >> .plano/governance/approvals.log
157
+ ```
158
+ """)
159
+ ```
160
+
161
+ ```bash
162
+ # GATE: product-supervisor logou?
163
+ grep -q "product-supervisor" .plano/governance/approvals.log || { echo "FALHOU: spawnar product-supervisor"; exit 1; }
164
+ ```
165
+
166
+ ```python
167
+ # PASSO 3: System Designer
110
168
  Agent(subagent_type="up-system-designer", prompt="...")
169
+ ```
111
170
 
112
- # Architecture-supervisor revisa
113
- Agent(subagent_type="up-architecture-supervisor", prompt="...")
171
+ ```bash
172
+ # GATE: SYSTEM-DESIGN.md existe?
173
+ [ -f .plano/SYSTEM-DESIGN.md ] && echo "OK" || { echo "FALHOU: re-spawnar system-designer"; exit 1; }
174
+ ```
114
175
 
115
- # Arquiteto
176
+ ```python
177
+ # PASSO 4: Architecture-supervisor revisa system design
178
+ Agent(subagent_type="up-architecture-supervisor", prompt="""
179
+ ...
180
+ **OUTPUT OBRIGATORIO (fazer ANTES de retornar):**
181
+ ```bash
182
+ echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | architecture | architecture-supervisor | {DECISAO} | system-design" >> .plano/governance/approvals.log
183
+ ```
184
+ """)
185
+ ```
186
+
187
+ ```bash
188
+ # GATE: architecture-supervisor logou para system-design?
189
+ grep -q "architecture-supervisor.*system-design" .plano/governance/approvals.log || { echo "FALHOU: spawnar architecture-supervisor"; exit 1; }
190
+ ```
191
+
192
+ ```python
193
+ # PASSO 5: Arquiteto
116
194
  Agent(subagent_type="up-arquiteto", prompt="...")
195
+ ```
117
196
 
118
- # Architecture-supervisor revisa
119
- Agent(subagent_type="up-architecture-supervisor", prompt="...")
197
+ ```bash
198
+ # GATE: PROJECT.md + ROADMAP.md + REQUIREMENTS.md existem?
199
+ [ -f .plano/PROJECT.md ] && [ -f .plano/ROADMAP.md ] && [ -f .plano/REQUIREMENTS.md ] && echo "OK" || { echo "FALHOU: re-spawnar arquiteto"; exit 1; }
200
+ ```
201
+
202
+ ```python
203
+ # PASSO 6: Architecture-supervisor revisa artefatos do arquiteto
204
+ Agent(subagent_type="up-architecture-supervisor", prompt="""
205
+ ...
206
+ **OUTPUT OBRIGATORIO (fazer ANTES de retornar):**
207
+ ```bash
208
+ echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | architecture | architecture-supervisor | {DECISAO} | architect-artifacts" >> .plano/governance/approvals.log
209
+ ```
210
+ """)
211
+ ```
120
212
 
121
- # Requirements validator
213
+ ```bash
214
+ # GATE: architecture-supervisor logou para architect-artifacts?
215
+ grep -q "architecture-supervisor.*architect-artifacts" .plano/governance/approvals.log || { echo "FALHOU: spawnar architecture-supervisor"; exit 1; }
216
+ ```
217
+
218
+ ```python
219
+ # PASSO 7: Requirements validator
122
220
  Agent(subagent_type="up-requirements-validator", prompt="...")
123
221
 
124
- # Chief-architect aprova arquitetura global
125
- Agent(subagent_type="up-chief-architect", prompt="...")
222
+ # PASSO 8: Chief-architect aprova arquitetura global
223
+ Agent(subagent_type="up-chief-architect", prompt="""
224
+ ...
225
+ **OUTPUT OBRIGATORIO (fazer ANTES de retornar):**
226
+ ```bash
227
+ echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | architecture | chief-architect | {DECISAO} | global-architecture" >> .plano/governance/approvals.log
228
+ ```
229
+ """)
230
+ ```
231
+
232
+ ```bash
233
+ # GATE FINAL DE ARQUITETURA: chief-architect logou?
234
+ grep -q "chief-architect.*global-architecture" .plano/governance/approvals.log || { echo "FALHOU: spawnar chief-architect"; exit 1; }
126
235
  ```
127
236
 
128
237
  ### 2.4 Gate Pos-Arquitetura
@@ -142,10 +251,10 @@ Agent(subagent_type="up-chief-architect", prompt="...")
142
251
  PHASES=$(node "$HOME/.claude/up/bin/up-tools.cjs" roadmap list-phases)
143
252
  ```
144
253
 
145
- Para cada fase:
254
+ Para cada fase — **planejador e supervisor sao SEMPRE agentes SEPARADOS:**
146
255
 
147
256
  ```python
148
- # Planejador (Sonnet-ready obrigatorio)
257
+ # PASSO A: Planejador (Sonnet-ready obrigatorio)
149
258
  Agent(
150
259
  subagent_type="up-planejador",
151
260
  prompt=f"""
@@ -180,8 +289,17 @@ Agent(
180
289
  Gerar 5-8 planos com nivel maximo de detalhe.
181
290
  """
182
291
  )
292
+ ```
183
293
 
184
- # Planning-supervisor revisa
294
+ ```bash
295
+ # GATE: Planos da fase existem?
296
+ PLAN_COUNT=$(ls .plano/fases/${PHASE_DIR}/*-PLAN.md 2>/dev/null | wc -l)
297
+ [ "$PLAN_COUNT" -eq 0 ] && echo "GATE FALHOU: Nenhum PLAN.md para fase ${phase_number}. Re-spawnar planejador." && exit 1
298
+ echo "OK: ${PLAN_COUNT} planos gerados para fase ${phase_number}"
299
+ ```
300
+
301
+ ```python
302
+ # PASSO B: Planning-supervisor revisa (SEPARADO do planejador)
185
303
  Agent(
186
304
  subagent_type="up-planning-supervisor",
187
305
  prompt=f"""
@@ -189,30 +307,88 @@ Agent(
189
307
 
190
308
  Decisao: APPROVE | REQUEST_CHANGES | ESCALATE
191
309
  Max 3 ciclos de rework.
310
+
311
+ **OUTPUT OBRIGATORIO (fazer ANTES de retornar):**
312
+ ```bash
313
+ echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | phase-{phase_number} | planning-supervisor | {{DECISAO}} | {{motivo}}" >> .plano/governance/approvals.log
314
+ ```
192
315
  """
193
316
  )
317
+ ```
194
318
 
195
- # Se REQUEST_CHANGES: re-spawn planejador com feedback
196
- # Se ESCALATE: chief-engineer entra
197
- # Se APPROVE: prosseguir pra proxima fase
319
+ ```bash
320
+ # GATE: planning-supervisor logou para esta fase?
321
+ grep -q "phase-${PHASE_NUMBER}.*planning-supervisor" .plano/governance/approvals.log || { echo "GATE FALHOU: planning-supervisor NAO rodou para fase ${PHASE_NUMBER}. Spawnar agora."; exit 1; }
198
322
  ```
199
323
 
200
- Apos todas fases planejadas:
324
+ Se REQUEST_CHANGES: re-spawn planejador com feedback (max 3 ciclos).
325
+ Se ESCALATE: chief-engineer entra.
326
+ Se APPROVE: prosseguir pra proxima fase.
327
+
328
+ **Repetir para cada fase do ROADMAP.**
329
+
330
+ Apos TODAS fases planejadas:
201
331
 
202
332
  ```python
203
- # Chief-engineer aprova consistencia cross-fase
333
+ # PASSO FINAL: Chief-engineer aprova consistencia cross-fase
204
334
  Agent(
205
335
  subagent_type="up-chief-engineer",
206
336
  prompt="""
207
337
  Revisar TODOS os planos gerados.
208
338
  Validar coerencia cross-fase, dependencies, waves.
209
339
  Decisao: APPROVE | REQUEST_CHANGES
340
+
341
+ **OUTPUT OBRIGATORIO (fazer ANTES de retornar):**
342
+ ```bash
343
+ echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | planning | chief-engineer | {DECISAO} | cross-phase-review" >> .plano/governance/approvals.log
344
+ ```
210
345
  """
211
346
  )
212
347
  ```
213
348
 
349
+ ```bash
350
+ # GATE FINAL DE PLANEJAMENTO: chief-engineer logou cross-phase review?
351
+ grep -q "chief-engineer.*cross-phase-review" .plano/governance/approvals.log || { echo "GATE FALHOU: chief-engineer NAO aprovou cross-fase. Spawnar agora."; exit 1; }
352
+ ```
353
+
214
354
  ## Estagio P: PLANNING AUDIT
215
355
 
356
+ ### GATE PRE-AUDIT: Verificar que TODA governanca do planejamento rodou
357
+
358
+ ```bash
359
+ echo "=== GATE PRE-AUDIT: Verificando governanca completa ==="
360
+
361
+ # Contar entries esperadas
362
+ PHASES=$(node "$HOME/.claude/up/bin/up-tools.cjs" roadmap list-phases 2>/dev/null | grep -c "phase" || echo "0")
363
+ PLAN_SUP_COUNT=$(grep -c "planning-supervisor" .plano/governance/approvals.log 2>/dev/null)
364
+ CHIEF_ENG=$(grep -c "chief-engineer.*cross-phase" .plano/governance/approvals.log 2>/dev/null)
365
+ CHIEF_ARCH=$(grep -c "chief-architect" .plano/governance/approvals.log 2>/dev/null)
366
+ PROD_SUP=$(grep -c "product-supervisor" .plano/governance/approvals.log 2>/dev/null)
367
+ ARCH_SUP=$(grep -c "architecture-supervisor" .plano/governance/approvals.log 2>/dev/null)
368
+
369
+ echo "Planning-supervisor entries: ${PLAN_SUP_COUNT} (esperado: >= ${PHASES})"
370
+ echo "Chief-engineer cross-phase: ${CHIEF_ENG} (esperado: >= 1)"
371
+ echo "Chief-architect: ${CHIEF_ARCH} (esperado: >= 1)"
372
+ echo "Product-supervisor: ${PROD_SUP} (esperado: >= 1)"
373
+ echo "Architecture-supervisor: ${ARCH_SUP} (esperado: >= 1)"
374
+
375
+ FAIL=false
376
+ [ "$CHIEF_ENG" -eq 0 ] && echo "FALHA: chief-engineer NAO aprovou cross-fase" && FAIL=true
377
+ [ "$CHIEF_ARCH" -eq 0 ] && echo "FALHA: chief-architect NAO aprovou arquitetura" && FAIL=true
378
+ [ "$PROD_SUP" -eq 0 ] && echo "FALHA: product-supervisor NAO revisou" && FAIL=true
379
+ [ "$ARCH_SUP" -eq 0 ] && echo "FALHA: architecture-supervisor NAO revisou" && FAIL=true
380
+
381
+ if [ "$FAIL" = true ]; then
382
+ echo ""
383
+ echo "GATE PRE-AUDIT FALHOU: Voltar e spawnar os agentes faltantes."
384
+ exit 1
385
+ else
386
+ echo "GATE PRE-AUDIT OK: Toda governanca logada."
387
+ fi
388
+ ```
389
+
390
+ ### Rodar Auditor
391
+
216
392
  ```python
217
393
  Agent(
218
394
  subagent_type="up-planning-auditor",
@@ -228,13 +404,20 @@ Agent(
228
404
  - .plano/SYSTEM-DESIGN.md
229
405
  - .plano/PENDING.md
230
406
  - .plano/fases/*/*.md
231
- - .plano/governance/approvals.log
407
+ - .plano/governance/approvals.log (VERIFICAR que supervisores e chiefs logaram)
232
408
  - $HOME/.claude/up/templates/audit-plan.md
233
409
  </files_to_read>
234
410
 
235
411
  Calcular Planning Confidence Score (0-100).
236
412
  Validar artefatos, planos, cobertura REQs, Sonnet-readiness, aprovacoes.
237
413
 
414
+ **VERIFICAR no approvals.log:**
415
+ - product-supervisor logou? Se nao: penalizar score
416
+ - architecture-supervisor logou 2x (system-design + architect-artifacts)? Se nao: penalizar
417
+ - planning-supervisor logou para CADA fase? Se nao: penalizar
418
+ - chief-architect logou? Se nao: penalizar
419
+ - chief-engineer logou cross-phase? Se nao: penalizar
420
+
238
421
  Gerar .plano/AUDIT-PLAN.md.
239
422
 
240
423
  Decisao: READY_FOR_BUILD | READY_WITH_WARNINGS | NEEDS_REWORK | BLOCKED
@@ -376,15 +559,17 @@ NAO RECOMENDADO em producao.
376
559
  - [ ] CEO conduziu intake
377
560
  - [ ] BRIEFING, OWNER, PENDING, DESIGN-TOKENS gerados
378
561
  - [ ] Pipeline de arquitetura completo (product-analyst → system-designer → arquiteto)
379
- - [ ] Architecture supervisor aprovou cada artefato
380
- - [ ] Chief-architect aprovou arquitetura global
562
+ - [ ] Architecture supervisor aprovou cada artefato (LOGOU em approvals.log)
563
+ - [ ] Chief-architect aprovou arquitetura global (LOGOU em approvals.log)
381
564
  - [ ] Chief-product aprovou fit
382
- - [ ] TODAS fases do ROADMAP foram planejadas
383
- - [ ] Planning-supervisor aprovou cada plano
384
- - [ ] Chief-engineer aprovou cross-fase
565
+ - [ ] TODAS fases do ROADMAP foram planejadas (PLAN.md por fase)
566
+ - [ ] Planning-supervisor aprovou cada plano (LOGOU em approvals.log POR FASE)
567
+ - [ ] Chief-engineer aprovou cross-fase (LOGOU em approvals.log)
568
+ - [ ] GATE PRE-AUDIT passou (todos 5+ governance entries verificados)
385
569
  - [ ] Planning-auditor rodou e gerou AUDIT-PLAN.md
386
570
  - [ ] Planning Confidence Score calculado
387
571
  - [ ] PLAN-READY.md gerado
388
572
  - [ ] CEO apresentou resumo ao dono
389
573
  - [ ] Commit final feito
574
+ - [ ] .plano/governance/approvals.log tem entries de TODOS supervisores e chiefs
390
575
  </success_criteria>
@@ -21,23 +21,81 @@ Parse JSON: `commit_docs`, `phase_found`, `phase_dir`, `phase_number`, `phase_na
21
21
 
22
22
  ## 2. Parsear Argumentos
23
23
 
24
- Extrair do $ARGUMENTS: numero da fase, flags (`--pesquisar`, `--sem-pesquisa`, `--gaps`, `--auto`).
24
+ Extrair do $ARGUMENTS: fase (numero OU descricao), flags (`--pesquisar`, `--sem-pesquisa`, `--gaps`, `--auto`).
25
25
 
26
- **Se sem numero da fase:** Detectar proxima fase nao planejada do roteiro.
26
+ **Deteccao numero vs descricao:**
27
+ - Se o argumento (sem flags) e um numero inteiro (ex: "3", "12"): tratar como numero de fase
28
+ - Se o argumento contem letras (ex: "sistema de auth", "Adicionar pagamentos"): tratar como descricao de fase nova
29
+ - Se vazio: detectar proxima fase nao planejada do roteiro
27
30
 
28
- **Se `phase_found` = false:** Validar fase existe no ROADMAP.md. Se valida, criar diretorio:
31
+ **Se sem numero/descricao:** Detectar proxima fase nao planejada do roteiro.
32
+
33
+ **Se `phase_found` = false E argumento e numero:** Validar fase existe no ROADMAP.md. Se valida, criar diretorio:
29
34
  ```bash
30
35
  mkdir -p ".plano/fases/${padded_phase}-${phase_slug}"
31
36
  ```
32
37
 
38
+ **Se argumento e descricao:** Prosseguir para passo 3 (que tratara a criacao se necessario).
39
+
33
40
  ## 3. Validar Fase
34
41
 
35
42
  ```bash
36
43
  PHASE_INFO=$(node "$HOME/.claude/up/bin/up-tools.cjs" roadmap get-phase "${PHASE}")
37
44
  ```
38
45
 
39
- **Se `found` = false:** Erro com fases disponiveis.
40
- **Se `found` = true:** Extrair `phase_number`, `phase_name`, `goal`.
46
+ **Se `found` = true:** Extrair `phase_number`, `phase_name`, `goal`. Prosseguir para passo 4.
47
+
48
+ **Se `found` = false:** A fase nao existe no ROADMAP. Duas situacoes:
49
+
50
+ **3a. O argumento e um NUMERO (ex: `/up:planejar-fase 5`):**
51
+
52
+ Erro --- fase numerica que nao existe no roadmap indica engano do usuario.
53
+
54
+ ```
55
+ ERRO: Fase {N} nao existe no roadmap.
56
+ Fases disponiveis: [listar]
57
+ Para adicionar fase nova: /up:planejar-fase "descricao da fase"
58
+ ```
59
+
60
+ **3b. O argumento e uma DESCRICAO (ex: `/up:planejar-fase "sistema de notificacoes"`):**
61
+
62
+ Perguntar se quer adicionar ao roadmap:
63
+
64
+ ```
65
+ AskUserQuestion(
66
+ header: "Fase nao existe no roadmap",
67
+ question: "A fase \"{descricao}\" nao existe no roadmap. Quer adicionar e ja planejar?",
68
+ options: [
69
+ { label: "Sim, adicionar e planejar", description: "Cria a fase no ROADMAP.md e ja gera os planos" },
70
+ { label: "Nao", description: "Cancelar" }
71
+ ]
72
+ )
73
+ ```
74
+
75
+ Se "Sim": criar a fase via up-tools e continuar:
76
+
77
+ ```bash
78
+ RESULT=$(node "$HOME/.claude/up/bin/up-tools.cjs" phase add "${descricao}")
79
+ ```
80
+
81
+ Extrair `phase_number`, `phase_name`, `slug`, `directory` do resultado.
82
+ Atualizar STATE.md (mesma logica do antigo adicionar-fase):
83
+
84
+ ```
85
+ Em "## Contexto Acumulado" → "### Evolucao do Roadmap" adicionar:
86
+ - Fase {N} adicionada: {descricao}
87
+ ```
88
+
89
+ Re-rodar init para obter paths corretos:
90
+
91
+ ```bash
92
+ INIT=$(node "$HOME/.claude/up/bin/up-tools.cjs" init planejar-fase "${phase_number}")
93
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
94
+ ```
95
+
96
+ Prosseguir para passo 4 com a fase recem-criada.
97
+
98
+ Se "Nao": sair.
41
99
 
42
100
  ## 4. Carregar CONTEXT.md
43
101
 
@@ -1,33 +0,0 @@
1
- ---
2
- name: up:adicionar-fase
3
- description: Adicionar fase ao final do roadmap
4
- argument-hint: "<descricao>"
5
- allowed-tools:
6
- - Read
7
- - Write
8
- - Edit
9
- - Bash
10
- - Glob
11
- ---
12
- <objective>
13
- Add a new phase to the end of the project roadmap.
14
-
15
- **Flow:** Parse description -> Call `up-tools.cjs phase add` -> Update STATE.md -> Present result
16
- </objective>
17
-
18
- <execution_context>
19
- @~/.claude/up/workflows/adicionar-fase.md
20
- </execution_context>
21
-
22
- <context>
23
- Phase description: $ARGUMENTS
24
-
25
- Adds a new phase to ROADMAP.md at the end of the existing phase list.
26
- </context>
27
-
28
- <process>
29
- 1. Parse the phase description from arguments.
30
- 2. Call `up-tools.cjs phase add` with the description.
31
- 3. Update STATE.md to reflect the new phase.
32
- 4. Present the result showing the new roadmap state.
33
- </process>
@@ -1,106 +0,0 @@
1
- ---
2
- name: up:configurar
3
- description: Configurar opcoes do workflow UP para o projeto atual
4
- allowed-tools:
5
- - Read
6
- - Write
7
- - Bash
8
- - AskUserQuestion
9
- ---
10
-
11
- <objective>
12
- Configuracao interativa das opcoes do workflow UP. Atualiza .plano/config.json com preferencias do usuario.
13
- </objective>
14
-
15
- <process>
16
-
17
- ## 1. Carregar Configuracao Atual
18
-
19
- ```bash
20
- cat .plano/config.json 2>/dev/null || echo "{}"
21
- ```
22
-
23
- Valores default se ausentes:
24
- - `modo`: "solo"
25
- - `paralelizacao`: true
26
- - `commit_docs`: true
27
- - `auto_advance`: false
28
-
29
- ## 2. Apresentar Opcoes
30
-
31
- Usar AskUserQuestion com valores atuais pre-selecionados:
32
-
33
- ```
34
- AskUserQuestion([
35
- {
36
- question: "Modo de trabalho?",
37
- header: "Modo",
38
- multiSelect: false,
39
- options: [
40
- { label: "Solo (Recomendado)", description: "Desenvolvedor unico, commits diretos" },
41
- { label: "Time", description: "Multiplos desenvolvedores, branches por fase" }
42
- ]
43
- },
44
- {
45
- question: "Paralelizar agentes quando possivel?",
46
- header: "Paralelizacao",
47
- multiSelect: false,
48
- options: [
49
- { label: "Sim (Recomendado)", description: "Agentes rodam em paralelo quando independentes" },
50
- { label: "Nao", description: "Agentes rodam sequencialmente" }
51
- ]
52
- },
53
- {
54
- question: "Commitar documentos de planejamento automaticamente?",
55
- header: "Commit Docs",
56
- multiSelect: false,
57
- options: [
58
- { label: "Sim (Recomendado)", description: "STATE.md, ROADMAP.md, PLANs commitados automaticamente" },
59
- { label: "Nao", description: "Apenas codigo e commitado, docs ficam unstaged" }
60
- ]
61
- },
62
- {
63
- question: "Avancar pipeline automaticamente? (discutir -> planejar -> executar)",
64
- header: "Auto-Advance",
65
- multiSelect: false,
66
- options: [
67
- { label: "Nao (Recomendado)", description: "Manual /clear entre estagios" },
68
- { label: "Sim", description: "Encadeia estagios via subagentes" }
69
- ]
70
- }
71
- ])
72
- ```
73
-
74
- ## 3. Atualizar config.json
75
-
76
- Mapear respostas para valores:
77
-
78
- ```json
79
- {
80
- "modo": "solo" | "time",
81
- "paralelizacao": true | false,
82
- "commit_docs": true | false,
83
- "auto_advance": true | false
84
- }
85
- ```
86
-
87
- Escrever em `.plano/config.json`.
88
-
89
- ## 4. Confirmar
90
-
91
- ```
92
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
93
- UP > CONFIGURACAO ATUALIZADA
94
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
95
-
96
- | Opcao | Valor |
97
- |----------------|-------------|
98
- | Modo | {solo/time} |
99
- | Paralelizacao | {Sim/Nao} |
100
- | Commit Docs | {Sim/Nao} |
101
- | Auto-Advance | {Sim/Nao} |
102
-
103
- Estas opcoes se aplicam a futuros /up:planejar-fase e /up:executar-fase.
104
- ```
105
-
106
- </process>
@@ -1,6 +0,0 @@
1
- {
2
- "modo": "solo",
3
- "paralelizacao": true,
4
- "commit_docs": true,
5
- "auto_advance": false
6
- }