ganbatte-os 0.2.32 → 0.2.34

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.
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: execute-plan
3
+ description: Executa um plano (PLAN-NNN-<slug>) task-a-task aplicando state machine + visual gate contra Storybook canonico antes de marcar validacao. Comando primario do ambiente Codex IDE.
4
+ argument-hint: "<PLAN-NNN-slug> [--task T-NNN-NN] [--skip-visual-gate]"
5
+ allowedTools: [Read, Glob, Grep, Bash, Write, Edit, Agent, AskUserQuestion]
6
+ sourceDocs:
7
+ - templates/taskTemplate.md
8
+ - playbooks/plan-creation-playbook.md
9
+ - skills/figma-implement-design/SKILL.md
10
+ - skills/plan-blueprint/SKILL.md
11
+ use-when:
12
+ - executar plano ja criado por *plan
13
+ - rodar tasks de um PLAN-NNN com state machine e visual gate
14
+ - ambiente Codex IDE Extension (comando primario)
15
+ do-not-use-for:
16
+ - criar plano novo (use plan-blueprint)
17
+ - decompor plano em tasks (use plan-to-tasks)
18
+ - gerenciar progress.txt isoladamente (use progress-tracker)
19
+ metadata:
20
+ category: execution
21
+ ---
22
+
23
+ Voce esta executando como **Executor de Planos** via skill `execute-plan`. No ambiente Codex IDE Extension este e o comando primario do ciclo `Opus(plan) -> Codex(execute)`.
24
+
25
+ ## Input
26
+
27
+ $ARGUMENTS
28
+
29
+ Formato esperado:
30
+ - `<PLAN-NNN-slug>` — id do plano (ex.: `PLAN-001-pagina-projetos-inicial`)
31
+ - `--task T-NNN-NN` — opcional, executa apenas a task especifica
32
+ - `--skip-visual-gate` — opcional, pula visual gate (raro, registra warning)
33
+
34
+ ## Pre-requisitos (gate)
35
+
36
+ 1. Resolver paths via `.gos-local/plan-paths.json`. Se ausente, abortar e instruir o usuario a rodar `*plan` primeiro.
37
+ 2. Localizar `<dirs.planos>/<PLAN-NNN-slug>/plan.md`. Se ausente, abortar.
38
+ 3. Ler `plan.md` por completo: frontmatter + Componentes mapeados + Componentes ausentes + Aderencia a stack + Plano de execucao + Checklist de aceite.
39
+ 4. Validar `stack_ref` do frontmatter contra `<dirs.stack>` (`docs/stack.md`):
40
+ - Calcular sha-curto atual e comparar.
41
+ - Drift detectado: ABORTAR e instruir `*stack drift` + replanejar com `*stack refresh`.
42
+ 5. Ler `<dirs.progress>` (progress.txt). Se aponta para outro plano ativo, perguntar se troca o foco antes de prosseguir.
43
+
44
+ ## Pre-flight visual
45
+
46
+ (Pulado quando `--skip-visual-gate` presente — registrar warning em `tasks/T-NNN-NN.notes.md` da primeira task.)
47
+
48
+ 1. Resolver `<dirs.storybook>` via `plan-paths.json`. Path absoluto fora do repo do projeto e valido (ex.: `E:\Github\Ganbatte\tmp\fractus-storybook`).
49
+ 2. Indexar todos `.stories.tsx` disponiveis em `<dirs.stories>` ou `<dirs.components>`.
50
+ 3. Para cada linha da tabela "Componentes mapeados" do plano:
51
+ - Confirmar que a coluna `Story (path)` aponta para arquivo existente.
52
+ - Se ausente: gerar task de criacao do componente ANTES das tasks de implementacao. Renumerar `seq` das tasks restantes.
53
+ 4. Output do pre-flight: bloco em `progress.txt` campo `notes=` com numero de stories indexadas e tasks de criacao geradas.
54
+
55
+ ## Loop por task
56
+
57
+ Iterar tasks em ordem de `seq`. Para cada `tasks/T-NNN-NN-*.md`:
58
+
59
+ 1. **Mover para em-andamento**: `*progress status T-NNN-NN em-andamento`. State machine valida transicao.
60
+ 2. **Despachar agent**: ler `labels: [agent:<slug>]` da task. Default: `dev`. Invocar via Agent tool com prompt completo (objetivo, plano de execucao, DoD, paths relevantes).
61
+ 3. **Implementacao**: agent edita arquivos seguindo o plano de execucao da task. Stack como contrato — nada fora de `docs/stack.md` salvo se `arch_change=true` no frontmatter do plano pai.
62
+ 4. **Visual gate** (antes de propor `validacao`):
63
+
64
+ Para cada componente alterado/criado pela task:
65
+
66
+ a) Localizar `<Componente>.stories.tsx` em `<dirs.storybook>`.
67
+ b) Comparar implementacao vs story canonica em 4 dimensoes textuais:
68
+ - **Anatomia**: ordem de slots/elementos (header -> corpo -> footer; icones esquerda/direita; campos do form na ordem do design).
69
+ - **Tokens**: classes Tailwind/variaveis CSS batem com DS (cor, raio, espacamento, tipografia).
70
+ - **Variants**: props expostos cobrem variants da story.
71
+ - **Densidade**: padding/gap dentro de +-1 step da escala do DS.
72
+ c) Para a tela como um todo: invocar Figma MCP no `figma_url` do plano e cruzar com o JSX renderizado em arvore (mesmo numero de secoes, mesma hierarquia, mesmas labels).
73
+ d) Output: relatorio curto em `tasks/T-NNN-NN.notes.md` (4 secoes: anatomia, tokens, variants, densidade + secao "Arvore vs Figma").
74
+ e) Divergencia >= 1 item critico (anatomia ou tokens) -> falha o gate.
75
+
76
+ 5. **Resultado do gate**:
77
+ - Sucesso -> `*progress status T-NNN-NN validacao`. Preparar arquivos staged (sem commit).
78
+ - Falha -> manter em `em-andamento`, gravar diff em `T-NNN-NN.notes.md`, retornar pra etapa 3.
79
+
80
+ ## Fechamento
81
+
82
+ Quando todas as tasks atingirem `validacao` E o checklist de aceite do plano estiver marcado:
83
+
84
+ 1. Listar arquivos modificados via `git diff --name-only`.
85
+ 2. Preparar commit (NAO push). Mensagem segue Conventional Commits + referencia ao `PLAN-NNN-slug`.
86
+ 3. Resumo final ao usuario:
87
+ - Path do plano + numero de tasks concluidas.
88
+ - Lista de componentes que passaram/falharam o visual gate.
89
+ - Comando exato para o humano marcar `concluido`: `*progress status T-NNN-NN concluido` (apos validacao humana + smoke E2E).
90
+
91
+ ## Ambiente Codex IDE — observacoes
92
+
93
+ - O usuario invoca `*execute-plan` direto no Codex. A skill carrega via wrapper em `.codex/skills/gos-execute-plan/SKILL.md`.
94
+ - Toda chamada a outros agents/skills do G-OS dentro do execute-plan deve usar o adapter Codex correspondente (`.codex/agents/`, `.codex/commands/`).
95
+ - Se a chamada cair pra outro adapter (Claude/Qwen/etc) a sessao quebra — abortar com mensagem clara.
96
+
97
+ ## Regras criticas
98
+
99
+ - **Visual gate nao e opcional** salvo `--skip-visual-gate` explicito. Skill nao silencia o gate.
100
+ - **Sem push automatico**: commit fica preparado. Push e responsabilidade do humano.
101
+ - **State machine inviolavel**: transicao `concluido` so apos humano validar + checklist.
102
+ - **Storybook como contrato**: componente sem `.stories.tsx` em `<dirs.storybook>` bloqueia a task ate ser criado.
103
+
104
+ ## Model guidance
105
+
106
+ | Escopo | Modelo |
107
+ |--------|--------|
108
+ | Task simples (1 componente, sem novo padrao) | `sonnet` |
109
+ | Task que toca multiplos componentes ou logica de fetching | `opus` |
110
+ | Visual gate / comparacao com Figma | inherit (modelo do agent) |
111
+
112
+ ## Instructions
113
+
114
+ 1. NUNCA pular o pre-flight visual sem flag explicita.
115
+ 2. Resolver TODOS os paths via `plan-paths.json`.
116
+ 3. Visual gate produz relatorio em `T-NNN-NN.notes.md` mesmo em caso de sucesso.
117
+ 4. Status final esperado: todas as tasks em `validacao`, commit preparado, humano notificado.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: plan-blueprint
3
3
  description: Cria um plano padronizado para uma tela (1 plano = 1 tela) seguindo a stack-of-record do projeto. Produz {plano, tasks, contexto, entrada-progress.txt} em três fases (Mapeamento → Aderência à stack → Execução). Pré-requisito duro: docs/stack.md existir. Subdivide automaticamente telas com seções autônomas múltiplas.
