ganbatte-os 0.2.37 → 0.2.38

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 (34) 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/default-stack-kb.md +98 -0
  5. package/.gos/libraries/engineering-best-practices.md +208 -0
  6. package/.gos/libraries/gos-compress-setup.md +62 -0
  7. package/.gos/libraries/intake-questions-mom-test.md +91 -0
  8. package/.gos/libraries/lucide-icons-policy.md +174 -0
  9. package/.gos/libraries/security-best-practices.md +138 -0
  10. package/.gos/libraries/supabase-stack-kb.md +124 -0
  11. package/.gos/libraries/timer-pattern-spec.md +252 -0
  12. package/.gos/libraries/typeform-pattern-spec.md +204 -0
  13. package/.gos/libraries/ui-guardrails-checklist.md +144 -0
  14. package/.gos/libraries/visual-diff-lenses.md +114 -0
  15. package/.gos/skills/adr-tech-decisions/SKILL.md +166 -0
  16. package/.gos/skills/audit-screenshots/SKILL.md +21 -3
  17. package/.gos/skills/cloudflare-pages-setup/SKILL.md +180 -0
  18. package/.gos/skills/figma-print-diff/SKILL.md +165 -0
  19. package/.gos/skills/gos-caveman/SKILL.md +110 -0
  20. package/.gos/skills/gos-compress/SKILL.md +134 -0
  21. package/.gos/skills/gos-compress/scripts/compress.py +346 -0
  22. package/.gos/skills/gos-compress/scripts/setup.py +91 -0
  23. package/.gos/skills/idea-intake/SKILL.md +147 -0
  24. package/.gos/skills/plan-blueprint/SKILL.md +10 -3
  25. package/.gos/skills/plan-to-tasks/SKILL.md +28 -0
  26. package/.gos/skills/prd-from-intake/SKILL.md +94 -0
  27. package/.gos/skills/prototype-orchestrator/SKILL.md +120 -0
  28. package/.gos/skills/registry.json +12 -1
  29. package/.gos/skills/timer-component-pattern/SKILL.md +245 -0
  30. package/.gos/skills/typeform-form-pattern/SKILL.md +210 -0
  31. package/.gos/skills/ui-guardrails/SKILL.md +111 -0
  32. package/.gos/templates/intakeTemplate.md +41 -0
  33. package/.gos/templates/prdLeanTemplate.md +40 -0
  34. package/package.json +1 -1
