ganbatte-os 0.2.37 → 0.2.41

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 (38) hide show
  1. package/.gos/agents/profiles/ganbatte-os-master.md +100 -0
  2. package/.gos/libraries/caveman-rules.md +58 -0
  3. package/.gos/libraries/cloudflare-stack-kb.md +161 -0
  4. package/.gos/libraries/component-reuse-gate.md +75 -0
  5. package/.gos/libraries/default-stack-kb.md +98 -0
  6. package/.gos/libraries/engineering-best-practices.md +208 -0
  7. package/.gos/libraries/gos-compress-setup.md +62 -0
  8. package/.gos/libraries/intake-questions-mom-test.md +91 -0
  9. package/.gos/libraries/lucide-icons-policy.md +174 -0
  10. package/.gos/libraries/security-best-practices.md +138 -0
  11. package/.gos/libraries/supabase-stack-kb.md +124 -0
  12. package/.gos/libraries/timer-pattern-spec.md +252 -0
  13. package/.gos/libraries/typeform-pattern-spec.md +204 -0
  14. package/.gos/libraries/ui-guardrails-checklist.md +144 -0
  15. package/.gos/libraries/visual-diff-lenses.md +114 -0
  16. package/.gos/playbooks/audit-streaming-playbook.md +86 -0
  17. package/.gos/skills/adr-tech-decisions/SKILL.md +166 -0
  18. package/.gos/skills/audit-screenshots/SKILL.md +200 -142
  19. package/.gos/skills/cloudflare-pages-setup/SKILL.md +180 -0
  20. package/.gos/skills/figma-print-diff/SKILL.md +170 -0
  21. package/.gos/skills/gos-caveman/SKILL.md +110 -0
  22. package/.gos/skills/gos-compress/SKILL.md +134 -0
  23. package/.gos/skills/gos-compress/scripts/compress.py +346 -0
  24. package/.gos/skills/gos-compress/scripts/setup.py +91 -0
  25. package/.gos/skills/idea-intake/SKILL.md +147 -0
  26. package/.gos/skills/plan-blueprint/SKILL.md +18 -3
  27. package/.gos/skills/plan-to-tasks/SKILL.md +37 -1
  28. package/.gos/skills/prd-from-intake/SKILL.md +94 -0
  29. package/.gos/skills/prototype-orchestrator/SKILL.md +120 -0
  30. package/.gos/skills/registry.json +12 -1
  31. package/.gos/skills/timer-component-pattern/SKILL.md +245 -0
  32. package/.gos/skills/typeform-form-pattern/SKILL.md +210 -0
  33. package/.gos/skills/ui-guardrails/SKILL.md +111 -0
  34. package/.gos/templates/intakeTemplate.md +41 -0
  35. package/.gos/templates/planTemplate.md +25 -4
  36. package/.gos/templates/prdLeanTemplate.md +40 -0
  37. package/.gos/templates/taskTemplate.md +29 -5
  38. package/package.json +1 -1
@@ -1,201 +1,259 @@
1
1
  ---
2
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"
3
+ description: Skill conversacional de auditoria visual STREAMING. Abre UM plano de correcao (status aberto) e escreve cada task NA HORA por insumo (print/screenshot + Figma URL), em vez de enfileirar e processar no fim. Cada divergencia passa pelo gate de reuso de componente (design-to-code): mapeia -> checa biblioteca -> reuse/create/merge. Usa Figma MCP (expected), Playwright (actual), figma-print-diff (confronto). Modo validate confronta Figma x implementado varrendo figma-screen-map.md. check-plan.js roda so no finalize.
4
+ argument-hint: "<acao> [SLUG|tipo-tela] # acao: open | add | validate | list | finalize [SLUG] | discard"
5
5
  allowedTools: [Read, Glob, Grep, Bash, Write, Edit, AskUserQuestion]
6
6
  sourceDocs:
7
+ - skills/figma-print-diff/SKILL.md
8
+ - skills/component-dedup/SKILL.md
7
9
  - skills/plan-blueprint/SKILL.md
8
- - skills/plan-to-tasks/SKILL.md
10
+ - libraries/component-reuse-gate.md
11
+ - libraries/visual-diff-lenses.md
9
12
  - templates/planTemplate.md