4
- argument-hint: "<tela|figma-url|descrição> [--from-figma-mcp] [--allow-arch-change]"
4
+ argument-hint: "<tela> OBJETIVO=<implantacao|correcao|refactor> FIGMA=<url> [FIGMA+=...] [--from-figma-mcp] [--allow-arch-change] [--skip-clickup]"
5
5
  allowedTools: [Read, Glob, Grep, Bash, Write, Edit, Agent, AskUserQuestion]
6
6
  sourceDocs:
7
7
  - templates/planTemplate.md
@@ -25,14 +25,35 @@ Você está executando como **Tech Lead Frontend / Arquiteto Sênior** via skill
25
25
 
26
26
  $ARGUMENTS
27
27
 
28
- Auto-detecção de input:
29
- - URL `https://www.figma.com/...` ativa modo Figma MCP
30
- - caminho de arquivo `.md`/`.png`/`.jpg` modo descrição com referência visual
31
- - texto livre → modo descrição
28
+ Campos obrigatórios no prompt:
29
+ - `OBJETIVO` `implantacao` | `correcao` | `refactor`
30
+ - `FIGMA` URL do frame principal (auto-ativa Figma MCP)
31
+
32
+ Opcionais:
33
+ - `FIGMA+` — lista de URLs de componentes
34
+ - `NOTAS` — prosa livre (comportamento, edge cases, invioláveis)
35
+ - `ASSIGNEE` — override do user_id ClickUp para tasks de backend (default: 112010775)
36
+
37
+ Auto-resolvido pelo `gos-master` (comprehension gate, NÃO pedir ao usuário):
38
+ - `PROJETO` — `cwd`; ambíguo → `~/.claude/.gos-state/last-project.json`
39
+ - `WORK_BRANCH` — tela em Storybook → `feat/storybook`; senão → `dev`
40
+ - `STORYBOOK_DIR/BRANCH` — `plan-paths.json`
41
+ - `BUSINESS_RULES` — `<PROJETO>/docs/regras-de-negocio/` (indexar e registrar em progress.txt)
42
+ - `POSTMAN` — `<PROJETO>/docs/postman/` (idem)
43
+ - `BACKEND/RLS/SEED/SMOKE_E2E` — derivado de `stack.md` + regras + Postman
44
+
45
+ OBJETIVO muda postura:
46
+
47
+ | Valor | Comportamento |
48
+ |-------|---------------|
49
+ | `implantacao` | Cria do zero — Fase 1 → 2 → 3 padrão |
50
+ | `correcao` | Modo cirúrgico — diff vs Storybook canônico, 1 task por componente, sem reescrever |
51
+ | `refactor` | Implica `--allow-arch-change` + ADR obrigatória |
32
52
 
