ganbatte-os 0.2.36 → 0.2.37

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.
@@ -250,6 +250,19 @@ routing_matrix:
250
250
  Transições de status são VINCULANTES com pós-condição: cada task DEVE sair de pendente
251
251
  antes da próxima — se o executor não chamar progress-tracker, abortar (bug PLAN-006).
252
252
 
253
+ audit_screenshots:
254
+ triggers: ["*audit-screenshots", audit screenshots, auditar print, comparar com figma, "essa tela esta errada", "isso aqui esta divergindo", auditoria visual, prints divergentes]
255
+ target: skill:audit-screenshots
256
+ pre_action: Validate .gos-local/plan-paths.json + docs/figma-screen-map.md exist (path em campo `figma_screen_map`). Ausência aborta com instrução clara.
257
+ notes: |
258
+ Skill conversacional. Recebe N prints (anotados ou nao) ao longo da sessao,
259
+ mapeia cada print -> tela -> Figma frame via figma-screen-map.md, acumula
260
+ divergencias. Ao receber `close [SLUG]` emite UM plano `PLAN-NNN-fix-audit-<SLUG>`
261
+ com tasks pendentes — NAO executa codigo. Plano gerado e input direto pra
262
+ *execute-plan e *validate-plan (mesmo template).
263
+ Quando o usuario cola imagem sem comando explicito, assumir `*audit-screenshots add`.
264
+ Anotacoes em vermelho do usuario = high-signal (peso 2x na decisao de virar task).
265
+
253
266
  validate_plan:
254
267
  triggers: [validate, validar plano, "*validate-plan", validate plan, revisar plano, plano implementado]
255
268
  target: skill:validate-plan