10
13
  - templates/taskTemplate.md
14
+ - playbooks/audit-streaming-playbook.md
11
15
  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
+ - usuario cola print + diz "isso aqui esta errado" (vira task na hora no plano aberto)
17
+ - usuario pede "compara essa tela com Figma e abre a correcao"
18
+ - usuario quer auditar varias telas de um tipo (validate) confrontando Figma x implementado
19
+ - acumular correcoes de N telas em UM plano de fix, com task escrita por insumo
16
20
  do-not-use-for:
17
- - executar correcao (use *execute-plan apos *audit-screenshots close)
18
- - planejar tela nova (use *plan)
21
+ - executar correcao (use *execute-plan apos *audit-screenshots finalize)
22
+ - planejar tela nova (use *plan / plan-blueprint)
19
23
  - validar plano executado (use *validate-plan)
20
24
  metadata:
21
25
  category: planning
22
26
  ---
23
27
 
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.
28
+ Voce esta executando como **Auditor Visual Streaming** via skill `audit-screenshots`. Ao inves de
29
+ enfileirar prints e materializar o plano so no fim, voce **abre UM plano de correcao imediatamente**
30
+ (`status: aberto`) e **escreve cada task na hora** que recebe um insumo (print/screenshot + Figma URL +
31
+ contexto). Cada divergencia passa pelo **gate de reuso de componente** (design-to-code) antes de virar
32
+ task. O plano so e' fechado e validado por `check-plan.js` no `finalize`.
33
+
34
+ ## Por que streaming (pivot do modelo de fila)
35
+
36
+ O modelo antigo (`add` acumula em `audit-session.json` -> `close` materializa tudo) perdia contexto e
37
+ nao funcionava bem. O modelo novo:
38
+
39
+ - **Plano-primeiro**: `open` cria `plan.md` (draft) antes de qualquer insumo. O diretorio do plano E' o
40
+ estado — nao existe mais `audit-session.json`.
41
+ - **Task-por-insumo**: cada print/tela vira task `status: pendente` na hora, com sua evidencia anexada.
42
+ - **Gate de reuso por divergencia**: divergencia de table/card/form -> reusa primitiva existente ou cria
43
+ (nunca patch one-off). Ver `libraries/component-reuse-gate.md`.
44
+
45
+ ## Contrato atomico x streaming (CRITICO — nao quebrar check-plan.js)
46
+
47
+ `check-plan.js` exige todas as tasks `status: pendente` NA CRIACAO e e' byte-identico ao canonico.
48
+ NUNCA modificar o gate. A conciliacao e' por status do plano:
49
+
50
+ 1. `open` escreve `plan.md` com **`status: aberto`** (draft). **NAO** roda check-plan.
51
+ 2. `add`/`validate` escrevem cada `T-NN*.md` ja com **`status: pendente`** (eager).
52
+ 3. `finalize` flipa `plan.md` para **`status: pendente`** e **so entao** roda `check-plan.js`.
53
+
54
+ Plano `aberto` e' um estado valido intermediario; plano so vira input de `*execute-plan` apos `finalize`.
55
+
56
+ ## Contrato single-pass do `add` (CRITICO — fix do gargalo de contexto)
57
+
58
+ A comparacao actual vs Figma deve ser SEMPRE single-pass dentro de `add`, delegada a `figma-print-diff`:
59
+
60
+ 1. Capturar actual (print colado OU Playwright) -> imagem em disco + em contexto.
61
+ 2. Pull do frame Figma via MCP -> 2 imagens em contexto.
62
+ 3. `figma-print-diff` aplica lenses 1-6 (`libraries/visual-diff-lenses.md`) IMEDIATAMENTE, ambas visiveis.
63
+ 4. Divergencias materializadas em texto COMPLETO (`where`, `expected`, `actual`) — NUNCA "ver imagem".
64
+ 5. Gate de reuso de componente roda sobre as divergencias estruturais.
65
+ 6. Task escrita na hora, self-contained. Imagens ficam em `audit-evidence/` para historico.
66
+
67
+ Violacao -> bug. Insumo cuja task ficar incompleta/vazia: re-rodar `add` daquele print.
25
68
 