33
53
  Flags:
34
- - `--from-figma-mcp` — força leitura via Figma MCP
35
- - `--allow-arch-change` — libera Fase 2 propositiva (gera ADR)
54
+ - `--from-figma-mcp` — força leitura via Figma MCP (default quando `FIGMA=` é Figma URL)
55
+ - `--allow-arch-change` — libera Fase 2 propositiva (gera ADR); implícito em `OBJETIVO=refactor`
56
+ - `--skip-clickup` — não cria tasks de backend automaticamente
36
57
 
37
58
  ## Pré-requisitos (gate)
38
59
 
@@ -41,6 +62,9 @@ Flags:
41
62
  - Se ausente: ABORTAR. Despachar `stack-profiler refresh` e instruir o usuário a re-executar.
42
63
  - Se presente: ler integralmente. Verificar drift via `*stack drift` antes de prosseguir.
43
64
  3. Ler `progress.txt` se existir (memória L1).
65
+ 4. **Verificar `dirs.storybook`** (caminho do `plan-paths.json`):
66
+ - Se ausente OU diretório não existe: ABORTAR. Pedir caminho ao usuário (path absoluto fora do repo é válido, ex.: `E:\Github\Ganbatte\tmp\fractus-storybook`) e gravar em `plan-paths.json`.
67
+ - Se presente: indexar `.stories.tsx` disponíveis (lista usada na Fase 1.3).
44
68
 
45
69
  ## Fase 1 — Mapeamento Visual & Componentização
46
70
 
@@ -60,8 +84,10 @@ Caso contrário: trabalhar pela descrição/screenshot fornecido.
60
84
 
61
85
  Produzir tabela:
62
86
 