@@ -0,0 +1,201 @@
1
+ ---
2
+ name: audit-screenshots
3
+ description: Skill conversacional. Recebe N prints (anotados ou nao) da aplicacao em uma sessao. Mapeia print -> tela -> Figma frame via docs/figma-screen-map.md. Acumula divergencias entre inputs. Ao fechar, emite UM plano de correcao com tasks pendentes (sem executar). Mesmo template do *plan — output e input direto pra *execute-plan.
4
+ argument-hint: "<acao> [contexto] # acao: add | list | close [SLUG] | discard"
5
+ allowedTools: [Read, Glob, Grep, Bash, Write, Edit, AskUserQuestion]
6
+ sourceDocs:
7
+ - skills/plan-blueprint/SKILL.md
8
+ - skills/plan-to-tasks/SKILL.md
9
+ - templates/planTemplate.md
10
+ - templates/taskTemplate.md
11
+ use-when:
12
+ - usuario cola print + diz "isso aqui esta errado"
13
+ - usuario pede "compara essa tela com Figma e abre tasks"
14
+ - usuario quer agrupar varias divergencias em UM plano de correcao
15
+ - usuario menciona "auditoria visual" ou "tela X esta divergindo do Figma"
16
+ do-not-use-for:
17
+ - executar correcao (use *execute-plan apos *audit-screenshots close)
18
+ - planejar tela nova (use *plan)
19
+ - validar plano executado (use *validate-plan)
20
+ metadata:
21
+ category: planning
22
+ ---
23
+
24
+ Voce esta executando como **Auditor Visual** via skill audit-screenshots. Acumula divergencias visuais detectadas pelo usuario em prints, mapeia cada uma pro Figma canonico, e ao fechar emite UM plano de correcao (OBJETIVO=correcao) com tasks pendentes — sem executar codigo.
25
+
26
+ ## Input
27
+
28
+ $ARGUMENTS
29
+
30
+ Formato: <acao> [SLUG-opcional]
31
+
32
+ Acoes:
33
+ - add (default quando o usuario cola imagem) — registra 1+ prints na sessao corrente
34
+ - list — imprime resumo da sessao (prints, telas resolvidas, divergencias acumuladas)
35
+ - close [SLUG] — fecha sessao + emite plano PLAN-NNN-fix-audit-<SLUG-ou-iso>
36
+ - discard — zera sessao corrente (apaga audit-session.json + audit-images/)
37
+
38
+ Quando o usuario simplesmente cola imagem sem comando explicito, assumir add automaticamente.
39
+
40
+ ## Pre-requisitos (gate)
41
+
42
+ 1. Resolver paths via .gos-local/plan-paths.json. Ausente -> abortar e instruir rodar *plan ou criar manualmente o arquivo.
43
+ 2. Resolver dirs.figma_screen_map (campo figma_screen_map em plan-paths.json; default: <dirs.docs>/figma-screen-map.md). Arquivo ausente -> abortar com mensagem clara: "rode *audit-screenshots apenas em projetos que mantenham docs/figma-screen-map.md (mapa canonico tela->Figma)".
44
+ 3. Resolver dirs.audit_state (campo audit_session_file; default: <projeto>/.gos-local/audit-session.json).
45
+ 4. Ler dirs.audit_state se existir — sessao em curso. Senao, criar sessao nova ao primeiro add.
46
+
47
+ ## Estado da sessao
48
+
49
+ Persistido em <dirs.audit_state> (default .gos-local/audit-session.json):
50
+
51
+ {
52
+ "session_id": "audit-2026-05-06T14-22-03",
53
+ "created_at": "<iso>",
54
+ "screenshots": [
55
+ {
56
+ "n": 1,
57
+ "image_path": ".gos-local/audit-images/01.png",
58
+ "user_context": "tabela negocios mostrando coluna Area com -",
59
+ "resolved_screen": "/dashboard/projetos/[id]?tab=negocios",
60
+ "figma_node_id": "9140-25431",
61
+ "figma_url": "https://www.figma.com/design/.../?node-id=9140-25431",
62
+ "figma_image_path": ".gos-local/audit-images/01.figma.png",
63
+ "divergences": [
64
+ { "kind": "data-missing", "where": "coluna Area", "fix": "seed/endpoint deve popular project.area" },
65
+ { "kind": "token", "where": "row hover", "fix": "bg-muted/50 (Figma) vs bg-transparent (atual)" }
66
+ ]
67
+ }
68
+ ]
69
+ }
70
+
71
+ ## Acao add
72
+
73
+ 1. **Salvar imagem(s)** colada(s) pelo usuario em .gos-local/audit-images/NN.png (n = ultimo + 1; multiplas imagens na mesma mensagem viram NN, NN+1, ...). Criar diretorio se necessario.
74
+ 2. **Identificar tela** (prioridade):
75
+ a) Mencao explicita do usuario na mesma mensagem ("e a aba negocios", "/dashboard/projetos/123") -> matchar no figma-screen-map.md.
76
+ b) Heuristica visual: ler titulo/breadcrumb/URL visivel no print (use modelo multimodal pra extrair texto). Match por substring contra a coluna "Rota app" do mapa.
77
+ c) Ambiguo ou sem sinal: AskUserQuestion listando 5 candidatos top do mapa + opcao "outro" (usuario digita rota).
78
+ 3. **Resolver figma_node_id + URL** via lookup no mapa.
79
+ 4. **Pull do frame Figma** via Figma MCP get_image pelo node-id. Salvar em .gos-local/audit-images/NN.figma.png. Se Figma MCP indisponivel: registrar figma_image_path: null e seguir (comparacao fica baseada apenas no print + node-id).
80
+ 5. **Comparacao curta** (anatomia visivel + tokens primarios + estados):
81
+ - Inspecionar print vs Figma frame.
82
+ - Listar divergencias em divergences[] (kind: anatomy | token | behavior | data-missing | state-missing | cleanup-legacy).
83
+ - **Anotacoes em vermelho do usuario** = high-signal: cada item anotado vira divergencia com peso 2x (quase certamente vira task no close).
84
+ - Comentarios livres do usuario (user_context) = high-signal igual.
85
+ 6. **Persistir** entrada nova no audit-session.json.
86
+ 7. **Output ao usuario** (curto):
87
+
88
+ [audit] +1 print (total: N) — tela: <rota> (node-id: NNNN-NNNNN)
89
+ divergencias detectadas: <K> (alta-confianca: <H>)
90
+ proximo: cole outro print, *audit-screenshots list, ou *audit-screenshots close
91
+
92
+ ## Acao list
93
+
94
+ Le audit-session.json e imprime tabela:
95
+
96
+ [audit-session <session_id>] iniciada <created_at>
97
+
98
+ # print tela divergencias
99
+ 1 audit-images/01 /dashboard/projetos/[id]?tab=negocios 3 (1 alta)
100
+ 2 audit-images/02 /dashboard/projetos 5 (3 alta)
101
+ 3 audit-images/03 /dashboard/financiadores 2
102
+
103
+ total: 10 divergencias em 3 telas
104
+ proximo: *audit-screenshots close [SLUG-opcional] -> emite PLAN-NNN-fix-audit-<SLUG>
105
+
106
+ Nao emite plano. Nao modifica estado.
107
+
108
+ ## Acao close [SLUG]
109
+
110
+ 1. **Resolver SLUG**: argumento explicito > <projeto-name>-<iso-date>. Sanitizar (lowercase, hifens).
111
+ 2. **Calcular PLAN-NNN**: ler <dirs.planos>/ e pegar maior NNN existente + 1.
112
+ 3. **Agrupar divergencias por tela** (resolved_screen).
113
+ 4. **Emitir <dirs.planos>/PLAN-NNN-fix-audit-<SLUG>/plan.md** baseado em templates/planTemplate.md:
114
+ - Frontmatter: objetivo: correcao, audit_session: <session_id>, created_at: <iso>, status: pendente, figma_url: <primeiro figma_url da sessao>.
115
+ - Secao ## Contexto: lista os prints com user_context resumido.
116
+ - Secao ## Componentes mapeados: 1 linha por divergencia (Componente = inferir do where).
117
+ - Secao ## Interacoes & Estados: 1 bullet por divergencia tipo behavior ou state-missing.
118
+ - Secao ## Page-level overrides: 1 linha por divergencia tipo token (decisao default (a) className na pagina; usuario pode reclassificar depois).
119
+ - Secao ## Backend pendings: 1 linha por divergencia tipo data-missing.
120
+ - ## Drift map: copia das divergencias detectadas (usado por validate-plan no fechamento).
121
+ - ## Cleanup de starter legado: divergencias tipo cleanup-legacy se houver.
122
+ 5. **Emitir tasks/T-NN-<componente>-<fix-slug>.md** (1 task por divergencia, agrupando triviais por componente):
123
+ - Frontmatter: status: pendente, priority: P1 (high-signal -> P0), area: ui-ux (token/anatomy) ou area: frontend (behavior/data-missing).
124
+ - interaction_target: ou override_target: populado quando aplicavel.
125
+ - Campo novo: audit_evidence: audit-evidence/NN.png apontando pro print original.
126
+ 6. **Copiar evidencias** pra <dirs.planos>/PLAN-NNN-fix-audit-<SLUG>/audit-evidence/:
127
+ - Prints originais (NN.png).
128
+ - Figma frames capturados (NN.figma.png).
129
+ - Cada um nomeado igual ao indice da sessao.
130
+ 7. **Emitir context.md** padrao (template contextTemplate.md).
131
+ 8. **Atualizar progress.txt** via progress-tracker set-current apontando pro plano novo.
132
+ 9. **Rodar gate determistico** node <repo>/.gos/scripts/integrations/check-plan.js <plano>:
133
+ - Exit 0 -> seguir.
134
+ - Exit != 0 -> abortar e devolver saida do check-plan.
135
+ 10. **Arquivar sessao**: mover audit-session.json pra .gos-local/audit-archive/<session_id>.json. NAO apagar imagens (ficam em audit-images/ pra historico).
136
+ 11. **Output final**:
137
+
138
+ [audit-screenshots] PLAN-NNN-fix-audit-<SLUG> criado
139
+
140
+ prints processados: <N>
141
+ telas afetadas: <K>
142
+ tasks criadas: <T> (<P0> P0 / <P1> P1)
143
+
144
+ plano: docs/plans/PLAN-NNN-fix-audit-<SLUG>/plan.md
145
+ tasks: docs/plans/PLAN-NNN-fix-audit-<SLUG>/tasks/ (T tasks)
146
+ progress: atualizado (status=pendente)
147
+
148
+ proximo passo: *execute-plan PLAN-NNN-fix-audit-<SLUG> (Codex IDE)
149
+
150
+ ## Acao discard
151
+
152
+ 1. Confirmacao inline obrigatoria: AskUserQuestion com 2 opcoes (Sim, descartar tudo / Nao, manter sessao).
153
+ 2. Confirmado: apagar .gos-local/audit-session.json + diretorio .gos-local/audit-images/ (todos os prints + frames Figma da sessao corrente).
154
+ 3. Output: [audit] sessao descartada (N prints removidos).
155
+
156
+ ## Resolver de tela (parser do figma-screen-map.md)
157
+
158
+ figma-screen-map.md e markdown com tabelas | Tela | ... | Rota app | node-id | ... |.
159
+
160
+ Algoritmo:
161
+ 1. Ler arquivo.
162
+ 2. Extrair todas tabelas via regex (linhas iniciando com |).
163
+ 3. Pra cada tabela, identificar coluna Rota app e node-id (case-insensitive, varia entre tabelas).
164
+ 4. Construir lookup {rota_normalizada: {node_id, secao, label}} (normalizar = lowercase, remover query strings opcionais).
165
+ 5. Match por:
166
+ - Equality exato: rota visivel no print bate com chave do lookup -> resolvido.
167
+ - Substring: rota do print contem chave do lookup -> resolvido com warning.
168
+ - Multiplos matches: AskUserQuestion listando candidatos.
169
+ 6. Suportar query strings (?tab=negocios) como parte da rota (mapas separam abas).
170
+
171
+ ## Acoplamento com pipeline
172
+
173
+ - Plano gerado e input direto pra *execute-plan e *validate-plan — segue 100% o template padrao + frontmatter compativel.
174
+ - Sub-fases 1.5 (drift map) e 1.6 (cleanup legado) do plan-blueprint NAO rodam aqui (audit JA e o drift map empirico). Mas se legacy_starter_dirs declarado em plan-paths.json, divergencias tipo cleanup-legacy sao detectadas durante add e viram tasks T-NN-cleanup-legacy-<slug>.
175
+ - Schema gate (Fase 2.4) NAO roda aqui — divergencias tipo data-missing viram entrada em ## Backend pendings direto, sem confronto com Postman/Prisma (audit assume usuario sabe o que esta vendo).
176
+ - progress-tracker segue identico — plano de audit aparece no progress.txt como qualquer outro.
177
+
178
+ ## Regras criticas
179
+
180
+ - **Sem execucao**: skill NUNCA modifica codigo da aplicacao. Ela cria plano + tasks (status: pendente). User roda *execute-plan separado se quiser.
181
+ - **Sessao persistente**: state em .gos-local/audit-session.json permite acumular prints entre invocacoes ate close. Sessao orfa (nao fechada por dias) eh ok — discard limpa.
182
+ - **Mapeamento canonico obrigatorio**: sem figma-screen-map.md, skill aborta. Esse arquivo eh o contrato tela<->Figma do projeto.
183
+ - **Anotacoes em vermelho = high-signal**: peso 2x na decisao de virar task. Sem anotacao, ainda detecta automaticamente, mas com peso menor.
184
+ - **Output e input do pipeline existente**: nao reinventa template, usa templates/planTemplate.md + taskTemplate.md.
185
+
186
+ ## Model guidance
187
+
188
+ | Escopo | Modelo |
189
+ |--------|--------|
190
+ | add com 1-2 prints simples | sonnet |
191
+ | add com print complexo (10+ divergencias visiveis) | opus |
192
+ | close com 5+ telas / 20+ tasks geradas | opus |
193
+ | list / discard | haiku |
194
+
195
+ ## Instructions
196
+
197
+ 1. Ao receber imagem sem comando explicito, assumir *audit-screenshots add.
198
+ 2. NUNCA executar codigo da aplicacao — skill so planeja.
199
+ 3. Sessao persiste em .gos-local/ ate close ou discard.
200
+ 4. Plano gerado SEMPRE roda check-plan.js antes de devolver controle ao usuario.
201
+ 5. Ao final do close, instruir o usuario do proximo passo (*execute-plan PLAN-NNN-fix-audit-<SLUG>).
@@ -86,6 +86,11 @@ Comparacao:
86
86
 