26
69
  ## Input
27
70
 
28
71
  $ARGUMENTS
29
72
 
30
- Formato: <acao> [SLUG-opcional]
73
+ Formato: `<acao> [SLUG-ou-tipo-tela]`
31
74
 
32
75
  Acoes:
33
- - add (default quando o usuario cola imagem) registra 1+ prints na sessao corrente
34
- - listimprime resumo da sessao (prints, telas resolvidas, divergencias acumuladas)
35
- - close [SLUG]fecha sessao + emite plano PLAN-NNN-fix-audit-<SLUG-ou-iso>
36
- - discardzera sessao corrente (apaga audit-session.json + audit-images/)
76
+ - `open [SLUG]` abre o plano de correcao (draft). Default do SLUG: `<projeto>-<iso-date>`.
77
+ - `add` (default quando o usuario cola imagem) registra 1+ insumos -> 1 task cada, NA HORA.
78
+ - `validate <tipo-tela|--all>`sweep: varre `figma-screen-map.md`, captura+confronta cada tela do tipo.
79
+ - `list`resumo do plano aberto (telas, tasks, decisoes de componente).
80
+ - `finalize [SLUG]` — fecha + valida (`check-plan.js`).
81
+ - `discard` — aborta o plano aberto.
37
82
 
38
- Quando o usuario simplesmente cola imagem sem comando explicito, assumir add automaticamente.
83
+ Quando o usuario cola imagem sem comando explicito: se existe plano aberto -> `add`; senao -> `open`
84
+ (criar plano com SLUG default) e em seguida `add`.
39
85
 
40
86
  ## Pre-requisitos (gate)