63
- | Elemento (Figma/descrição) | Componente do DS | Variant | Props relevantes |
64
- |----------------------------|------------------|---------|-------------------|
87
+ | Elemento (Figma/descrição) | Componente do DS | Story (path) | Variant | Props relevantes |
88
+ |----------------------------|------------------|--------------|---------|-------------------|
89
+
90
+ A coluna `Story (path)` aponta para `.stories.tsx` indexado no gate. Componente sem story correspondente NÃO entra na tabela — vai pra "Componentes ausentes" e gera task de criação.
65
91
 
66
92
  Listar **componentes ausentes** separadamente — sinalizar como bloqueio ou candidato a criação (vai virar task própria).
67
93
 
@@ -77,6 +103,22 @@ Saída desta fase é uma seção **"Aderência à Stack"** no plano — não red
77
103
 
78
104
  **Modo `--allow-arch-change`**: pode propor alteração. Gerar ADR em `dirs.adr` (template `templates/adr-tmpl.yaml`) ANTES de prosseguir. Plano referencia o ADR e marca `arch_change: true` no frontmatter.
79
105
 
106
+ ### 2.5 Backend gaps → ClickUp automático
107
+
108
+ Postman é o **contrato backend**. Para cada dado/ação da tela:
109
+
110
+ 1. Confrontar com `<PROJETO>/docs/postman/` (já indexado no comprehension gate).
111
+ 2. Se o endpoint não existir, ou existir com shape divergente, ou faltar RLS/migration para suportar a tela → registrar como **backend pending**.
112
+ 3. Para cada pending, criar task ClickUp via `mcp__clickup__clickup_create_task`:
113
+ - **Assignee**: `ASSIGNEE` do prompt OU default `112010775` (Douglas Oliveira).
114
+ - **List**: `clickup.backend_list_id` de `plan-paths.json`. Ausente → registrar pending no plano com `clickup: pending` e seguir.
115
+ - **Título**: `[Backend] PLAN-NNN: <gap em uma linha>`
116
+ - **Descrição**: o que a tela precisa, qual coleção/endpoint do Postman cobre (ou não), referência ao plano (`docs/plans/PLAN-NNN/plan.md`), shape esperado.
117
+ 4. Registrar IDs criados em:
118
+ - `plan.md` → seção `## Backend pendings` (lista com `clickup_id`, status, link).
119
+ - `progress.txt` → bloco `## Backend pendings — PLAN-NNN`.
120
+ 5. Flag `--skip-clickup` desliga a criação (pending fica registrado apenas no plano).
121
+
80
122
  ## Fase 3 — Plano de Execução
81
123
 
82
124
  Para cada elemento mapeado:
@@ -127,6 +169,7 @@ Próximos passos:
127
169
  - **Backend read-only respeitado**: se `stack.md` declara backend read-only, plano NUNCA propõe schema novo.
128
170
  - **Next.js App Router**: decisão server vs client é explícita por elemento.
129
171
  - **Sem prosa decorativa**: plano deve ser executável, denso, com critérios mensuráveis.
172
+ - **Storybook como contrato**: cada componente do DS na tabela DEVE apontar `.stories.tsx` existente em `dirs.storybook`. Sem story → componente vai pra "Componentes ausentes" e gera task de criação. Sem essa disciplina, o visual gate do `*execute-plan` quebra.
130
173
 
131
174
  ## Model guidance
132
175
 
@@ -139,6 +182,7 @@ Próximos passos:
139
182
  ## Instructions
140
183
 
141
184
  1. NUNCA prosseguir sem `stack.md` válido.
142
- 2. Resolver TODOS os paths via `plan-paths.json`.
185
+ 2. Resolver TODOS os paths via `plan-paths.json`. PROJETO/WORK_BRANCH são auto-resolvidos pelo `gos-master` — não perguntar ao usuário.
143
186
  3. Status inicial do plano e tasks: `pendente`.
144
187
  4. Não pushar nada — apenas escrever arquivos locais.
188
+ 5. Backend pendings só criam tasks ClickUp se o `mcp__clickup__*` estiver disponível na sessão E `--skip-clickup` não for passado. Caso contrário, registrar apenas no plano.
@@ -22,6 +22,7 @@
22
22
  { "slug": "slack-review", "path": "skills/slack-review/SKILL.md" },
23
23
  { "slug": "stack-profiler", "path": "skills/stack-profiler/SKILL.md" },
24
24
  { "slug": "plan-blueprint", "path": "skills/plan-blueprint/SKILL.md" },
