up-cc 2.0.3 → 2.2.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.
@@ -52,27 +52,44 @@ O LLM tende a colapsar passos (mesmo agente executa + verifica). Isso e PROIBIDO
52
52
  e um `Agent()` SEPARADO. O enforcement e o GATE deterministico do `approvals.log`
53
53
  (ver `@~/.claude/up/workflows/governance.md`), nao uma piramide de supervisores.
54
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`.)
55
+ **GitHub-nativo e o DEFAULT (v2): DOIS EIXOS SEPARADOS:**
56
+
57
+ O GitHub (worktree/branch/issue/PR) e a INTERACAO humana (menu/gate visual/merge) sao eixos
58
+ independentes. As flags mexem so na interacao; o GitHub fica ligado sempre que da.
59
+
60
+ - **Eixo GitHub:** LIGADO sempre que ha remote E (`gh` autenticado OU MCP do GitHub conectado).
61
+ Worktree+branch sao git local e SEMPRE acontecem (offline-ok). Issue/PR usam o transporte:
62
+ `gh` (CLI cria direto) ou `mcp` (o workflow cria via `mcp__...github__*` e grava com
63
+ `record-issue`/`record-pr`). DESLIGA so com `--local` ou `config.github_native=false`.
64
+ - `--local`: ESCAPE HATCH sem GitHub. Commit atomico na branch ATUAL. Zero worktree/issue/PR/rede.
65
+ (Mesmo comportamento de `/up:rapido`.) **Este e o unico jeito de pular o GitHub no build.**
66
+ - `--solo`: NAO desliga o GitHub. Solo = autonomo total: GitHub completo (branch/worktree/issue/PR
67
+ + auto-merge), SEM menu e SEM gate visual. Pra loop/headless onde ninguem aprova nada.
68
+ - `--auto`: pula o MENU de fechamento (auto-merge), MAS o gate visual (3.8.0) ainda roda se
69
+ `require_visual_test=true`. Mantem GitHub ligado.
62
70
  - **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.
71
+ o dono aprovar na tela ANTES do merge (3.8.0). `--solo` pula sempre; `--auto` so pula com `require_visual_test=false`.
72
+ Projeto em PRODUCAO: deixe ligado e nao use `--solo` (nada sobe sem voce ver).
67
73
  - `--board`: espelha status no Multica (espelho de board OPT-IN, BATCHED no fim da onda/fase). NAO ha
68
74
  stream ao vivo no fluxo local: o board mostra so o status (`todo -> in_progress -> in_review -> done /
69
75
  blocked`), nunca cada tool_use. Chamadas via `up-tools.cjs multica {init|sync|board}` (que usa
70
76
  `multica.cjs`, deteccao `uname -s` Mac->`ssh server-ecoup`, FAIL-OPEN: se `multica` indisponivel, avisa
71
77
  e segue sem board, nunca crasha). So roda quando `--board` ligado.
72
78
 
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).
79
+ **Resumo das flags** (GitHub = artefatos; demais = interacao):
80
+
81
+ | Flag | GitHub | Menu fim | Gate visual | Merge |
82
+ |------|:---:|:---:|:---:|---|
83
+ | (nenhum) | SIM | SIM (4 opcoes) | SIM | conforme menu |
84
+ | `--auto` | SIM | NAO | SIM (a menos require_visual_test=false) | auto squash |
85
+ | `--solo` | SIM | NAO | NAO (pula sempre) | auto squash |
86
+ | `--local` | NAO | NAO | NAO | commit na branch atual |
87
+
88
+ **FAIL-OPEN universal:** `start-phase`/`finish-phase` detectam remote + transporte (`gh`/`mcp`/`none`).
89
+ Sem remote, degradam para git local (worktree local + merge local; issue/PR = null) com aviso, NUNCA
90
+ crasham. `git worktree` e sempre local e funciona offline. Sem `gh` mas com MCP, o transporte e `mcp`:
91
+ worktree/branch/push acontecem no `.cjs` e o workflow cria issue/PR via MCP. Com `--local` nao ha nem
92
+ worktree (commit direto na branch atual).
76
93
 
77
94
  **Onde o estado vive:** `git-map.json` e canonico no working dir PRINCIPAL (`.plano/git-map.json`). O `.plano/`
78
95
  de cada fase viaja na branch da fase (worktree) e volta pra main no merge. STATE.md permanece a fonte humana
@@ -175,25 +192,31 @@ Projeto planejado em {runtime}.
175
192
  Resumo: {N} fases, {M} planos. Planning confidence: {X}/100.
176
193
  Pendencias conhecidas: {de PENDING.md}.
177
194
 
178
- Modo git: {GITHUB_MODE} (GitHub-nativo e o default; --solo desliga; --auto pula o menu)
195
+ Modo git: {GITHUB_MODE} (GitHub-nativo e o default; --local desliga; --solo/--auto sao autonomia, nao desligam)
179
196
  ```