87
87
  Pre-flight smoke nao substitui o visual gate por task — ele captura gaps grandes (componente faltando, KPI row ausente) que viraram tasks novas em PLAN-004/PLAN-005.
88
88
 
89
+ **Drift map como input adicional**: se `<dirs.planos>/<PLAN-NNN-slug>/drift-map.md` existir (gerado na Fase 1.5 do `plan-blueprint`), pre-flight smoke consome cada linha:
90
+ - Para cada divergencia listada: validar override aplicado (grep das classes/props declaradas em `## Page-level overrides`) OU task de implementacao agendada (grep `override_target:` ou `interaction_target:` nos frontmatter de `tasks/T-*.md`).
91
+ - Item sem encaminhamento (sem override aplicado E sem task agendada) = task `T-000-XX` pre-flight com `priority: P0`, prepend na fila, renumera tasks subsequentes.
92
+ - Drift map ausente: nao bloqueia (pipeline antigo continua funcionando).
93
+
89
94
  ## Loop por task
90
95
 
91
96
  Iterar tasks em ordem de `seq`. Antes de executar cada task, **classificar**:
@@ -128,6 +128,33 @@ Política Figma vs Storybook (ver Fase 2):
128
128
 
129
129
  > Story define API/anatomia do componente; refinamentos cosméticos da página são aceitos via override registrado em `## Page-level overrides`. **Em conflito visual, Figma da página vence**.