25
- { "slug": "progress-tracker", "path": "skills/progress-tracker/SKILL.md" }
25
+ { "slug": "progress-tracker", "path": "skills/progress-tracker/SKILL.md" },
26
+ { "slug": "execute-plan", "path": "skills/execute-plan/SKILL.md" }
26
27
  ]
27
28
  }
@@ -1,12 +1,14 @@
1
1
  ---
2
2
  id: PLAN-<NNN>-<slug>
3
3
  tela: <nome da tela>
4
+ objetivo: <implantacao | correcao | refactor>
4
5
  figma_url: <url ou null>
5
6
  status: pendente
6
7
  parent_plan: <PLAN-NNN ou null>
7
8
  children_plans: []
8
9
  stack_ref: docs/stack.md@<sha-curto>
9
10
  arch_change: false
11
+ work_branch: <dev | feat/storybook>
10
12
  created_at: <iso>
11
13
  validated_at: null
12
14
  ---
@@ -19,9 +21,9 @@ validated_at: null
19
21
 
20
22
  ## Componentes mapeados
21
23
 
22
- | Elemento | Componente do DS | Variant | Props |
23
- |----------|------------------|---------|-------|
24
- | | | | |
24
+ | Elemento | Componente do DS | Story (path) | Variant | Props |
25
+ |----------|------------------|--------------|---------|-------|
26
+ | | | | | |
25
27
 
26
28
  ## Componentes ausentes
27
29
 
@@ -68,9 +70,28 @@ validated_at: null
68
70
  - [ ] Sem console errors/warnings
69
71
  - [ ] TypeScript válido (`tsc --noEmit`)
70
72
  - [ ] Reutilização ≥ X% de componentes do DS
73
+ - [ ] **Visual gate**: cada componente mapeado tem story em `dirs.stories/`
74
+ - [ ] **Visual gate**: anatomia, tokens e densidade batem com a story canônica (≤ 1 desvio menor documentado em `T-NNN-NN.notes.md`)
75
+ - [ ] **Visual gate**: árvore JSX da tela espelha hierarquia do Figma (mesmas seções, mesma ordem)
71
76
  - [ ] <critério específico da tela 1>
72
77
  - [ ] <critério específico da tela 2>
73
78
 
79
+ ## Backend pendings
80
+
81
+ > Gaps detectados confrontando Postman/regras-de-negocio com a necessidade da tela. Cada item vira task ClickUp atribuída ao Douglas (default) ou ao `ASSIGNEE` informado. Vazio = backend completo para esta tela.
82
+
83
+ | Gap | Endpoint/Coleção esperada | ClickUp ID | Status |
84
+ |-----|---------------------------|------------|--------|
85
+ | | | | |
86
+
87
+ ## Knowledge mapped
88
+
89
+ > Inventário denso do que foi indexado no comprehension gate (regras-de-negocio + Postman).
90
+
91
+ - **Regras de negócio**: `<lista de arquivos relevantes em docs/regras-de-negocio/>`
92
+ - **Postman**: `<lista de coleções/endpoints relevantes em docs/postman/>`
93
+ - **Stack ref**: `<sha de stack.md>`
94
+
74
95
  ## Riscos & Rollback
75
96
 
76
97
  - <risco>
@@ -30,6 +30,7 @@ links: []
30
30
  ## Critérios de aceitação (DoD)
31
31
 
32
32
  - [ ] Implementação atende `valida_em` do plano
33
+ - [ ] **Visual gate aprovado** (relatório em `T-NNN-NN.notes.md` com 4 seções: anatomia, tokens, variants, densidade)
33
34
  - [ ] Tests/CI verdes
34
35
  - [ ] Sem regressões
35
36
  - [ ] <métrica específica>
package/CLAUDE.md CHANGED
@@ -48,17 +48,21 @@ Todo texto gerado deve passar por correcao ortografica e remocao de padroes de I
48
48
  gos-master | architect | dev | devops | po | qa | sm | squad-creator | ux-design-expert
49
49
 
50
50
  ### Skills (invoke via /gos:skills:{slug})