41
87
 
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
- }
88
+ 1. Resolver paths via `.gos-local/plan-paths.json`. Ausente -> abortar e instruir rodar `*plan` ou criar manualmente.
89
+ 2. Resolver `dirs.figma_screen_map` (campo `figma_screen_map`; default `<dirs.docs>/figma-screen-map.md`).
90
+ Arquivo ausente -> abortar: "rode *audit-screenshots apenas em projetos que mantenham docs/figma-screen-map.md".
91
+ 3. Resolver `dirs.audit_evidence` (campo `audit_evidence`; default `<plano>/audit-evidence`).
92
+ 4. Resolver **plano aberto corrente** via `progress.txt` (set-current). Se o plano corrente nao tem
93
+ `status: aberto`, `add`/`validate` exigem um `open` antes (ou abrem um novo).
94
+
95
+ ## Acao open [SLUG]
96
+
97
+ 1. **Resolver SLUG**: argumento explicito > `<projeto-name>-<iso-date>`. Sanitizar (lowercase, hifens).
98
+ 2. **Calcular PLAN-NNN**: ler `<dirs.planos>/` e pegar maior NNN + 1.
99
+ 3. **Escrever `<dirs.planos>/PLAN-NNN-fix-<SLUG>/plan.md`** de `templates/planTemplate.md`:
100
+ - Frontmatter: `objetivo: correcao`, **`status: aberto`**, `audit_streaming: true`, `created_at: <iso>`,
101
+ `figma_url:` (preenchido no primeiro `add`).
102
+ - Secoes vazias prontas para append: `## Contexto`, `## Componentes mapeados`, `## Interacoes & Estados`,
103
+ `## Page-level overrides`, `## Backend pendings`, `## Drift map`.
104
+ 4. **Escrever `context.md`** (template `contextTemplate.md`).
105
+ 5. **Criar `tasks/` vazio** e `audit-evidence/`.
106
+ 6. **progress-tracker set-current** apontando o plano novo (status aberto).
107
+ 7. **NAO rodar check-plan.js** (plano e' draft).
108
+ 8. Output:
109
+
110
+ [audit] PLAN-NNN-fix-<SLUG> ABERTO (status: aberto)
111
+ cole prints (add) ou rode *audit-screenshots validate <tipo-tela> | finalize
70
112
 
71
113
  ## Acao add
72
114
 
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
115
+ Para cada insumo (print colado OU rota a capturar):
116
+
117
+ 1. **Identificar tela** (prioridade):
118
+ a) Mencao explicita do usuario ("aba negocios", "/dashboard/projetos/123") -> match no figma-screen-map.
119
+ b) Heuristica visual: ler titulo/breadcrumb/URL do print (multimodal) -> substring contra "Rota app".
120
+ c) Ambiguo: `AskUserQuestion` com 5 candidatos top do mapa + "outro".
121
+ 2. **Resolver figma_node_id + URL** via lookup no mapa.
122
+ 3. **Capturar ACTUAL**:
123
+ - Print colado pelo usuario -> salvar em `<audit_evidence>/NN.png`.
124
+ - Sem print -> **Playwright** captura a rota viva (`browser_navigate` + `browser_take_screenshot`,
125
+ headless) -> `<audit_evidence>/NN.png`. Casos interativos (hover/drawer aberto) -> browser-use.
126
+ 4. **Pull EXPECTED**: Figma MCP `get_image` pelo node-id -> `<audit_evidence>/NN.figma.png`. MCP
127
+ indisponivel: seguir so com actual + node-id (registrar `figma_image_path: null`).
128
+ 5. **Confrontar (single-pass)**: invocar `figma-print-diff <audit_evidence>/NN.png <figma-url>` -> JSON de
129
+ divergencias (lenses 1-6, cada uma com `where`/`expected`/`actual`/`kind`/`severity`/`fix`).
130
+ 6. **Gate de reuso de componente** (`libraries/component-reuse-gate.md`) por divergencia estrutural
131
+ (table/card/form/list/modal/toolbar):
132
+ - Mapear elemento -> componente DS candidato (indexar `dirs.components/` + `.stories.tsx`, estilo
133
+ `plan-blueprint` Fase 1.3).
134
+ - Rodar `component-dedup` (candidato vs biblioteca) -> decisao `reuse | create | merge` + score.
135
+ - Heuristica DataTable: divergencia de tabela -> `component_target` = primitiva existente (ex.:
136
+ `components/ui/data-table.tsx`); correcao e' nas `columns`/dados OU na primitiva — nunca `<table>` novo.
137
+ 7. **Escrever task(s) NA HORA** em `tasks/T-NN-<componente>-<fix-slug>.md` (1 task por divergencia,
138
+ agrupando triviais por componente), modelo **O QUE / ONDE / COMO / POR QUE**:
139
+ - Frontmatter: **`status: pendente`**, `priority` (high-signal/anotacao vermelha -> P0), `area`
140
+ (`ui-ux` token/anatomy | `frontend` behavior/data-missing), `audit_evidence: audit-evidence/NN.png`,
141
+ `figma_url:`, `component_decision: reuse|create|merge`, `component_target:`, e quando aplicavel
142
+ `interaction_target:` / `override_target:` / `depends_on_backend:`.
143
+ - `## Contexto` (por que: a divergencia), `## Objetivo`+`### Entrega` (o que), `## Arquivos` (onde: path
144
+ concreto criar/editar), `## Plano de execucao` (como). Task sem path concreto e' malformada.
145
+ - `create` gera task de criacao da primitiva ANTES da task de uso (`depends_on`).
146
+ 8. **Append no plano**: 1 linha em `## Componentes mapeados`, divergencia em `## Drift map`, behavior em
147
+ `## Interacoes & Estados`, token em `## Page-level overrides` (decisao a/b/c), data-missing em
148
+ `## Backend pendings`.
149
+ 9. **Output curto**:
150
+
151
+ [audit] +1 tela: <rota> (node-id NNNN-NNNNN) -> <T> task(s) escritas
152
+ divergencias: <K> (alta <H>) | reuso: <reuse>R <merge>M <create>C
153
+ proximo: cole outro print | *audit-screenshots validate <tipo> | list | finalize
154
+
155
+ ## Acao validate <tipo-tela|--all>
156
+
157
+ Sweep sistematico Figma x implementado, alimentando o mesmo fluxo de `add`:
158
+
159
+ 1. Ler `figma-screen-map.md` e filtrar telas por `tipo-tela` (coluna de secao/categoria) ou todas (`--all`).
160
+ 2. Para cada tela: resolver rota + node-id; **Playwright** captura actual; Figma MCP pull expected;
161
+ `figma-print-diff` confronta; gate de reuso; **escrever task(s) na hora** (passos 5-8 do `add`).
162
+ 3. Telas sem node-id no mapa -> warning, pular (registrar em `## Notas` do plano).
163
+ 4. Output: tabela tela x divergencias x tasks geradas + total.
164
+
165
+ Requer `open` previo (ou abre plano novo `PLAN-NNN-fix-validate-<tipo>`).
91
166
 