130
130
 
131
+ ### 1.5 Drift map antecipado
132
+
133
+ Executa ANTES de Fase 3 emitir tasks. Materializa divergências Figma↔Storybook por componente para que cada uma vire override (a/b/c) ou task explícita logo no plano, evitando o padrão PLAN-005 (39 deltas descobertos durante execução).
134
+
135
+ Para cada componente em "Componentes mapeados":
136
+
137
+ a) **Screenshot do Figma**: via Figma MCP `get_image` pelo node-id do componente OU export do frame. Salva em `<dirs.planos>/<PLAN-NNN-slug>/drift/<Componente>.figma.png`. Reusa imagem existente entre re-runs (cache).
138
+ b) **Screenshot da story canônica**: usa Storybook estático (`<dirs.storybook>/storybook-static`) ou local rodando. Salva em `<dirs.planos>/<PLAN-NNN-slug>/drift/<Componente>.story.png`. Se nem estático nem local: pula esse componente com warning.
139
+ c) **Diff curto**: cria `<dirs.planos>/<PLAN-NNN-slug>/drift/<Componente>.diff.md` com 3 colunas (Anatomia diff, Token diff, Estados ausentes). Inspeção visual + grep no CSS extraído via Figma MCP. Sem pixel-diff.
140
+ d) **Drift map cumulativo**: `<dirs.planos>/<PLAN-NNN-slug>/drift-map.md` lista canônica de TODAS divergências detectadas. Cada linha alimenta `## Page-level overrides` (decisão a/b/c) OU vira task na Fase 3 com `override_target:` ou `interaction_target:` apontando.
141
+
142
+ Bloqueio:
143
+ - Figma MCP indisponível E Storybook indisponível → `drift-map.md` = `"drift detection skipped: missing tooling (Figma MCP + Storybook)"`. Warning único, NÃO bloqueia.
144
+ - Figma MCP disponível mas Storybook ausente → roda apenas captura Figma; diff fica vazio mas registra `figma_url` por componente para usar em execute-plan.
145
+ - Ambos disponíveis → drift map é input obrigatório da Fase 3 (cada divergência DEVE ter encaminhamento override OU task).
146
+
147
+ ### 1.6 Cleanup de starter legado
148
+
149
+ Detecção: ler `.gos-local/plan-paths.json` campo opcional `legacy_starter_dirs: []` (ex.: `["src/figma-make/", "tmp/stitch-export/"]`). Vazio OU ausente → pula esta sub-fase. Preenchido:
150
+
151
+ a) Para cada componente em "Componentes mapeados", `grep` o nome do componente nos `legacy_starter_dirs`. Match → registrar em `<dirs.planos>/<PLAN-NNN-slug>/legacy-cleanup.md` com path do arquivo legado encontrado.
152
+ b) Para a tela alvo (`<dirs.app>/<rota-da-tela>`), `grep` por imports oriundos de `legacy_starter_dirs`. Match → registrar arquivo + linha em `legacy-cleanup.md`.
153
+ c) **Fase 3 emite tasks `T-NN-cleanup-legacy-<slug>`** (uma por arquivo legado) com `cleanup_target: <path>` no frontmatter. Ordem: cleanup roda DEPOIS da implementação real do componente DS (depende do `interaction_target` correspondente estar `concluido`), ANTES de fechar o plano.
154
+ d) Sem o campo `legacy_starter_dirs`: comportamento atual preservado 100%. Projetos sem starter legado não pagam custo desta sub-fase.
155
+
156
+ Por que: declara "código Make/Stitch não fica" como contrato do pipeline, não como lembrança humana task-a-task.
157
+
131
158
  ## Fase 2 — Aderência à Stack