180
197
 
181
- Resolver `GITHUB_MODE` antes do banner:
198
+ Resolver `GITHUB_MODE` antes do banner. `$LOCAL`/`$SOLO`/`$AUTO`/`$BOARD_FLAG` vem das flags da
199
+ invocacao. **`--solo` NAO desliga o GitHub** (so `--local` desliga):
182
200
 
183
201
  ```bash
184
- # --solo forca github_native=false SO nesta execucao
185
- if [ "$SOLO" = "true" ]; then
202
+ # So --local (ou config github_native=false) desliga o GitHub.
203
+ if [ "$LOCAL" = "true" ]; then
186
204
  GITHUB_NATIVE=false
187
205
  else
188
206
  GITHUB_NATIVE=$(node "$HOME/.claude/up/bin/up-tools.cjs" config get github_native --raw 2>/dev/null)
189
207
  [ -z "$GITHUB_NATIVE" ] && GITHUB_NATIVE=true # default TRUE
190
208
  fi
191
209
 
210
+ # --solo e --auto sao AUTONOMIA (sem menu). --solo tambem pula o gate visual.
211
+ AUTONOMO=false
212
+ { [ "$SOLO" = "true" ] || [ "$AUTO" = "true" ]; } && AUTONOMO=true
213
+
192
214
  if [ "$GITHUB_NATIVE" = "true" ]; then
193
215
  GITHUB_MODE="GitHub-nativo (worktree + issue + PR/menu por fase)"
194
- [ "$AUTO" = "true" ] && GITHUB_MODE="GitHub-nativo --auto (PR + merge squash automatico)"
216
+ [ "$AUTO" = "true" ] && GITHUB_MODE="GitHub-nativo --auto (PR + merge squash; gate visual ainda roda)"
217
+ [ "$SOLO" = "true" ] && GITHUB_MODE="GitHub-nativo --solo (autonomo total: PR + merge, SEM gate visual)"
195
218
  else
196
- GITHUB_MODE="--solo (commit atomico na branch atual, sem worktree/issue/PR)"
219
+ GITHUB_MODE="--local (commit atomico na branch atual, sem worktree/issue/PR)"
197
220
  fi
198
221
 
199
222
  # --board liga o espelho Multica (OPT-IN). So tem efeito se passado explicitamente.
@@ -231,27 +254,37 @@ Para cada fase em ROADMAP.md (em ordem):
231
254
 
232
255
  ### 3.0 Abrir a fase (GitHub-nativo - DEFAULT)
233
256
 
234
- A menos que `--solo` (ou `github_native=false`), abrir worktree + branch + issue ANTES de executar a fase.
257
+ A menos que `--local` (ou `github_native=false`), abrir worktree + branch + issue ANTES de executar a fase.
235
258
 
236
259
  ```bash
237
260
  PHASE_SLUG=$(node "$HOME/.claude/up/bin/up-tools.cjs" slug "{phase_name}" --raw)
238
261
 
239
262
  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).
263
+ # Cria worktree + branch up/fase-NN-slug SEMPRE (git local). Issue por transporte:
264
+ # gh -> issue criada aqui; mcp -> retorna pending.issue (workflow cria via MCP); none -> sem remote.
242
265
  START=$(node "$HOME/.claude/up/bin/up-tools.cjs" github start-phase \
243
266
  --phase {phase_number} --slug "$PHASE_SLUG" --raw)
244
267
  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}"
268
+ WORKTREE=$(echo "$START" | grep -oE '"worktree"[^,}]*' | sed 's/.*: *"//;s/"//')
269
+ BRANCH=$(echo "$START" | grep -oE '"branch"[^,}]*' | sed 's/.*: *"//;s/"//')
270
+ ISSUE=$(echo "$START" | grep -oE '"issue"[^,}]*' | sed 's/.*: *//')
271
+ TRANSPORT=$(echo "$START" | grep -oE '"transport"[^,}]*' | sed 's/.*: *"//;s/"//')
272
+ echo "Fase {phase_number}: branch=$BRANCH worktree=$WORKTREE issue=${ISSUE:-null} transport=$TRANSPORT"
249
273
  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=""