92
167
  ## Acao list
93
168
 
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**:
169
+ Le `tasks/` do plano aberto (NAO re-le imagens) e imprime:
170
+
171
+ [audit PLAN-NNN-fix-<SLUG>] status: aberto
172
+
173
+ # task tela decisao priority
174
+ 1 T-01-data-table-area-column /dashboard/projetos reuse P1
175
+ 2 T-02-stat-card-flat /dashboard merge P1
137
176
 
138
- [audit-screenshots] PLAN-NNN-fix-audit-<SLUG> criado
177
+ total: N tasks em K telas | reuso: R reuse / M merge / C create
178
+ proximo: *audit-screenshots finalize <SLUG> -> roda check-plan.js
179
+
180
+ ## Acao finalize [SLUG]
181
+
182
+ **REGRA**: `finalize` opera sobre os arquivos ja escritos (tasks + plan). NAO re-le imagens, NAO re-confronta.
183
+
184
+ 1. **Resolver plano aberto** (progress.txt set-current) ou pelo SLUG.
185
+ 2. **Validar self-contained**: cada `T-NN*.md` tem `## Arquivos` com path concreto, `## Objetivo`,
186
+ `## Plano de execucao`, e frontmatter `status: pendente`. Faltando -> abortar listando tasks incompletas
187
+ (instruir re-rodar `add` daquele insumo). `finalize` nao conserta.
188
+ 3. **Flip do plano**: `plan.md` frontmatter `status: aberto` -> **`status: pendente`**. Preencher `## Contexto`
189
+ consolidado (lista de telas auditadas).
190
+ 4. **Disparar `ui-guardrails <plano>`** — trava task de UI sem estados/responsivo/a11y/tokens.
191
+ 5. **progress-tracker set** (status pendente).
192
+ 6. **Rodar gate deterministico** `node <repo>/.gos/scripts/integrations/check-plan.js <plano>`:
193
+ - Exit 0 -> seguir.
194
+ - Exit != 0 -> abortar e devolver a saida literal do check-plan.
195
+ 7. Output final:
139
196
 
140
- prints processados: <N>
141
- telas afetadas: <K>
142
- tasks criadas: <T> (<P0> P0 / <P1> P1)
197
+ [audit-screenshots] PLAN-NNN-fix-<SLUG> FINALIZADO (status: pendente)
143
198
 
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)
199
+ telas auditadas: <K>
200
+ tasks: <T> (<P0> P0 / <P1> P1) | reuso: <R>R <M>M <C>C
201
+ plano: docs/plans/PLAN-NNN-fix-<SLUG>/plan.md
202
+ progress: atualizado (status=pendente)
147
203
 
148
- proximo passo: *execute-plan PLAN-NNN-fix-audit-<SLUG> (Codex IDE)
204
+ proximo passo: *execute-plan PLAN-NNN-fix-<SLUG>
149
205
 
150
206
  ## Acao discard
151
207
 
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).
208
+ 1. Confirmacao inline (`AskUserQuestion`: Sim, descartar / Nao, manter).
209
+ 2. Confirmado: remover `<dirs.planos>/PLAN-NNN-fix-<SLUG>/` (plano + tasks + audit-evidence) e limpar
210
+ progress set-current. Output: `[audit] plano aberto descartado (T tasks, N evidencias removidas)`.
155
211
 
156
212
  ## Resolver de tela (parser do figma-screen-map.md)
157
213
 