132
159
 
133
160
  **Modo padrão (sem `--allow-arch-change`)**: SOMENTE referenciar a stack já registrada em `stack.md`. Para cada dado/ação da tela, listar:
@@ -140,6 +167,17 @@ Saída desta fase é uma seção **"Aderência à Stack"** no plano — não red
140
167
 
141
168
  **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.
142
169
 
170
+ ### 2.4 Schema/contrato gate (executa antes de Fase 3)
171
+
172
+ Quando a tela exibe ou consome dados, validar contrato backend ANTES de emitir tasks frontend dependentes — evita o padrão PLAN-012/013 (schema descoberto incompleto durante execução).
173
+
174
+ a) Para cada campo exibido na tela (extraído de "Componentes mapeados" + "Interações & Estados"):
175
+ - **Postman**: `grep` do endpoint esperado em `<dirs.postman>`. Endpoint ausente → entrada em `## Backend pendings` tipo `endpoint-missing`, gap-key formato `endpoint-<rota>-missing`.
176
+ - **Prisma/SQL**: ler arquivos declarados em `plan-paths.json` campo `backend_schema_files: []` (ex.: `["packages/api/prisma/schema.prisma"]`). Campo ausente → entrada `field-missing: <table>.<field>`, gap-key formato `field-<table>-<field>-missing`.
177
+ b) Cada entrada gerada cria task ClickUp via `mcp__clickup__clickup_create_task` (assignee `112010775` ou override `ASSIGNEE`, list `clickup.backend_list_id`) ANTES da Fase 3 emitir tasks frontend dependentes. ClickUp ID grava em `## Backend pendings`.
178
+ c) Tasks frontend que dependem do campo recebem frontmatter `depends_on_backend: [<gap-key>]` automaticamente — `*execute-plan` já trata como `bloqueada-backend`.
179
+ d) Nenhum dos arquivos declarados existe (sem Postman E sem `backend_schema_files`) → warning único, NÃO bloqueia. Plano segue sem schema gate.
180
+
143
181
  ### 2.5 Backend gaps → ClickUp automático