51
- design-to-code | figma-implement-design | figma-make-analyzer | make-code-triage | make-version-diff | component-dedup | frontend-dev | interface-design | react-best-practices | react-doctor | sprint-planner | clickup | plan-to-tasks | agent-teams | git-ssh-setup | stack-profiler | plan-blueprint | progress-tracker
51
+ design-to-code | figma-implement-design | figma-make-analyzer | make-code-triage | make-version-diff | component-dedup | frontend-dev | interface-design | react-best-practices | react-doctor | sprint-planner | clickup | plan-to-tasks | agent-teams | git-ssh-setup | stack-profiler | plan-blueprint | progress-tracker | execute-plan
52
+
53
+ ### IDEs suportadas (npm run sync:ides gera adapters)
54
+ Claude Code | Cursor | Gemini CLI | Qwen Code | Antigravity | Opencode | Kilo Code | **Codex IDE Extension** (ambiente de execucao, comando primario `*execute-plan`)
52
55
 
53
56
  ## Plan Pipeline (stack-aware)
54
57
 
55
- Pipeline padronizado para criacao de planos por tela. Toda tela = 1 plano. Stack-of-record (`docs/stack.md`) e contrato — alteracoes de stack exigem ADR.
58
+ Pipeline padronizado para criacao de planos por tela. Toda tela = 1 plano. Stack-of-record (`docs/stack.md`) e contrato — alteracoes de stack exigem ADR. Divisao de trabalho: **Opus 4.7 planeja, Codex IDE executa**.
56
59
 
57
- | Comando | Skill | Funcao |
58
- |---------|-------|--------|
59
- | `*stack [refresh|show|drift]` | `stack-profiler` | Mantem `docs/stack.md` (canonico do projeto) |
60
- | `*plan <tela>` | `plan-blueprint` | Cria plano + tasks + context + atualiza `progress.txt` |
61
- | `*progress [show|set|status]` | `progress-tracker` | Memoria L1 + state machine de status |
60
+ | Comando | Skill | IDE / Modelo | Funcao |
61
+ |---------|-------|--------------|--------|
62
+ | `*stack [refresh|show|drift]` | `stack-profiler` | qualquer | Mantem `docs/stack.md` (canonico do projeto) |
63
+ | `*plan <tela>` | `plan-blueprint` | Opus 4.7 (planejador) | Cria plano + tasks + context + atualiza `progress.txt` |
64
+ | `*execute-plan <PLAN-NNN>` | `execute-plan` | **Codex IDE Extension** (executor) | Executa task-a-task com visual gate vs Storybook canonico |
65
+ | `*progress [show|set|status]` | `progress-tracker` | qualquer | Memoria L1 + state machine de status |
62
66
 
63
67
  State machine: `pendente -> em-andamento -> validacao -> concluido` (concluido somente apos validacao humana).
64
68
 
package/README.md CHANGED
@@ -43,50 +43,149 @@ Após rodar o install, o framework criará uma estrutura limpa na sua raiz:
43
43
 
44
44
  ### 3. Comandos do Workspace
45
45
 
46
- A partir da raiz do seu projeto:
47
-
48
46
  | Comando | Equivalente CLI | O que faz |
49
47
  |---------|-----------------|-----------|
50
- | `npm run gos:init` | `gos init` | Setup pos-clone: configura `upstream`, cria dirs (`.gos-local/`), gera IDE adapters, sincroniza com framework pai |
51
- | `npm run gos:update` | `gos update` | `git fetch upstream` + merge `upstream/main` + `npm install` + re-sync IDE adapters |
52
- | `npm run gos:doctor` | `gos doctor` | Valida integridade do workspace, registry de skills, IDE adapters, presenca de Git remote |
53
- | `npm run gos:version` | `gos version` | Mostra versao instalada e checa se ha atualizacoes pendentes em `upstream/main` |
48
+ | `npm run gos:init` | `gos init` | Setup pos-clone: configura `upstream`, cria `.gos-local/`, gera IDE adapters |
49
+ | `npm run gos:update` | `gos update` | Fetch + merge do upstream (**apenas em fork/clone do g-os**) |
50
+ | `npm run gos:doctor` | `gos doctor` | Health-check (42+ checks: skills, agents, IDE adapters, upstream alcançável, stashes acumulados, modo workspace) |
51
+ | `npm run gos:version` | `gos version` | Versão instalada, modo do workspace e atualizações pendentes |
52
+ | `npm run gos:rescue` | `gos rescue` | Lista/recupera stashes acumulados de updates falhos |
54
53
  | `npm run sync:ides` | — | Regenera apenas os IDE adapters (`.claude/`, `.qwen/`, `.gemini/`, `.cursor/`, `.agents/`) |
