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.
- package/.gos/agents/profiles/ganbatte-os-master.md +100 -0
- package/.gos/libraries/caveman-rules.md +58 -0
- package/.gos/libraries/cloudflare-stack-kb.md +161 -0
- package/.gos/libraries/component-reuse-gate.md +75 -0
- package/.gos/libraries/default-stack-kb.md +98 -0
- package/.gos/libraries/engineering-best-practices.md +208 -0
- package/.gos/libraries/gos-compress-setup.md +62 -0
- package/.gos/libraries/intake-questions-mom-test.md +91 -0
- package/.gos/libraries/lucide-icons-policy.md +174 -0
- package/.gos/libraries/security-best-practices.md +138 -0
- package/.gos/libraries/supabase-stack-kb.md +124 -0
- package/.gos/libraries/timer-pattern-spec.md +252 -0
- package/.gos/libraries/typeform-pattern-spec.md +204 -0
- package/.gos/libraries/ui-guardrails-checklist.md +144 -0
- package/.gos/libraries/visual-diff-lenses.md +114 -0
- package/.gos/playbooks/audit-streaming-playbook.md +86 -0
- package/.gos/skills/adr-tech-decisions/SKILL.md +166 -0
- package/.gos/skills/audit-screenshots/SKILL.md +200 -142
- package/.gos/skills/cloudflare-pages-setup/SKILL.md +180 -0
- package/.gos/skills/figma-print-diff/SKILL.md +170 -0
- package/.gos/skills/gos-caveman/SKILL.md +110 -0
- package/.gos/skills/gos-compress/SKILL.md +134 -0
- package/.gos/skills/gos-compress/scripts/compress.py +346 -0
- package/.gos/skills/gos-compress/scripts/setup.py +91 -0
- package/.gos/skills/idea-intake/SKILL.md +147 -0
- package/.gos/skills/plan-blueprint/SKILL.md +18 -3
- package/.gos/skills/plan-to-tasks/SKILL.md +37 -1
- package/.gos/skills/prd-from-intake/SKILL.md +94 -0
- package/.gos/skills/prototype-orchestrator/SKILL.md +120 -0
- package/.gos/skills/registry.json +12 -1
- package/.gos/skills/timer-component-pattern/SKILL.md +245 -0
- package/.gos/skills/typeform-form-pattern/SKILL.md +210 -0
- package/.gos/skills/ui-guardrails/SKILL.md +111 -0
- package/.gos/templates/intakeTemplate.md +41 -0
- package/.gos/templates/planTemplate.md +25 -4
- package/.gos/templates/prdLeanTemplate.md +40 -0
- package/.gos/templates/taskTemplate.md +29 -5
- package/package.json +1 -1
|
@@ -1,201 +1,259 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: audit-screenshots
|
|
3
|
-
description: Skill conversacional.
|
|
4
|
-
argument-hint: "<acao> [
|
|
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
|
-
-
|
|
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
|
|
14
|
-
- usuario quer
|
|
15
|
-
-
|
|
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
|
|
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
|
|
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:
|
|
73
|
+
Formato: `<acao> [SLUG-ou-tipo-tela]`
|
|
31
74
|
|
|
32
75
|
Acoes:
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
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
|
|
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
|
|
43
|
-
2. Resolver dirs.figma_screen_map (campo figma_screen_map
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
|
95
|
-
|
|
96
|
-
[audit-
|
|
97
|
-
|
|
98
|
-
#
|
|
99
|
-
1
|
|
100
|
-
2
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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
|
-
|
|
204
|
+
proximo passo: *execute-plan PLAN-NNN-fix-<SLUG>
|
|
149
205
|
|
|
150
206
|
## Acao discard
|
|
151
207
|
|
|
152
|
-
1. Confirmacao inline
|
|
153
|
-
2. Confirmado:
|
|
154
|
-
|
|
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
|
|
214
|
+
`figma-screen-map.md` e' markdown com tabelas `| Tela | ... | Rota app | node-id | ... |`.
|
|
159
215
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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
|
|
174
|
-
-
|
|
175
|
-
-
|
|
176
|
-
-
|
|
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/merge — nao 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.
|
|
181
|
-
|
|
182
|
-
- **
|
|
183
|
-
- **
|
|
184
|
-
- **
|
|
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
|
|
192
|
-
|
|
|
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
|
|
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.
|
|
200
|
-
4.
|
|
201
|
-
5.
|
|
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
|