144
182
 
145
183
  Postman é o **contrato backend**. Para cada dado/ação da tela:
@@ -24,6 +24,7 @@
24
24
  { "slug": "plan-blueprint", "path": "skills/plan-blueprint/SKILL.md" },
25
25
  { "slug": "progress-tracker", "path": "skills/progress-tracker/SKILL.md" },
26
26
  { "slug": "execute-plan", "path": "skills/execute-plan/SKILL.md" },
27
- { "slug": "validate-plan", "path": "skills/validate-plan/SKILL.md" }
27
+ { "slug": "validate-plan", "path": "skills/validate-plan/SKILL.md" },
28
+ { "slug": "audit-screenshots", "path": "skills/audit-screenshots/SKILL.md" }
28
29
  ]
29
30
  }
@@ -75,6 +75,8 @@ Apos o loop:
75
75
 
76
76
  1. **Cobertura de comportamento**: ler `## Interações & Estados` em `plan.md`. Para cada bullet (slug): existe AO MENOS 1 task com `interaction_target:` apontando pra ele E status `concluido`? Bullet sem cobertura -> plano permanece em `validacao` (registrar em `T-NNN-NN.notes.md` da task mais proxima do dominio).
77
77
  2. **Cobertura de overrides**: ler `## Page-level overrides`. Cada linha com decisao (a/b/c) tem task `concluido` cobrindo? grep do `override_target:` correspondente nos frontmatter de tasks. Override sem cobertura -> plano permanece em `validacao`.