55
- | `npm run check:ides` | — | Valida que todos os adapters estao consistentes com `.gos/skills/registry.json` |
56
- | `npm run clickup` | — | CLI ClickUp (tarefas, sprints, status) |
54
+ | `npm run check:ides` | — | Valida que adapters estão consistentes com `.gos/skills/registry.json` |
55
+ | `npm run clickup` | — | CLI ClickUp |
56
+
57
+ ## Atualizar o ganbatte-os
58
+
59
+ Existem **três níveis distintos** de versão. Saiba qual atualizar antes de rodar qualquer comando.
60
+
61
+ ### Descobrir em que cenário você está
62
+
63
+ ```bash
64
+ npm run gos:version
65
+ # imprime: versão local + modo (framework workspace | projeto consumidor)
66
+ ```
67
+
68
+ | Modo detectado | Significa | Como atualizar |
69
+ |----------------|-----------|----------------|
70
+ | `framework workspace` | Você clonou/forkou o repo `g-os` para contribuir | `npm run gos:update` |
71
+ | `projeto consumidor` | Seu projeto usa o G-OS (rodou `gos install` aqui) | `gos install --force` |
72
+ | (CLI global) | O comando `gos` instalado via `npm install -g` | `npm install -g ganbatte-os@latest` |
57
73
 
58
- **Atualizar o G-OS no seu workspace:**
74
+ ### Nível 1 CLI global (`gos`)
59
75
 
60
76
  ```bash
77
+ # Versão atual instalada vs publicada no registry:
78
+ npm list -g ganbatte-os
79
+ npm view ganbatte-os version
80
+
81
+ # Atualizar:
82
+ npm install -g ganbatte-os@latest
83
+ ```
84
+
85
+ ### Nível 2 — Projeto consumidor
86
+
87
+ Seu projeto NÃO é fork do G-OS, mas usa o framework via `gos install`. O `.gos/` mora dentro do seu repo.
88
+
89
+ ```bash
90
+ # Pré-checagem (uma vez):
91
+ git remote -v
92
+ # Se houver "upstream" apontando para g-os.git, REMOVA:
93
+ # git remote remove upstream
94
+ # (essa configuração só faz sentido em fork do framework)
95
+
96
+ # Atualizar o framework dentro do seu projeto:
97
+ gos install --force
98
+ # Sobrescreve .gos/ com a última versão do pacote ganbatte-os global,
99
+ # preservando seus arquivos (packages/, docs/, .gos-local/).
100
+ ```
101
+
102
+ > [!WARNING]
103
+ > NÃO use `npm run gos:update` em projeto consumidor. O CLI agora detecta esse cenário e aborta com instruções, mas em versões antigas ele tentava `git fetch upstream main` e quebrava de forma confusa.
104
+
105
+ ### Nível 3 — Framework workspace (fork/clone do g-os)
106
+
107
+ Você está contribuindo com o próprio framework.
108
+
109
+ ```bash
110
+ # Pré-checagem (sempre antes de update):
111
+ npm run gos:doctor
112
+ # Valida 42+ pontos. Aborta se upstream estiver com URL quebrada
113
+ # ou se houver stashes acumulados de updates anteriores falhos.
114
+
115
+ # Ver quantos commits faltam:
116
+ npm run gos:version
117
+
118
+ # Aplicar (lê dev branch do .gos/config.json#defaultBranches.development):
61
119
  npm run gos:update
62
- # equivalente a: git fetch upstream && git merge upstream/main && npm install && npm run sync:ides
63
120
  ```
64
121
 
65
- Em caso de divergencia local nao resolvivel automaticamente, o comando aborta e instrui resolucao manual. Se quiser inspecionar antes:
122
+ `gos:update` agora é **fail-safe**:
123
+
124
+ 1. Bloqueia se modo for `consumer`
125
+ 2. Valida `upstream` reachable (`git ls-remote`) ANTES de stashar
126
+ 3. Lê branch de desenvolvimento do `.gos/config.json` (não hardcoded)
127
+ 4. Faz fetch primeiro; se nada mudou, sai sem stash
128
+ 5. Stash recebe label timestamped único
129
+ 6. Auto-resolve conflitos em arquivos do framework (`frameworkManaged` no manifest); aborta em conflitos do usuário
130
+
131
+ Override de branch (debug):
132
+
133
+ ```bash
134
+ GOS_UPSTREAM_BRANCH=beta npm run gos:update
135
+ ```
136
+
137
+ #### Caso especial: "histórias não relacionadas"
138
+
139
+ Workspaces criados via `gos install` no passado podem ter `.git` próprio sem ancestor comum com o repo do framework. Nesse caso o merge falha com `fatal: refusing to merge unrelated histories`. O CLI detecta e instrui:
140
+
141
+ ```bash
142
+ npm run gos:update -- --allow-unrelated
143
+ ```
144
+
145
+ Isso une as duas histórias num commit de merge único. Faça uma vez; depois disso updates normais funcionam.
146
+
147
+ #### Caso especial: untracked files que conflitam com o merge
148
+
149
+ Se você tem arquivos não-versionados em paths que o framework gera (`.claude/`, `.qwen/`, `.gemini/`, `.cursor/`, `.agents/`, etc), o git recusa o merge para evitar perda. O CLI detecta e oferece:
66
150
 
