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
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ui-guardrails
|
|
3
|
+
description: >
|
|
4
|
+
Pre-flight obrigatorio antes de codar uma tela. Verifica que cada task de tela tem
|
|
5
|
+
estados (loading/empty/error/success), responsividade, a11y e tokens declarados.
|
|
6
|
+
Bloqueia codegen se faltar — evita que erros de UI sejam descobertos tarde.
|
|
7
|
+
Pensado para reduzir o "trabalho extra de corrigir o que nao foi previsto".
|
|
8
|
+
argument-hint: "<plan-id-ou-task-path>"
|
|
9
|
+
allowedTools: [Read, Glob, Grep, Edit, AskUserQuestion]
|
|
10
|
+
sourceDocs:
|
|
11
|
+
- libraries/ui-guardrails-checklist.md
|
|
12
|
+
use-when:
|
|
13
|
+
- antes de design-to-code/figma-implement-design rodar
|
|
14
|
+
- validar plano de UI antes de execute-plan
|
|
15
|
+
- usuario reclama "esqueceram do estado vazio de novo"
|
|
16
|
+
do-not-use-for:
|
|
17
|
+
- tasks de backend (sem UI)
|
|
18
|
+
- bug fixes pontuais (use react-doctor)
|
|
19
|
+
metadata:
|
|
20
|
+
category: validation
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
Voce esta executando como **UI Guardrails Validator** via skill `ui-guardrails`. Verifica que cada task de UI tem cobertura completa antes de codegen — bloqueia execucao se faltar.
|
|
24
|
+
|
|
25
|
+
## Contrato
|
|
26
|
+
|
|
27
|
+
1. Le um plano (`docs/plans/PLAN-NNN/`) ou task individual (`tasks/T-NN-...md`).
|
|
28
|
+
2. Para cada task com `area: ui-ux` ou `area: frontend`, aplica checklist (ver `libraries/ui-guardrails-checklist.md`).
|
|
29
|
+
3. Se faltar item -> output structured com gaps + sugestao de adicao + opcao de `AskUserQuestion` para corrigir inline OU abortar.
|
|
30
|
+
4. Se passar -> output curto "OK, N tasks validadas, codegen liberado".
|
|
31
|
+
|
|
32
|
+
## Checklist (resumo — detalhe na library)
|
|
33
|
+
|
|
34
|
+
Para CADA task de UI:
|
|
35
|
+
|
|
36
|
+
### A. Estados visuais (5 obrigatorios)
|
|
37
|
+
- [ ] Loading: **skeleton OBRIGATORIO** (shadcn `Skeleton`) para listas/cards/tabelas; spinner Lucide `Loader2` so para botoes ou acoes pontuais.
|
|
38
|
+
- [ ] Empty: copy + Lucide icon (h-12 w-12 text-muted-foreground) + CTA primario.
|
|
39
|
+
- [ ] Error: mensagem + Lucide `AlertTriangle` + recovery action (botao retry).
|
|
40
|
+
- [ ] Success (quando aplicavel): Lucide `CheckCircle2` em toast/inline.
|
|
41
|
+
- [ ] Default (renderizado normal).
|
|
42
|
+
|
|
43
|
+
**Regra critica**: **SEMPRE skeleton ao carregar dados**, **SEMPRE empty state quando lista vazia**. Sem excecoes mesmo em descartavel.
|
|
44
|
+
|
|
45
|
+
### B. Responsividade (3 breakpoints minimos)
|
|
46
|
+
- [ ] Mobile (<768px): layout declarado
|
|
47
|
+
- [ ] Tablet (768-1024px): comportamento declarado
|
|
48
|
+
- [ ] Desktop (>1024px): default
|
|
49
|
+
|
|
50
|
+
### C. A11y (4 minimos)
|
|
51
|
+
- [ ] Roles ARIA quando aplicavel (button, dialog, listbox)
|
|
52
|
+
- [ ] Labels em inputs (htmlFor + id ou aria-label)
|
|
53
|
+
- [ ] Focus order definido se mais de 3 elementos interativos
|
|
54
|
+
- [ ] Contraste AA verificado (lens 6 do figma-print-diff)
|
|
55
|
+
|
|
56
|
+
### D. Tokens do DS (todos via referencia)
|
|
57
|
+
- [ ] Cores via tokens (`bg-primary`, NUNCA hex direto)
|
|
58
|
+
- [ ] Spacing via scale (`gap-4`, NUNCA `gap-[17px]`)
|
|
59
|
+
- [ ] Typography via classes (`text-base`, NUNCA `text-[15px]`)
|
|
60
|
+
- [ ] Border-radius via scale (`rounded-md`, NUNCA `rounded-[7px]`)
|
|
61
|
+
|
|
62
|
+
### F. Lucide React (zero-emoji policy)
|
|
63
|
+
- [ ] Import de icones SO de `lucide-react` (nunca FontAwesome/Heroicons/outra lib).
|
|
64
|
+
- [ ] **Zero emoji unicode em strings de UI** (regex `/[\u{1F300}-\u{1FAFF}\u{2600}-\u{27BF}]/u`).
|
|
65
|
+
- [ ] Icon-only button com `aria-label` obrigatorio.
|
|
66
|
+
- [ ] Tamanhos canonicos: `h-3.5 w-3.5` inline, `h-4 w-4` button, `h-5 w-5` heading, `h-12 w-12` empty state, `h-16 w-16` hero.
|
|
67
|
+
|
|
68
|
+
Detalhe: `libraries/lucide-icons-policy.md`.
|
|
69
|
+
|
|
70
|
+
### E. Interacao (quando aplicavel)
|
|
71
|
+
- [ ] Trigger -> acao -> resultado declarado em `## Interacoes & Estados`
|
|
72
|
+
- [ ] Edge case: o que acontece se trigger duplicar (debounce)?
|
|
73
|
+
- [ ] Edge case: o que acontece se backend demorar >3s?
|
|
74
|
+
|
|
75
|
+
## Niveis de violacao
|
|
76
|
+
|
|
77
|
+
| Tipo | Severidade | Acao |
|
|
78
|
+
|------|-----------|------|
|
|
79
|
+
| A faltando (estado) | high | Bloqueia codegen. Pede correcao via AskUserQuestion. |
|
|
80
|
+
| B faltando (responsivo) | high | Bloqueia se task e tela full. Warning se componente isolado. |
|
|
81
|
+
| C faltando (a11y) | medium | Warning. Codegen continua mas adiciona TODO no codigo. |
|
|
82
|
+
| D faltando (tokens) | medium | Warning. Codegen pode prosseguir mas relatorio ao final. |
|
|
83
|
+
| E faltando (interacao) | high (se ha trigger) | Bloqueia. plan-blueprint ja exige isso — caso aqui e detectar regressao. |
|
|
84
|
+
| F faltando (Lucide/emoji) | high | Bloqueia. Recusar codigo com emoji em UI ou icone nao-Lucide. |
|
|
85
|
+
|
|
86
|
+
## Output
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
[ui-guardrails] PLAN-NNN — N tasks de UI validadas
|
|
90
|
+
|
|
91
|
+
[OK] T-01: cards-projeto-list A B C D E
|
|
92
|
+
[FAIL] T-02: drawer-edit-projeto A . C D E (faltando: empty state, hover focus)
|
|
93
|
+
[WARN] T-03: tooltip-status A B . D E (a11y: sem aria-label)
|
|
94
|
+
|
|
95
|
+
bloqueado: 1 task (T-02). Corrija antes de design-to-code.
|
|
96
|
+
warnings: 1 (T-03 — a11y).
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Hook em pipeline
|
|
100
|
+
|
|
101
|
+
`prototype-orchestrator` (fase 5 -> 6) e `plan-blueprint` (apos plan-to-tasks) DEVEM chamar `ui-guardrails` automaticamente em produtos NAO-descartaveis. Para descartaveis, oferecer skip via flag `--no-guardrails`.
|
|
102
|
+
|
|
103
|
+
## Regras criticas
|
|
104
|
+
|
|
105
|
+
- **Descartavel relax**: se plan tem `descartavel: true` no frontmatter, A/B viram warning (nao block).
|
|
106
|
+
- **Codegen sem guardrails**: violacao da regra do dono ("muito trabalho corrigindo erros nao previstos"). Bloqueia.
|
|
107
|
+
- **Self-update**: se task tem `interaction_target` mas falta `## Interacoes & Estados` no plano, sugerir patch automatico.
|
|
108
|
+
|
|
109
|
+
## Input
|
|
110
|
+
|
|
111
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
intake_id: INTAKE-<NNN>-<slug>
|
|
3
|
+
status: pronto-para-prd
|
|
4
|
+
descartavel: <true|false>
|
|
5
|
+
created_at: <iso>
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# <Titulo curto da ideia>
|
|
9
|
+
|
|
10
|
+
## Problema (em uma frase)
|
|
11
|
+
<sintese feita pelo agente>
|
|
12
|
+
|
|
13
|
+
## Historias reais coletadas
|
|
14
|
+
- <bullet 1>
|
|
15
|
+
- <bullet 2>
|
|
16
|
+
|
|
17
|
+
## Persona
|
|
18
|
+
<descricao em prosa, contexto incluido>
|
|
19
|
+
|
|
20
|
+
## Jobs-to-be-done
|
|
21
|
+
- Quando <situacao>, eu quero <acao>, para que <resultado>.
|
|
22
|
+
|
|
23
|
+
## Limites (o que NAO fazer)
|
|
24
|
+
- <bullet>
|
|
25
|
+
|
|
26
|
+
## Telas-chave (visao bruta)
|
|
27
|
+
1. <tela 1 — descricao em palavras leigas>
|
|
28
|
+
2. <tela 2>
|
|
29
|
+
|
|
30
|
+
## Inspiracoes
|
|
31
|
+
- <link ou nome>
|
|
32
|
+
|
|
33
|
+
## Escopo
|
|
34
|
+
- Descartavel: <sim|nao>
|
|
35
|
+
- Vida util esperada: <uma vez|semanas|meses|continuo>
|
|
36
|
+
|
|
37
|
+
## Metrica de sucesso (linguagem humana)
|
|
38
|
+
<frase do usuario>
|
|
39
|
+
|
|
40
|
+
## Proximo passo
|
|
41
|
+
- Rodar `*prd-from-intake INTAKE-<NNN>-<slug>` para gerar PRD lean.
|
|
@@ -15,7 +15,13 @@ validated_at: null
|
|
|
15
15
|
|
|
16
16
|
# <Título da tela>
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
> **Modelo O QUE / ONDE / COMO / POR QUE** — este plano (e cada task que ele gera) responde às 4 perguntas:
|
|
19
|
+
> - **POR QUE** → `## Contexto` (motivação, PRD/ticket, problema).
|
|
20
|
+
> - **O QUE** → `## Componentes mapeados` + `## Interações & Estados` + `## Checklist de aceite` (o entregável).
|
|
21
|
+
> - **ONDE** → `context.md` (`## Arquivos relevantes`) + coluna de paths nas tasks (`## Arquivos`).
|
|
22
|
+
> - **COMO** → `## Aderência à Stack` + `## Plano de execução` (abordagem técnica, fetching, composição).
|
|
23
|
+
|
|
24
|
+
## Contexto (POR QUE)
|
|
19
25
|
|
|
20
26
|
<Por que esta tela existe — referência ao PRD, ticket, decisão de produto.>
|
|
21
27
|
|
|
@@ -140,10 +146,11 @@ Decisões possíveis:
|
|
|
140
146
|
> Gaps detectados confrontando Postman/regras-de-negocio com a necessidade da tela. Cada item vira task ClickUp atribuída ao Douglas (default) ou ao `ASSIGNEE` informado. Vazio = backend completo para esta tela.
|
|
141
147
|
|
|
142
148
|
> Coluna `Bloqueia tasks` lista os T-IDs frontend cujo frontmatter declara `depends_on_backend:` apontando para a `gap-key` desta linha (ex.: `migration-20260501150000`).
|
|
149
|
+
> Coluna `Bypass frontend` declara COMO o frontend entrega sem o backend pronto (fallback, mock, toast "em breve", cast + null-coalesce). Sem bypass declarado, a tarefa frontend fica `bloqueada-backend`. **Princípio: frontend nunca bloqueado por gap de backend — sempre há bypass OU a task é explicitamente bloqueada.**
|
|
143
150
|
|
|
144
|
-
| gap-key | Gap | Endpoint/Coleção esperada | ClickUp ID | Status | Bloqueia tasks |
|
|
145
|
-
|
|
146
|
-
| | | | | | |
|
|
151
|
+
| gap-key | Gap | Bypass frontend | Endpoint/Coleção esperada | ClickUp ID | Status | Bloqueia tasks |
|
|
152
|
+
|---------|-----|-----------------|---------------------------|------------|--------|----------------|
|
|
153
|
+
| | | | | | | |
|
|
147
154
|
|
|
148
155
|
## Mock strategy
|
|
149
156
|
|
|
@@ -157,6 +164,20 @@ Decisões possíveis:
|
|
|
157
164
|
- **Postman**: `<lista de coleções/endpoints relevantes em docs/postman/>`
|
|
158
165
|
- **Stack ref**: `<sha de stack.md>`
|
|
159
166
|
|
|
167
|
+
## Tabela de regressão
|
|
168
|
+
|
|
169
|
+
> Fluxos/telas existentes que este plano NÃO pode quebrar. `validate-plan` confere que nenhum item regrediu. Vazio = plano greenfield sem superfície a preservar.
|
|
170
|
+
|
|
171
|
+
- <rota/fluxo 1 — o que deve continuar funcionando (fetching + markup preservados)>
|
|
172
|
+
- <rota/fluxo 2>
|
|
173
|
+
|
|
174
|
+
## Anti-padrões
|
|
175
|
+
|
|
176
|
+
> Proibições explícitas desta entrega. O executor recusa qualquer task que viole. Derivado das memórias do projeto + decisões deste plano.
|
|
177
|
+
|
|
178
|
+
- ❌ <ação proibida 1 — ex.: criar primitiva nova quando componente X já cobre; estender via prop>
|
|
179
|
+
- ❌ <ação proibida 2 — ex.: hardcode de RBAC inline em JSX; centralizar em helper>
|
|
180
|
+
|
|
160
181
|
## Riscos & Rollback
|
|
161
182
|
|
|
162
183
|
- <risco>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
prd_id: PRD-<NNN>-<slug>
|
|
3
|
+
intake_ref: INTAKE-<NNN>-<slug>
|
|
4
|
+
descartavel: <bool>
|
|
5
|
+
status: pronto-para-adr
|
|
6
|
+
created_at: <iso>
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# <Titulo>
|
|
10
|
+
|
|
11
|
+
## TL;DR (1 paragrafo, max 4 linhas)
|
|
12
|
+
<problema + persona + solucao + metrica>
|
|
13
|
+
|
|
14
|
+
## Quem usa
|
|
15
|
+
<persona em 2 linhas>
|
|
16
|
+
|
|
17
|
+
## Por que existe
|
|
18
|
+
<problema em 2 linhas, citando 1 historia real>
|
|
19
|
+
|
|
20
|
+
## O que faz (3-7 bullets)
|
|
21
|
+
- <feature 1>
|
|
22
|
+
- <feature 2>
|
|
23
|
+
|
|
24
|
+
## Telas-chave
|
|
25
|
+
| # | Tela | Proposito | Inputs | Outputs |
|
|
26
|
+
|---|------|-----------|--------|---------|
|
|
27
|
+
| 1 | <nome> | <verbo + objeto> | <dado entrada> | <dado saida> |
|
|
28
|
+
|
|
29
|
+
## Criterios de aceite (do nao-tecnico)
|
|
30
|
+
- [ ] Usuario consegue <acao primaria> em menos de <X> passos
|
|
31
|
+
- [ ] <criterio mensurivel>
|
|
32
|
+
|
|
33
|
+
## Metrica de sucesso
|
|
34
|
+
<copia da metrica humana + 1 metrica quantitativa derivada>
|
|
35
|
+
|
|
36
|
+
## NAO faz parte (escopo negativo)
|
|
37
|
+
- <bullet>
|
|
38
|
+
|
|
39
|
+
## Proximo passo
|
|
40
|
+
- Rodar `*adr-tech-decisions PRD-<NNN>-<slug>` para definir arquitetura.
|
|
@@ -17,15 +17,39 @@ assignees: []
|
|
|
17
17
|
links: []
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
<!--
|
|
21
|
+
MODELO DE TASK: toda task DEVE responder às 4 perguntas, nesta ordem:
|
|
22
|
+
POR QUE → ## Contexto
|
|
23
|
+
O QUE → ## Objetivo + ## Entrega
|
|
24
|
+
ONDE → ## Arquivos
|
|
25
|
+
COMO → ## Plano de execução
|
|
26
|
+
Nenhuma seção pode ficar com placeholder. Se não há resposta para uma das 4, a task não está pronta para execução.
|
|
27
|
+
-->
|
|
21
28
|
|
|
22
|
-
|
|
29
|
+
## Contexto (POR QUE)
|
|
23
30
|
|
|
24
|
-
|
|
31
|
+
<Por que esta task existe — referência direta ao plano pai e ao critério de aceite. Qual problema/gap motiva.>
|
|
25
32
|
|
|
26
|
-
|
|
33
|
+
## Objetivo (O QUE)
|
|
27
34
|
|
|
28
|
-
|
|
35
|
+
<Resultado esperado em 1-2 frases — o entregável concreto, observável.>
|
|
36
|
+
|
|
37
|
+
### Entrega
|
|
38
|
+
|
|
39
|
+
- <artefato 1 que esta task produz (componente, action, migration, story...)>
|
|
40
|
+
- <artefato 2>
|
|
41
|
+
|
|
42
|
+
## Arquivos (ONDE)
|
|
43
|
+
|
|
44
|
+
> Caminhos exatos. Marque a operação. Sem isso o executor adivinha — proibido.
|
|
45
|
+
|
|
46
|
+
| Operação | Path | Nota |
|
|
47
|
+
|----------|------|------|
|
|
48
|
+
| criar | `src/.../novo.tsx` | <o que é> |
|
|
49
|
+
| editar | `src/.../existente.ts:NN` | <o que muda> |
|
|
50
|
+
| deletar | `src/.../legado.tsx` | <só se `cleanup_target`> |
|
|
51
|
+
|
|
52
|
+
## Plano de execução (COMO)
|
|
29
53
|
|
|
30
54
|
- [ ] Passo 1
|
|
31
55
|
- [ ] Passo 2
|