78
+ 2.1. **Cobertura de drift map**: ler `## Drift map` (e `<plano>/drift-map.md` se existir). Cada linha tem override implementado OU task `concluido` cobrindo? Linha sem encaminhamento -> plano permanece em `validacao` (registrar em `T-NNN-NN.notes.md` da task mais proxima).
79
+ 2.2. **Cleanup legado**: para cada task com frontmatter `cleanup_target: <path>`, confirmar que o arquivo foi removido. Comando: `git log --diff-filter=D --name-only --since=<plan.created_at> -- <path>` deve retornar match OU `git diff --staged --name-only --diff-filter=D` contem `<path>`. Falha -> task volta a `validacao` (nao auto-conclui).
78
80
  3. **Checklist do plano**: ler `## Checklist de aceite` em `plan.md`. Itens nao marcados -> plano permanece em `validacao` mesmo se todas as tasks fecharam.
79
81
  4. **Backend pendings**: ler `## Backend pendings`. Para cada linha com `ClickUp ID`:
80
82
  - Consultar `mcp__clickup__clickup_get_task <ID>`.
@@ -57,6 +57,24 @@ Decisões possíveis:
57
57
  - **(b) Nova variant na story** — override aparece em ≥3 telas do projeto; vira variant reusável (ex.: `flat`, `seamless`).
58
58
  - **(c) Exceção documentada** — override específico desta tela e não merece variant; documentado aqui sem propagar pra story.
59
59
 
60
+ ## Drift map
61
+
62
+ > Gerado em Fase 1.5 do `plan-blueprint`. Side-by-side Figma vs Storybook por componente. Cada linha JÁ reconciliada para override (a/b/c) OU task explícita. Vazio = drift detection rodou sem divergências OU foi pulado por falta de tooling (Figma MCP + Storybook).
63
+
64
+ | Componente | Divergência | Resolução | Referência |
65
+ |------------|-------------|-----------|------------|
66
+ | | | | |
67
+
68
+ > Path dos artefatos: `drift/<Componente>.figma.png`, `drift/<Componente>.story.png`, `drift/<Componente>.diff.md`. Cumulativo em `drift-map.md`.
69
+
70
+ ## Cleanup de starter legado
71
+
72
+ > Gerado em Fase 1.6. Listado quando `.gos-local/plan-paths.json` declara `legacy_starter_dirs`. Cada linha vira task `T-NN-cleanup-legacy-<slug>` com `cleanup_target: <path>` no frontmatter. Vazio = projeto sem starter legado declarado OU nenhum match encontrado.
73
+
74
+ | Path legado | Substituto DS | Task |
75
+ |-------------|---------------|------|
76
+ | | | |
77
+
60
78
  ## Componentes ausentes
61
79
 
62
80
  > Listar componentes não cobertos pelo DS. Cada um vira task de criação separada (priorizar reuso/extensão antes de propor novo).
@@ -111,6 +129,9 @@ Decisões possíveis:
111
129
  - [ ] **States**: skeleton/empty/error/loading implementados conforme matriz acima
112
130
  - [ ] **Refetch**: dispara após mutações (POST/PATCH/DELETE)
113
131
  - [ ] **Seed**: popula TODOS os campos exibidos no Figma (sem `-` em colunas mapeadas)
132
+ - [ ] **Drift map**: cada linha de `## Drift map` (Fase 1.5) tem override implementado OU task `concluido` cobrindo
133
+ - [ ] **Cleanup legado**: tasks com `cleanup_target:` removeram os arquivos declarados (nenhum import de `legacy_starter_dirs` sobrevive na tela)
134
+ - [ ] **Schema/contrato gate**: nenhum campo da tela referencia coluna/endpoint inexistente sem entrada correspondente em `## Backend pendings`
114
135
  - [ ] <critério específico da tela 1>
115
136
  - [ ] <critério específico da tela 2>
116
137
 
@@ -12,6 +12,7 @@ valida_em: <referência ao critério no checklist do plano>
12
12
  depends_on_backend: [] # opcional — gap-keys da tabela ## Backend pendings do plano pai
13
13
  interaction_target: [] # opcional — bullets de "## Interações & Estados" do plano pai que esta task implementa/preserva (ex.: ["row-click-drawer-view", "submit-create"])