67
151
  ```bash
68
- npm run gos:version # mostra versao atual + commits pendentes em upstream
69
- git fetch upstream # ver mudancas sem aplicar
70
- git log HEAD..upstream/main --oneline
152
+ npm run gos:update -- --clobber-untracked
71
153
  ```
72
154
 
73
- **Health-check apos qualquer mudanca:**
155
+ Isso renomeia os arquivos conflitantes para `.bak.<timestamp>` antes do merge. Como esses paths são **sempre regenerados** por `npm run sync:ides`, o backup é só por garantia — você pode deletar depois.
156
+
157
+ Combinar com `--allow-unrelated` quando ambos os casos ocorrerem (típico de workspaces antigos):
74
158
 
75
159
  ```bash
76
- npm run gos:doctor # 40+ checks (skills, agents, IDE adapters, git remote)
160
+ npm run gos:update -- --allow-unrelated --clobber-untracked
77
161
  ```
78
162
 
79
- ### Via CLI global (`gos`)
163
+ Alternativa segura (não toca seu git, apenas atualiza `.gos/`):
164
+
165
+ ```bash
166
+ gos install --force
167
+ ```
168
+
169
+ ### Resgate de stashes presos
170
+
171
+ Se você teve falhas anteriores que deixaram stashes:
172
+
173
+ ```bash
174
+ npm run gos:rescue # lista todos com stat
175
+ npm run gos:rescue -- --pop-latest # aplica o mais recente
176
+ npm run gos:rescue -- --drop-all # remove todos (após revisão)
177
+ ```
80
178
 
81
- Apos `npm install -g ganbatte-os`:
179
+ ### Resumo (qual comando para qual cenário)
82
180
 
83
- | Comando | O que faz |
84
- |---------|-----------|
85
- | `gos install` | Instala framework em diretorio novo |
86
- | `gos init` | Inicializa workspace existente |
87
- | `gos update` | Atualiza framework (mesma logica de `npm run gos:update`) |
88
- | `gos doctor` | Health-check |
89
- | `gos version` | Versao instalada |
181
+ | Cenário | Comando |
182
+ |---------|---------|
183
+ | Atualizar CLI `gos` global | `npm install -g ganbatte-os@latest` |
184
+ | Atualizar G-OS num projeto consumidor | `gos install --force` |
185
+ | Atualizar G-OS num fork/clone do repo | `npm run gos:update` |
186
+ | Stashes presos de updates falhos | `npm run gos:rescue` |
187
+ | Saber em qual cenário você está | `npm run gos:version` |
188
+ | Validar tudo de uma vez | `npm run gos:doctor` |
90
189
 
91
190
  > [!NOTE]
92
191
  > A pasta `.agent/` que pode aparecer na raiz do workspace e criada pela IDE Google Antigravity / Gemini Code Assist — nao faz parte do setup padrao do ganbatte-os.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ganbatte-os",
3
- "version": "0.2.32",
3
+ "version": "0.2.34",
4
4
  "description": "Framework operacional para design-to-code, squads de entrega e sprint sync com ClickUp.",
5
5
  "bin": {
6
6
  "gos": ".gos/scripts/cli/gos-cli.js"
@@ -10,6 +10,7 @@
10
10
  "gos:update": "node .gos/scripts/cli/gos-cli.js update",
11
11
  "gos:doctor": "node .gos/scripts/cli/gos-cli.js doctor",
12
12
  "gos:version": "node .gos/scripts/cli/gos-cli.js version",
13
+ "gos:rescue": "node .gos/scripts/cli/gos-cli.js rescue",
13
14
  "clickup": "node .gos/scripts/tools/clickup.js",
14
15
  "sync:ides": "node .gos/scripts/integrations/setup-ide-adapters.js",
15
16
  "check:ides": "node .gos/scripts/integrations/check-ide-compat.js",