274
+ # --local: sem worktree/issue. Trabalho acontece na branch atual.
275
+ WORKTREE="$(pwd)"; BRANCH="$(git rev-parse --abbrev-ref HEAD 2>/dev/null)"; ISSUE=""; TRANSPORT=none
252
276
  fi
253
277
  ```
254
278
 
279
+ **Issue via MCP (quando `transport=mcp`):** sem `gh` mas com remote, `start-phase` ja criou worktree+branch
280
+ e devolveu `pending.issue {title, body}` no JSON. Se voce (orquestrador) TEM as tools `mcp__...github__*`,
281
+ crie a issue agora e grave o numero de volta:
282
+
283
+ > Ao detectar `transport=mcp` no `$START`: extraia `pending.issue.title`/`pending.issue.body`, chame
284
+ > `mcp__plugin_github_github__issue_write` (create) no repo do remote, pegue o numero retornado e rode
285
+ > `node "$HOME/.claude/up/bin/up-tools.cjs" github record-issue --phase {phase_number} --issue <num> --url <url>`.
286
+ > Se voce NAO tem MCP do GitHub: siga sem issue (worktree/branch ja existem; PR pode degradar pra merge local no fim).
287
+
255
288
  **Entrar na worktree (so se github_native):** o trabalho da fase (executor, commits) acontece
256
289
  DENTRO de `$WORKTREE`. Preferir a tool nativa do harness **EnterWorktree** apontando para `$WORKTREE`; se
257
290
  indisponivel, a worktree ja foi criada por `start-phase` (basta usar `--cwd "$WORKTREE"` nos comandos
@@ -259,7 +292,7 @@ indisponivel, a worktree ja foi criada por `start-phase` (basta usar `--cwd "$WO
259
292
  `git-map.json` permanece canonico no working dir principal. Ao terminar a fase usar **ExitWorktree** (ou
260
293
  voltar `cd` para o repo principal) antes de atualizar `git-map.json` na main.
261
294
 
262
- > Em `--solo`, IGNORAR EnterWorktree/ExitWorktree: tudo na branch atual.
295
+ > Em `--local`, IGNORAR EnterWorktree/ExitWorktree: tudo na branch atual. Em `--solo` HA worktree (solo nao desliga GitHub).
263
296
 
264
297
  **Multica: marcar a fase em execucao (so se `--board`, 1 chamada na ENTRADA da fase).**
265
298
  Uma transicao por fase (nao por microtransicao): status `in_progress` + metadata `gh_issue`/`branch`.
@@ -281,7 +314,7 @@ NAO existe mais "1 plano por fase" (era a regressao do `head -1`): descobrimos T
281
314
  agrupamento por wave do disco.
282
315
 
283
316
  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).
317
+ de descoberta usa `--cwd "$WORKTREE"` (em `--local`, `$WORKTREE` = repo principal, entao funciona igual).
285
318
 
286
319
  ```bash
287
320
  # (a) Metadados da fase + flag de paralelizacao (config). Trata @file: (saida > 50KB).
@@ -635,7 +668,7 @@ fi
635
668
 
636
669
  So apos o GATE aprovar (APPROVE ou forced approval registrado).
637
670
 
638
- **Caso `--solo` (github_native=false):** nada a fazer aqui. Tudo ja foi committado atomicamente na branch
671
+ **Caso `--local` (github_native=false):** nada a fazer aqui. Tudo ja foi committado atomicamente na branch
639
672
  atual. Seguir direto para 3.9. (Sem worktree, sem teste-visual-gate, sem merge.)
640
673
 
641
674
  #### 3.8.0 Checkpoint de teste visual (PRE-MERGE) - so GitHub-nativo
@@ -649,9 +682,10 @@ REQUIRE_VISUAL=$(node "$HOME/.claude/up/bin/up-tools.cjs" config get require_vis
649
682
  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
683
  ```
651
684
 
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).
685
+ **Aplica o gate quando:** (HAS_UI ou HAS_DEV) E NAO `--solo` E NAO (`--auto` E REQUIRE_VISUAL=false).
686
+ Ou seja: por padrao SEMPRE pede aprovacao visual antes do merge em fase de UI. `--solo` pula SEMPRE
687
+ (autonomo total). Pra pular sem solo (CI/yolo): `--auto` + `require_visual_test=false`. Projeto em
688
+ PRODUCAO: deixe o default (true) e nao use `--solo`.
655
689
 
656
690
  Se aplica:
657
691
 
@@ -706,32 +740,44 @@ pkill -f "npm run dev" 2>/dev/null || true; pkill -f "npm start" 2>/dev/null ||
706
740
  A escolha do checkpoint define a acao de fechamento (3.8.1): "Pode mergear"/"Aprovado" -> MERGE;
707
741
  "Deixa a branch" -> nao mergeia; "Descarta" -> remove sem merge.
708
742
 
709
- **Fase SEM UI** (infra/schema/backend puro) ou `--auto` com `require_visual_test=false`: pula 3.8.0.
743
+ **Fase SEM UI** (infra/schema/backend puro), `--solo`, ou `--auto` com `require_visual_test=false`: pula 3.8.0.
710
744
  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).
745
+ dev server) pra o dono decidir merge/PR/deixa/descarta. **Autonomo (`--solo`/`--auto`)** fecha direto sem
746
+ menu: `ESCOLHA=mergear`.
712
747
 
713
748
  #### 3.8.1 Merge e avancar
714
749
 
715
750
  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`):
751
+ atualize `git-map.json` na main. **Autonomo (`--solo`/`--auto`):** sem menu, `ESCOLHA=mergear`.
752
+ Mapear a escolha de 3.8.0 para `finish-phase` (`--mode menu|auto|local`):
718
753
 
719
754
  ```bash
755
+ [ "$AUTONOMO" = "true" ] && [ -z "$ESCOLHA" ] && ESCOLHA=mergear
720
756
  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 ;;
757
+ # Pode mergear / Aprovado: finish-phase --mode auto. Transporte gh: pr create (Closes #N) -> merge -> cleanup.
758
+ # Transporte mcp (sem gh): faz push e retorna action 'needs-mcp-pr' (ver abaixo). none: merge LOCAL + cleanup.
759
+ mergear|aprovado) FIN=$(node "$HOME/.claude/up/bin/up-tools.cjs" github finish-phase --phase {phase_number} --mode auto --strategy squash --raw) ;;
724
760
  # 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 ;;
761
+ deixa) FIN=$(node "$HOME/.claude/up/bin/up-tools.cjs" github finish-phase --phase {phase_number} --mode menu --raw) ;;
726
762
  # 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)." ;;
763
+ descarta) echo "Descartando fase {phase_number}: remover worktree + branch (sem merge)." ; FIN="" ;;
728
764
  esac
729
765
  ```
730
766
 
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.
767
+ **PR via MCP (quando `FIN` traz `"action":"needs-mcp-pr"`):** sem `gh`, o `finish-phase` ja deu `git push` da
768
+ branch e devolveu `pr_payload {base, head, title, body, issue, strategy}`. Se voce TEM `mcp__...github__*`:
769
+
770
+ > Chame `mcp__plugin_github_github__create_pull_request` (base/head/title/body do `pr_payload`), depois
771
+ > `mcp__plugin_github_github__merge_pull_request` (merge_method=squash). Pegue o numero do PR e rode:
772
+ > `node "$HOME/.claude/up/bin/up-tools.cjs" github record-pr --phase {phase_number} --pr <num> --url <url> --merged`
773
+ > (`--merged` grava o PR, marca a fase merged e limpa worktree+branch). Se NAO tem MCP: rode
774
+ > `github finish-phase --phase {phase_number} --mode local` como degradacao (a branch ja foi pushada; faca o
775
+ > merge no GitHub manualmente depois) OU avise o dono.
776
+
777
+ `finish-phase --mode auto` (transporte gh) faz: gh pr create (body com `Closes #<issue>`) -> merge (squash
778
+ default, ou `--strategy merge|rebase`) -> cleanup worktree+branch, atualiza `git-map.json`. Sem remote (none),
779
+ faz merge LOCAL da branch na base e remove a worktree (issue/PR=null). `--mode local` nao faz nada (usado em
780
+ `--local`, ja committado na branch atual); em `--local` o fluxo nem chega aqui (tratado em 3.8).
735
781
 
736
782
  **Multica: sync BATCHED no FIM da fase/onda (so se `--board`).**
737
783
  Uma unica chamada que reflete TODAS as transicoes acumuladas da fase de uma vez (nao por microtransicao):
@@ -759,7 +805,7 @@ if [ "$BOARD" = "true" ]; then
759
805
  fi