158
- figma-screen-map.md e markdown com tabelas | Tela | ... | Rota app | node-id | ... |.
214
+ `figma-screen-map.md` e' markdown com tabelas `| Tela | ... | Rota app | node-id | ... |`.
159
215
 
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).
216
+ 1. Ler arquivo. Extrair todas as tabelas (linhas iniciando com `|`).
217
+ 2. Identificar colunas `Rota app` e `node-id` por tabela (case-insensitive).
218
+ 3. Construir lookup `{rota_normalizada: {node_id, secao, label}}` (lowercase, query strings opcionais).
219
+ 4. Match: equality exato > substring (warning) > multiplos (`AskUserQuestion`).
220
+ 5. Suportar query strings (`?tab=negocios`) como parte da rota.
170
221
 
171
222
  ## Acoplamento com pipeline
172
223
 
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.
224
+ - Plano gerado e' input direto de `*execute-plan` e `*validate-plan` — segue o template padrao + frontmatter.
225
+ - `figma-print-diff` e' a primitiva de confronto (single-pass) esta skill nao reimplementa lenses.
226
+ - `component-dedup` + `libraries/component-reuse-gate.md` resolvem reuse/create/mergenao duplicar.
227
+ - Sub-fases 1.5 (drift) e 1.6 (cleanup legado) do `plan-blueprint` NAO rodam aqui (o audit JA e' drift
228
+ empirico). Se `legacy_starter_dirs` em plan-paths.json, divergencias `cleanup-legacy` viram task.
229
+ - Schema gate (Fase 2.4) NAO roda; divergencias `data-missing` viram `## Backend pendings` direto.
230
+ - `plan-blueprint` e' "1 tela = 1 plano"; o audit e' "N telas -> 1 plano de fix" (orquestracao por cima).
177
231
 
178
232
  ## Regras criticas
179
233
 
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.
234
+ - **Sem execucao**: skill NUNCA modifica codigo da aplicacao. So cria plano + tasks (status: pendente).
235
+ User roda `*execute-plan` separado.
236
+ - **Plano-primeiro**: `open` antes de qualquer insumo. O diretorio do plano E' o estado (sem audit-session.json).
237
+ - **Eager + self-contained**: cada insumo vira task na hora, com evidencia textual completa. `finalize` so valida.
238
+ - **Gate de reuso obrigatorio**: divergencia estrutural sempre passa por reuse/create/merge antes de virar task.
239
+ - **check-plan.js so no finalize**: nunca na abertura. Nunca modificar o gate.
240
+ - **Mapeamento canonico obrigatorio**: sem `figma-screen-map.md`, skill aborta.
241
+ - **Anotacoes em vermelho = high-signal**: peso 2x (P0).
185
242
 
186
243
  ## Model guidance
187
244
 
188
245
  | Escopo | Modelo |
189
246
  |--------|--------|
190
247
  | 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 |
248
+ | add com print complexo (10+ divergencias) / gate de reuso denso | opus |
249
+ | validate sweep (5+ telas) | opus |
193
250
  | list / discard | haiku |
194
251
 
195
252
  ## Instructions
196
253
 
197
- 1. Ao receber imagem sem comando explicito, assumir *audit-screenshots add.
254
+ 1. Ao receber imagem sem comando: plano aberto existe -> `add`; senao -> `open` + `add`.
198
255
  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>).