14
14
  override_target: [] # opcional — linhas de "## Page-level overrides" do plano pai que esta task resolve (ex.: ["StatCard:flat-variant"])
15
+ cleanup_target: null # opcional — path absoluto/relativo de arquivo legado que esta task remove (ex.: "src/figma-make/ProjetosPage.tsx"). validate-plan exige deleção observável no diff.
15
16
  assignees: []
16
17
  links: []
17
18
  ---
@@ -36,6 +37,7 @@ links: []
36
37
  - [ ] **Visual gate aprovado** (relatório em `T-NNN-NN.notes.md` com 5 seções: anatomia, tokens, variants, densidade, comportamentos)
37
38
  - [ ] **Comportamentos**: cada `interaction_target` declarado tem handler/estado implementado e observável no diff
38
39
  - [ ] **Overrides**: cada `override_target` declarado foi aplicado conforme decisão (a/b/c) registrada em `## Page-level overrides`
40
+ - [ ] **Cleanup**: quando `cleanup_target:` declarado, arquivo foi removido (`git diff --staged` mostra deleção)
39
41
  - [ ] Tests/CI verdes
40
42
  - [ ] Sem regressões
41
43
  - [ ] <métrica específica>
package/CLAUDE.md CHANGED
@@ -48,7 +48,7 @@ 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 | execute-plan | validate-plan
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 | humanizer | weekly-update | slack-review | stack-profiler | plan-blueprint | progress-tracker | execute-plan | validate-plan | audit-screenshots
52
52
 
53
53
  ### IDEs suportadas (npm run sync:ides gera adapters)
54
54
  Claude Code | Cursor | Gemini CLI | Qwen Code | Antigravity | Opencode | Kilo Code | **Codex IDE Extension** (ambiente de execucao, comando primario `*execute-plan`)
@@ -69,6 +69,14 @@ State machine: `pendente -> em-andamento -> validacao -> concluido`. Estado late
69
69
 
70
70
  **Politica Figma vs Storybook**: story define API/anatomia do componente; em conflito visual cosmetico (bg, border, padding, radius), Figma da pagina vence — divergencia e registrada em `## Page-level overrides` do plano com decisao a/b/c (a=className, b=variant nova, c=excecao documentada). Sem essa disciplina, refinamentos da pagina viram retrabalho no fim (caso PLAN-005: 54 deltas em 26 rodadas).
71
71
 
72
+ **Drift map automatico (Fase 1.5 do `*plan`)**: com Figma MCP + Storybook disponiveis, `*plan` gera `<plano>/drift-map.md` antes de emitir tasks — screenshots side-by-side por componente; cada divergencia vira override ou task explicita. Sem essa etapa, ~70% das divergencias viraram retrabalho durante execucao.
73
+
74
+ **Cleanup de starter legado (Fase 1.6)**: `.gos-local/plan-paths.json` campo `legacy_starter_dirs: ["src/figma-make/", ...]` faz `*plan` emitir tasks `T-NN-cleanup-legacy-<slug>` automaticamente para arquivos do starter. Sem o campo, comportamento atual preservado.
75
+
76
+ **Schema/contrato gate (Fase 2.4)**: `.gos-local/plan-paths.json` campo `backend_schema_files: [...]` (Postman + Prisma) faz `*plan` validar contrato antes de emitir tasks frontend; gaps viram task ClickUp + entrada em `## Backend pendings`.
77
+
78
+ **Skill `*audit-screenshots`**: conversacional. Recebe N prints anotados em uma sessao, resolve cada print -> tela -> Figma frame via `docs/figma-screen-map.md`, compara, e ao fechar emite UM plano de correcao com tasks pendentes (sem executar). Acoplado ao mesmo template — output e input valido para `*execute-plan`/`*validate-plan`.
79
+
72
80
  Paths do projeto-cliente sao resolvidos via `.gos-local/plan-paths.json` — nada hardcoded. Nesse arquivo declara-se onde estao `docs/plans/`, `docs/postman/`, `docs/regras-de-negocio/`, design system, etc. Cada projeto/dev pode organizar diferente.
73
81
 
74
82
  Playbook completo: `.gos/playbooks/plan-creation-playbook.md`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ganbatte-os",
3
- "version": "0.2.36",
3
+ "version": "0.2.37",
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"