760
806
  ```
761
807
 
762
- > Em `--solo` o fluxo nem chega aqui (sem `--board`): nenhuma chamada Multica.
808
+ > Em `--local` o fluxo nem chega aqui (sem `--board`): nenhuma chamada Multica.
763
809
 
764
810
  ### 3.9 Reassessment de roadmap (pos-fase, inline, ~30s)
765
811
 
@@ -845,8 +891,9 @@ final_confidence: [do up-revisor de delivery]
845
891
  - [ ] E2E + DCRV rodaram por fase (delegado a dcrv.md)
846
892
  - [ ] up-revisor emitiu veredito por fase e LOGOU em approvals.log COM campo evidence=<tipo>:<resultado>
847
893
  - [ ] 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)
894
+ - [ ] GitHub-nativo (default): worktree+branch+issue por fase via `github start-phase` (transporte gh OU
895
+ MCP); menu 4 opcoes / `github finish-phase` no fim. `--solo`/`--auto` mantem GitHub (autonomia, nao
896
+ desliga). `--local` degrada para commit na branch atual (sem worktree/issue/PR)
850
897
  - [ ] Execucao sempre via up-executor (roteia por contexto: frontend/backend/database/misto); SEM agentes
851
898
  specialist separados (Onda 2 do corte)
852
899
  - [ ] `--board`: Multica init no inicio (project+pai), sync `in_progress` na entrada da fase, sync BATCHED
@@ -4,7 +4,7 @@ Executar tarefas pequenas e ad-hoc com garantias UP (commits atomicos, rastreame
4
4
  **ESCAPE HATCH PURO (sem cerimonia GitHub).** Diferente de `/up:build` (GitHub-nativo por DEFAULT:
5
5
  worktree -> branch `up/fase-NN` -> issue -> PR -> menu), o modo rapido NUNCA cria worktree, NUNCA cria
6
6
  issue do GitHub, NUNCA abre PR e NAO toca em `.plano/git-map.json`. Todo o trabalho e committado
7
- atomicamente na branch ATUAL (mesmo semantica do `--solo` do build). E o caminho quente para
7
+ atomicamente na branch ATUAL (mesma semantica do `--local` do build). E o caminho quente para
8
8
  "so faz e commita". Quem quer worktree/issue/PR usa `/up:build`.
9
9
  </purpose>
10
10
 
@@ -290,9 +290,12 @@ Escrever inline (sem CEO):
290
290
  **`.plano/config.json`** — defaults (perguntar so na complex):
291
291
 
292
292
  ```json
293
- { "mode": "yolo", "granularity": "standard", "parallelization": true, "commit_docs": true }
293
+ { "mode": "yolo", "granularity": "standard", "parallelization": true, "commit_docs": true, "github_native": true }
294
294
  ```
295
295
 
296
+ `github_native: true` explicito torna a intencao visivel no arquivo (o build ja usa true por default, mas
297
+ deixar gravado evita ambiguidade em run autonomo). So vira `false` se o projeto e local sem GitHub.
298
+
296
299
  Commits atomicos:
297
300
 
298
301
  ```bash
@@ -345,9 +348,10 @@ Apos estruturar, o `/up` NAO planeja nem executa fases sozinho. Ele entrega o ha
345
348
  ---
346
349
  ```
347
350
 
348
- > `/up:build` aceita `--solo` (default, commit na branch atual), `--pr` (worktree+issue+PR),
349
- > `--board` (espelho de status no Multica, batched, fail-open) e `--auto` (merge se verde). Para ver o
350
- > board depois: `/up estado board` (abre a URL no Multica). Aqui so roteamos pro /up:plan.
351
+ > `/up:build` e **GitHub-nativo por padrao** (worktree + issue + PR por fase, via `gh` OU MCP do GitHub).
352
+ > Flags: `--auto` (pula o menu, mantem GitHub), `--solo` (autonomo total: GitHub + auto-merge, sem menu
353
+ > nem gate visual), `--local` (escape sem GitHub: commit na branch atual), `--board` (espelho de status no
354
+ > Multica, batched, fail-open). Para ver o board depois: `/up estado board`. Aqui so roteamos pro /up:plan.
351
355
 
352
356
  ## Passo 4: CLONE (URL recebida)
353
357
 
@@ -394,6 +398,7 @@ escreve o PRD pronto pro planejamento.
394
398
 
395
399
  ```json
396
400
  { "mode": "yolo", "granularity": "standard", "parallelization": true, "commit_docs": true,
401
+ "github_native": true,
397
402
  "builder_type": "clone", "clone_source": "{URL}", "clone_mode": "{exact|improve|inspiration}",
398
403
  "clone_data": ".plano/clone/" }
399
404
  ```