256
+ 3. Estado vive no diretorio do plano aberto (status: aberto) ate `finalize` ou `discard`.
257
+ 4. `add`/`validate` escrevem tasks `status: pendente` na hora; `finalize` flipa o plano e roda check-plan.js.
258
+ 5. Confronto visual delegado a `figma-print-diff`; reuso a `component-dedup` + `component-reuse-gate.md`.
259
+ 6. Ao final do `finalize`, instruir `*execute-plan PLAN-NNN-fix-<SLUG>`.
@@ -0,0 +1,180 @@
1
+ ---
2
+ name: cloudflare-pages-setup
3
+ description: >
4
+ Guia interativo para configurar projeto novo em Cloudflare Pages + Workers. Cobre
5
+ wrangler.toml, bindings (D1/KV/R2/DO), Pages Functions vs Workers separados,
6
+ preview vs production, custom domain. Pergunta antes de chumbar.
7
+ argument-hint: "<acao: init|add-binding|deploy|env> [args]"
8
+ allowedTools: [Read, Glob, Grep, Bash, Write, Edit, AskUserQuestion]
9
+ sourceDocs:
10
+ - libraries/cloudflare-stack-kb.md
11
+ - libraries/security-best-practices.md
12
+ - libraries/default-stack-kb.md
13
+ use-when:
14
+ - novo projeto precisa configurar Cloudflare Pages
15
+ - usuario quer adicionar binding (D1, KV, R2, DO) a Workers existente
16
+ - configurar custom domain ou env vars no Pages
17
+ - deploy primeiro (push) ou troubleshoot CI Pages
18
+ do-not-use-for:
19
+ - Vercel/Netlify/AWS (stack alternativo, usar deploy-to-vercel ou similar)
20
+ - apenas Workers sem Pages (ja existe wrangler init)
21
+ metadata:
22
+ category: infrastructure
23
+ ---
24
+
25
+ Voce esta executando como **Cloudflare Setup Helper** via skill `cloudflare-pages-setup`. Conduz setup interativo, sempre perguntando antes de gravar arquivo.
26
+
27
+ ## Acoes
28
+
29
+ ### `init` — projeto novo (Pages + Workers)
30
+
31
+ 1. Ler `package.json` se existir. Se nao, propor `npm create vite@latest` primeiro.
32
+ 2. AskUserQuestion sequencial:
33
+ - "Project name (slug Cloudflare):"
34
+ - "Custom domain (deixe vazio para usar `<slug>.pages.dev`):"
35
+ - "Backend: Pages Functions (mesmo repo, /functions/) ou Worker separado (/api/*)?"
36
+ - "DB: Supabase Postgres / D1 / nenhum?"
37
+ - "Auth: Supabase Auth / Cloudflare Access / nenhum?"
38
+ - "Storage: R2 / Supabase Storage / nenhum?"
39
+ 3. Gerar `wrangler.toml` apropriado (ver templates abaixo).
40
+ 4. Gerar `.env.example` + `.gitignore` (entradas para `.env`, `.dev.vars`, `node_modules`).
41
+ 5. Gerar `package.json` scripts: `dev`, `build`, `preview`, `deploy:preview`, `deploy:prod`.
42
+ 6. Mostrar `wrangler login` + `wrangler secret put <NAME>` para credentials.
43
+
44
+ ### `add-binding` — adicionar D1/KV/R2/DO
45
+
46
+ 1. Ler `wrangler.toml` existente.
47
+ 2. Pergunta: "Tipo de binding?" (D1, KV, R2, DO).
48
+ 3. Pergunta: "Nome do binding (variavel JS):" — ex `DB`, `KV`, `IMAGES`, `ROOM`.
49
+ 4. Para D1: `wrangler d1 create <name>` + adicionar bloco `[[d1_databases]]`.
50
+ 5. Para KV: `wrangler kv:namespace create <name>` + adicionar bloco `[[kv_namespaces]]`.
51
+ 6. Para R2: `wrangler r2 bucket create <name>` + bloco `[[r2_buckets]]`.
52
+ 7. Para DO: gera class skeleton em `src/durable-objects/<Name>.ts` + bloco `[[durable_objects.bindings]]` + migration.
53
+ 8. Gerar tipos TypeScript (`worker-configuration.d.ts`).
54
+
55
+ ### `deploy` — deploy preview ou production
56
+
57
+ 1. Pergunta: "Preview ou production?"
58
+ 2. Validar `wrangler.toml` parseavel.
59
+ 3. Validar build local: `npm run build`.
60
+ 4. Preview: `wrangler pages deploy dist --branch=<slug>` -> retorna URL temporaria.
61
+ 5. Prod: `wrangler pages deploy dist --branch=main` (somente se branch atual e main).
62
+ 6. Mostrar URL final + dashboard link.
63
+
64
+ ### `env` — gerenciar env vars / secrets
65
+
66
+ 1. Pergunta: "List, add, remove, ou pull?"
67
+ 2. List: `wrangler secret list` + `wrangler pages project list`.
68
+ 3. Add: `wrangler secret put <NAME>` (interativo, esconde valor digitado).
69
+ 4. Remove: `wrangler secret delete <NAME>` (confirma antes).
70
+ 5. Pull: copia env do dashboard pra `.dev.vars` local.
71
+
72
+ ## Templates
73
+
74
+ ### wrangler.toml — Pages Functions (recomendado MVP)
75
+
76
+ ```toml
77
+ name = "<slug>"
78
+ compatibility_date = "2026-05-01"
79
+ compatibility_flags = ["nodejs_compat"]
80
+
81
+ # Pages config
82
+ pages_build_output_dir = "dist"
83
+
84
+ # Bindings (descomente os que usar)
85
+ # [[d1_databases]]
86
+ # binding = "DB"
87
+ # database_name = "<name>"
88
+ # database_id = "<uuid>"
89
+
90
+ # [[kv_namespaces]]
91
+ # binding = "KV"
92
+ # id = "<uuid>"
93
+
94
+ # [[r2_buckets]]
95
+ # binding = "R2"
96
+ # bucket_name = "<name>"
97
+ ```
98
+
99
+ ### wrangler.toml — Workers separado
100
+
101
+ ```toml
102
+ name = "<slug>-api"
103
+ main = "src/worker/index.ts"
104
+ compatibility_date = "2026-05-01"
105
+ compatibility_flags = ["nodejs_compat"]
106
+
107
+ [vars]
108
+ PUBLIC_VAR = "value"
109
+
110
+ # Secrets sao via `wrangler secret put`, nao em vars.
111
+
112
+ [[d1_databases]]
113
+ binding = "DB"
114
+ database_name = "<name>"
115
+ database_id = "<uuid>"
116
+ ```
117
+
118
+ ### Pages Functions structure
119
+
120
+ ```
121
+ project/
122
+ functions/
123
+ api/
124
+ [[path]].ts # catch-all com Hono opcional
125
+ src/
126
+ main.tsx # Vite entry
127
+ dist/ # build output
128
+ wrangler.toml
129
+ ```
130
+
131
+ ```ts
132
+ // functions/api/[[path]].ts
133
+ import { Hono } from 'hono';
134
+
135
+ type Bindings = {
136
+ DB: D1Database;
137
+ // SUPABASE_URL: string;
138
+ // SUPABASE_SERVICE_KEY: string;
139
+ };
140
+
141
+ const app = new Hono<{ Bindings: Bindings }>();
142
+
143
+ app.get('/projects', async (c) => {
144
+ const result = await c.env.DB.prepare('select * from projects').all();
145
+ return c.json(result.results);
146
+ });
147
+
148
+ export const onRequest = (ctx: any) => app.fetch(ctx.request, ctx.env, ctx);
149
+ ```
150
+
151
+ ## Custom domain
152
+
153
+ 1. `wrangler pages project list` -> confirma projeto.
154
+ 2. Dashboard -> Pages -> projeto -> Custom domains -> Add.
155
+ 3. Adicionar CNAME no DNS apontando para `<slug>.pages.dev`.
156
+ 4. Aguardar SSL (1-15min).
157
+
158
+ ## Checklist de seguranca pos-setup
159
+
160
+ (Aplica `libraries/security-best-practices.md`)
161
+
162
+ - [ ] `.env`, `.dev.vars` no `.gitignore`.
163
+ - [ ] `service_role_key` Supabase NUNCA em `vars` do wrangler.toml — sempre `wrangler secret put`.
164
+ - [ ] CORS configurado para origem conhecida (`Access-Control-Allow-Origin: https://<slug>.pages.dev`).
165
+ - [ ] HTTPS forced (Cloudflare default).
166
+ - [ ] `compatibility_date` recente (max 6 meses).
167
+
168
+ ## Troubleshooting comum
169
+
170
+ | Erro | Causa | Fix |
171
+ |------|-------|-----|
172
+ | "wrangler: command not found" | nao instalado | `npm i -D wrangler` + `npx wrangler ...` |
173
+ | "Authentication required" | nao logou | `wrangler login` (abre browser) |
174
+ | Build falha em CI Pages | env var faltando | adicionar no dashboard Pages > Settings > Env |
175
+ | `Workers limit exceeded` | excedeu free tier | `wrangler tail` + verificar trafego |
176
+ | D1 query lenta | sem indice | `wrangler d1 execute <db> --command="explain query plan ..."` |
177
+
178
+ ## Input
179
+
180
+ $ARGUMENTS