@@ -0,0 +1,210 @@
1
+ ---
2
+ name: typeform-form-pattern
3
+ description: >
4
+ Gera estrutura de form passo-a-passo estilo Typeform (uma pergunta por vez), com
5
+ questions[] tipadas, hooks de navegacao, validacao Zod, animacao, progress bar e
6
+ estados visuais. Lucide React (zero emoji). React + TS + Tailwind + shadcn.
7
+ argument-hint: "<descricao do form ou 'spec' para ver a anatomia>"
8
+ allowedTools: [Read, Glob, Grep, Bash, Write, Edit, AskUserQuestion]
9
+ sourceDocs:
10
+ - libraries/typeform-pattern-spec.md
11
+ - libraries/lucide-icons-policy.md
12
+ - libraries/ui-guardrails-checklist.md
13
+ use-when:
14
+ - usuario pede form de cadastro/onboarding/quiz/lead/survey
15
+ - precisa coletar dados em multiplas etapas com baixo cognitive load
16
+ - mobile-first form
17
+ do-not-use-for:
18
+ - settings page com varios campos editaveis simultaneamente (use form tradicional)
19
+ - input simples 1-2 campos (overhead nao compensa)
20
+ metadata:
21
+ category: ui-pattern
22
+ ---
23
+
24
+ Voce esta executando como **Typeform Pattern Generator** via skill `typeform-form-pattern`. Gera estrutura completa baseada em `libraries/typeform-pattern-spec.md`.
25
+
26
+ ## Pre-flight
27
+
28
+ 1. Pergunta ao usuario:
29
+ - "Quantas perguntas previstas?" (estimar — pode evoluir)
30
+ - "Salvar progresso entre sessoes? (sessionStorage / Supabase / nao)"
31
+ - "Tem tela de Welcome inicial? E de Review final?"
32
+ - "Submit final manda pra Supabase, Workers, ou apenas mostra resultado?"
33
+ 2. Validar stack: deve existir `tailwind.config`, `lucide-react` no package.json, shadcn `Button`, `Input`, `Card`, `Label`. Senao -> propor instalar.
34
+ 3. Aplicar `libraries/lucide-icons-policy.md` — zero emoji, todos icones via Lucide.
35
+
36
+ ## Geracao
37
+
38
+ ### Arquivos criados
39
+
40
+ ```
41
+ src/components/<feature>/
42
+ questions.ts # tipos + array de questions
43
+ TypeformContainer.tsx # estado + navegacao
44
+ questions/
45
+ WelcomeQuestion.tsx
46
+ TextQuestion.tsx
47
+ NumberQuestion.tsx
48
+ ChoiceQuestion.tsx
49
+ MultiChoiceQuestion.tsx
50
+ ReviewQuestion.tsx
51
+ hooks/
52
+ useTypeformFlow.ts
53
+ schemas/
54
+ formSchema.ts # Zod
55
+ ```
56
+
57
+ ### Estrutura base de `questions.ts`
58
+
59
+ ```ts
60
+ import type { ComponentType } from 'lucide-react';
61
+ import * as Icons from 'lucide-react';
62
+
63
+ export type QuestionType =
64
+ | 'welcome' | 'text' | 'number' | 'choice' | 'multiChoice' | 'date' | 'review';
65
+
66
+ export interface QuestionOption {
67
+ value: string;
68
+ label: string;
69
+ description?: string;
70
+ iconName?: keyof typeof Icons;
71
+ }
72
+
73
+ export interface Question<F = Record<string, unknown>> {
74
+ id: string;
75
+ type: QuestionType;
76
+ field: keyof F | null;
77
+ question: string | ((data: F) => string);
78
+ description?: string;
79
+ placeholder?: string;
80
+ suffix?: string;
81
+ decimal?: boolean;
82
+ buttonText?: string;
83
+ options?: QuestionOption[];
84
+ validate?: (value: unknown, data: F) => string | null;
85
+ showWhen?: (data: F) => boolean;
86
+ }
87
+
88
+ // Exemplo:
89
+ export const questions: Question<FormData>[] = [
90
+ {
91
+ id: 'welcome',
92
+ type: 'welcome',
93
+ field: null,
94
+ question: 'Vamos comecar',
95
+ description: 'Sera rapido — leva 2 minutos.',
96
+ buttonText: 'Comecar',
97
+ },
98
+ {
99
+ id: 'name',
100
+ type: 'text',
101
+ field: 'name',
102
+ question: 'Como podemos te chamar?',
103
+ placeholder: 'Seu nome',
104
+ validate: (v) => (!v ? 'Campo obrigatorio' : null),
105
+ },
106
+ // ...
107
+ ];
108
+ ```
109
+
110
+ ### Hook `useTypeformFlow`
111
+
112
+ Encapsula:
113
+ - `currentIndex`, `setCurrentIndex`
114
+ - `data`, `updateField`
115
+ - `activeQuestions` (filtrado por `showWhen`)
116
+ - `currentQ`
117
+ - `handleNext` (com validacao)
118
+ - `handlePrevious`
119
+ - `handleKeyPress` (Enter, Esc)
120
+ - `progress` (% concluido)
121
+ - Persistencia opcional (sessionStorage ou Supabase)
122
+
123
+ ### Container
124
+
125
+ ```tsx
126
+ export function TypeformContainer({ onComplete }: Props) {
127
+ const flow = useTypeformFlow(questions);
128
+
129
+ return (
130
+ <div className="min-h-screen flex flex-col">
131
+ <ProgressBar value={flow.progress} />
132
+
133
+ <main className="flex-1 flex items-center justify-center px-4">
134
+ <div className={`max-w-2xl w-full transition-all duration-300 ${
135
+ flow.isAnimating ? 'opacity-0 translate-y-4' : 'opacity-100 translate-y-0'
136
+ }`}>
137
+ <QuestionRenderer question={flow.currentQ} flow={flow} />
138
+ </div>
139
+ </main>
140
+
141
+ <NavButtons flow={flow} />
142
+ </div>
143
+ );
144
+ }
145
+ ```
146
+
147
+ ### Estados visuais (UI guardrails)
148
+
149
+ Aplicar `libraries/ui-guardrails-checklist.md`:
150
+
151
+ - **Loading** (submitting): botao final disabled + `<Loader2 className="h-4 w-4 animate-spin mr-2" />`.
152
+ - **Empty** (questions = []): tela "Nenhuma pergunta configurada" com `<AlertCircle />`.
153
+ - **Error**: inline acima do CTA primario.
154
+ - **Success**: tela final com `<CheckCircle2 className="h-16 w-16 text-success" />` + redirect/proximos passos.
155
+ - **Skeleton**: nao aplicavel (form nao tem fetch inicial geralmente).
156
+
157
+ ### Validacao com Zod
158
+
159
+ ```ts
160
+ // schemas/formSchema.ts
161
+ import { z } from 'zod';
162
+
163
+ export const formSchema = z.object({
164
+ name: z.string().min(2, 'Minimo 2 caracteres'),
165
+ email: z.string().email('Email invalido'),
166
+ age: z.coerce.number().int().min(13, 'Minimo 13 anos').max(120),
167
+ // ...
168
+ });
169
+
170
+ export type FormData = z.infer<typeof formSchema>;
171
+ ```
172
+
173
+ Chamar no submit final:
174
+ ```ts
175
+ const result = formSchema.safeParse(data);
176
+ if (!result.success) {
177
+ // mostrar primeiro erro inline
178
+ }
179
+ ```
180
+
181
+ ### Acessibilidade obrigatoria
182
+
183
+ - `aria-live="polite"` no container que troca de question.
184
+ - `aria-label` em botoes voltar / Lucide-icon-only.
185
+ - `useEffect` foca o input ao mudar de question.
186
+ - Roles ARIA em listas de opcoes (`role="radiogroup"` para choice).
187
+
188
+ ### Atalhos teclado
189
+
190
+ - `Enter` -> next.
191
+ - `Esc` ou `Backspace` (em campo vazio) -> previous.
192
+ - Em multiChoice: setas para navegar opcoes, espaco para toggle.
193
+
194
+ ## Customizacao por usuario
195
+
196
+ Apos gerar estrutura base, AskUserQuestion:
197
+ 1. "Cor primaria? (default: shadcn primary)"
198
+ 2. "Animacao de transicao? (fade / slide / nenhuma)"
199
+ 3. "Progress bar: top, bottom, ou nao?"
200
+ 4. "Permite voltar e editar respostas? (sim/nao)"
201
+
202
+ ## Anti-patterns embutidos (gera com warning se usuario insistir)
203
+
204
+ - "Quero todas as perguntas em uma tela" -> form tradicional, nao typeform-pattern.
205
+ - "Sem progress bar" -> warning, mas gera (UX ruim em mobile).
206
+ - "Emoji nas opcoes" -> recusar, usar Lucide.
207
+
208
+ ## Input
209
+
210
+ $ARGUMENTS
@@ -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.
@@ -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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ganbatte-os",
3
- "version": "0.2.37",
3
+ "version": "0.2.38",
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"