ganbatte-os 0.2.36 → 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 (39) hide show
  1. package/.gos/agents/profiles/ganbatte-os-master.md +113 -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 +219 -0
  17. package/.gos/skills/cloudflare-pages-setup/SKILL.md +180 -0
  18. package/.gos/skills/execute-plan/SKILL.md +5 -0
  19. package/.gos/skills/figma-print-diff/SKILL.md +165 -0
  20. package/.gos/skills/gos-caveman/SKILL.md +110 -0
  21. package/.gos/skills/gos-compress/SKILL.md +134 -0
  22. package/.gos/skills/gos-compress/scripts/compress.py +346 -0
  23. package/.gos/skills/gos-compress/scripts/setup.py +91 -0
  24. package/.gos/skills/idea-intake/SKILL.md +147 -0
  25. package/.gos/skills/plan-blueprint/SKILL.md +48 -3
  26. package/.gos/skills/plan-to-tasks/SKILL.md +28 -0
  27. package/.gos/skills/prd-from-intake/SKILL.md +94 -0
  28. package/.gos/skills/prototype-orchestrator/SKILL.md +120 -0
  29. package/.gos/skills/registry.json +13 -1
  30. package/.gos/skills/timer-component-pattern/SKILL.md +245 -0
  31. package/.gos/skills/typeform-form-pattern/SKILL.md +210 -0
  32. package/.gos/skills/ui-guardrails/SKILL.md +111 -0
  33. package/.gos/skills/validate-plan/SKILL.md +2 -0
  34. package/.gos/templates/intakeTemplate.md +41 -0
  35. package/.gos/templates/planTemplate.md +21 -0
  36. package/.gos/templates/prdLeanTemplate.md +40 -0
  37. package/.gos/templates/taskTemplate.md +2 -0
  38. package/CLAUDE.md +9 -1
  39. package/package.json +1 -1
@@ -83,6 +83,106 @@ persona:
83
83
  - "Comprehension Gate: Before delegating to any agent, skill, or workflow, first understand what needs to be done — read relevant code, docs, and state; document findings; only then route"
84
84
  - "Stack como contrato: toda decisão técnica respeita docs/stack.md; alterações de stack exigem ADR explícita e flag --allow-arch-change"
85
85
  - "Paths via config: nada hardcoded — todos os caminhos do projeto-cliente vêm de .gos-local/plan-paths.json"
86
+ - "Proactive stack suggestion: ao iniciar projeto novo, sugerir stack default (libraries/default-stack-kb.md) e perguntar antes de chumbar — adr-tech-decisions formaliza"
87
+ - "Zero-emoji em codigo: NUNCA gerar emoji em UI/codigo. SEMPRE usar Lucide React (libraries/lucide-icons-policy.md). Excecao: usuario solicita explicitamente."
88
+ - "Skeleton + empty obrigatorios: SEMPRE skeleton ao carregar dados, SEMPRE empty state com Lucide icon + CTA quando lista vazia. Sem excecoes."
89
+ - "Form de coleta: SEMPRE sugerir typeform-form-pattern para entrada multi-step (cadastro, quiz, onboarding, lead, survey)"
90
+ - "Timer/countdown: SEMPRE delegar para timer-component-pattern, nunca codar do zero"
91
+ - "Cloudflare Pages helper: oferecer cloudflare-pages-setup ao iniciar projeto novo ou ao adicionar binding/env"
92
+ - "Security best practices: aplicar libraries/security-best-practices.md por default (RLS Supabase, secrets via wrangler, validacao Zod front+back)"
93
+ - "Engineering best practices: TypeScript strict, conventional commits, hexagonal-ish em continuo, achatar em descartavel (libraries/engineering-best-practices.md)"
94
+
95
+ # ─── PROACTIVE SUGGESTIONS ───────────────────────────────────
96
+ # Trigger patterns onde o master sugere skills/libs proativamente, sem o usuario pedir.
97
+ proactive_suggestions:
98
+ novo_projeto:
99
+ triggers: [novo projeto, comecar projeto, criar app, iniciar produto, nova ideia]
100
+ sugerir:
101
+ - "prototype-orchestrator se ideia ainda crua (intake -> PRD -> ADR)"
102
+ - "default-stack-kb resumido como ponto de partida"
103
+ - "cloudflare-pages-setup para configurar Pages + Workers"
104
+ output_template: |
105
+ Antes de codar, sugiro:
106
+ 1. Rodar /gos:skills:prototype-orchestrator se a ideia ainda esta crua.
107
+ 2. Stack default proposto: React+TS+Vite, TanStack Query/Router, Tailwind v4 + shadcn/ui, Lucide React, Cloudflare Pages + Workers, Supabase (Auth/DB/Realtime/Storage).
108
+ 3. Posso tocar /gos:skills:cloudflare-pages-setup init para configurar tudo. Topa, ou prefere outro caminho?
109
+
110
+ form_de_coleta:
111
+ triggers: [formulario, form, cadastro, quiz, onboarding, lead form, survey, captura, multi-step]
112
+ sugerir:
113
+ - "typeform-form-pattern (uma pergunta por vez, conversao 2-3x)"
114
+ output_template: |
115
+ Para coleta de dados desse tipo, sugiro o typeform-pattern (uma pergunta por tela, conversao maior). Posso gerar a estrutura via /gos:skills:typeform-form-pattern. Topa?
116
+
117
+ timer:
118
+ triggers: [timer, contador, countdown, pomodoro, kata, cronometro]
119
+ sugerir:
120
+ - "timer-component-pattern com state machine + atalhos teclado + Lucide controles"
121
+ output_template: |
122
+ Posso gerar via /gos:skills:timer-component-pattern — state machine completa, atalhos (Espaco/R/E), persistencia opcional, Lucide controls. Topa?
123
+
124
+ ui_data_load:
125
+ triggers: [lista de, tabela de, cards de, dashboard, load data, fetch]
126
+ sugerir:
127
+ - "skeleton durante load (shadcn Skeleton)"
128
+ - "empty state com Lucide icon + CTA"
129
+ - "error state com retry"
130
+ output_template: |
131
+ Codigo dessa tela vai incluir os 5 estados obrigatorios: skeleton (loading), empty (lista vazia + CTA), error (com retry), success, default. Lucide icons em tudo, sem emoji.
132
+
133
+ decisao_arquitetural:
134
+ triggers: [qual banco, qual auth, qual hospedar, qual stack, escolher tecnologia, adr]
135
+ sugerir:
136
+ - "adr-tech-decisions para formalizar com perguntas ao usuario"
137
+ output_template: |
138
+ Decisao arquitetural -> /gos:skills:adr-tech-decisions sempre pergunta antes de chumbar e consulta cloudflare-stack-kb + supabase-stack-kb. Posso rodar.
139
+
140
+ # ─── OUTPUT POLICY ───────────────────────────────────────────
141
+ # Regras estritas de saida em codigo gerado.
142
+ output_policy:
143
+ zero_emoji_em_codigo:
144
+ rule: "NUNCA gerar emoji unicode (\\u{1F300}-\\u{1FAFF}, \\u{2600}-\\u{27BF}) em codigo de UI."
145
+ excecao: "Usuario solicita emoji explicitamente OU output em texto plano para humano (Slack/ClickUp/README)."
146
+ enforcement: "ui-guardrails seccao F bloqueia codegen com emoji."
147
+
148
+ lucide_only:
149
+ rule: "Lucide React e UNICA lib de icones aceita."
150
+ excecao: "Nenhuma. Heroicons/FontAwesome/SVG-inline -> recusar."
151
+
152
+ skeleton_empty_obrigatorios:
153
+ rule: "Toda tela com fetch de dados gera skeleton + empty + error states no mesmo PR."
154
+ excecao: "Nenhuma — vale ate em descartavel (UX e cheap)."
155
+
156
+ no_emoji_em_resposta_default:
157
+ rule: "Conversa default em chat: zero emoji. Use texto direto."
158
+ excecao: "Usuario pede explicitamente."
159
+
160
+ # ─── DEFAULT STACK ───────────────────────────────────────────
161
+ # Quando usuario nao especifica, master propoe este stack.
162
+ default_stack:
163
+ ref: "libraries/default-stack-kb.md"
164
+ frontend:
165
+ framework: "Vite + React 18 + TypeScript (strict)"
166
+ routing: "TanStack Router"
167
+ data: "TanStack Query"
168
+ styling: "Tailwind v4 + shadcn/ui"
169
+ icons: "Lucide React (UNICA lib)"
170
+ forms: "React Hook Form + Zod"
171
+ toasts: "Sonner"
172
+ backend:
173
+ runtime: "Cloudflare Workers (Hono opcional)"
174
+ db: "Supabase Postgres"
175
+ auth: "Supabase Auth (magic link + OAuth)"
176
+ realtime: "Supabase Realtime (preferido) OU Cloudflare DO+WS"
177
+ storage: "Supabase Storage"
178
+ hosting:
179
+ frontend: "Cloudflare Pages"
180
+ backend: "Cloudflare Workers (mesmo dominio /api)"
181
+ tooling:
182
+ pkg_manager: "pnpm (workspace) OU npm (single)"
183
+ deploy: "wrangler"
184
+ db_migrations: "Supabase CLI"
185
+ linter: "Biome (preferido) OU ESLint+Prettier"
86
186
 
87
187
  # ─── COMPREHENSION GATE ──────────────────────────────────────
88
188
  # Applies before any delegation to agent, skill, or workflow.
@@ -250,6 +350,19 @@ routing_matrix:
250
350
  Transições de status são VINCULANTES com pós-condição: cada task DEVE sair de pendente
251
351
  antes da próxima — se o executor não chamar progress-tracker, abortar (bug PLAN-006).
252
352
 
353
+ audit_screenshots:
354
+ triggers: ["*audit-screenshots", audit screenshots, auditar print, comparar com figma, "essa tela esta errada", "isso aqui esta divergindo", auditoria visual, prints divergentes]
355
+ target: skill:audit-screenshots
356
+ pre_action: Validate .gos-local/plan-paths.json + docs/figma-screen-map.md exist (path em campo `figma_screen_map`). Ausência aborta com instrução clara.
357
+ notes: |
358
+ Skill conversacional. Recebe N prints (anotados ou nao) ao longo da sessao,
359
+ mapeia cada print -> tela -> Figma frame via figma-screen-map.md, acumula
360
+ divergencias. Ao receber `close [SLUG]` emite UM plano `PLAN-NNN-fix-audit-<SLUG>`
361
+ com tasks pendentes — NAO executa codigo. Plano gerado e input direto pra
362
+ *execute-plan e *validate-plan (mesmo template).
363
+ Quando o usuario cola imagem sem comando explicito, assumir `*audit-screenshots add`.
364
+ Anotacoes em vermelho do usuario = high-signal (peso 2x na decisao de virar task).
365
+
253
366
  validate_plan:
254
367
  triggers: [validate, validar plano, "*validate-plan", validate plan, revisar plano, plano implementado]
255
368
  target: skill:validate-plan
@@ -0,0 +1,58 @@
1
+ # Caveman Compression Rules
2
+
3
+ > Regras detalhadas de compressao usadas por `gos-caveman`. Atribuicao: https://github.com/JuliusBrussee/caveman (MIT).
4
+
5
+ ## Niveis
6
+
7
+ ### Lite (~30% reducao)
8
+ - Mantem coesao narrativa
9
+ - Remove articulos opcionais
10
+ - Junta sentencas curtas
11
+
12
+ ### Full (~75% reducao) — DEFAULT G-OS
13
+ - Estilo telegrafico
14
+ - Frases nominais quando possivel
15
+ - 1 ideia por linha
16
+
17
+ ### Ultra (~90% reducao)
18
+ - Quase pseudo-codigo
19
+ - Setas `->` substituem "leva a", "resulta em"
20
+ - Preposicoes minimas
21
+
22
+ ## Tabela de transformacoes
23
+
24
+ | Pattern verboso | Caveman lite | Caveman full | Caveman ultra |
25
+ |-----------------|--------------|--------------|---------------|
26
+ | "voce deve fazer X" | "faca X" | "X" | "X" |
27
+ | "e responsavel por" | ":" | ":" | ":" |
28
+ | "que e usado para" | "para" | "p/" | "p/" |
29
+ | "no caso de" | "se" | "se" | "se" |
30
+ | "a fim de que" | "para" | "p/" | "p/" |
31
+ | "por causa de" | "por" | "por" | "<-" |
32
+ | "leva a / resulta em" | "leva a" | "->" | "->" |
33
+ | "e necessario que" | "deve" | "must" | "!" |
34
+ | "nao e necessario" | "nao precisa" | "skip" | "x" |
35
+
36
+ ## Pre-fixos preservados (nunca mexer)
37
+
38
+ - Codigo: ` ``` `, `<code>`
39
+ - Inline code: `` ` ``
40
+ - Listas: `-`, `*`, `1.`
41
+ - Headers: `#`, `##`, `###`
42
+ - Frontmatter: `---` blocks
43
+ - Tabelas: `|`
44
+ - Links: `[text](url)`
45
+
46
+ ## Anti-padroes
47
+
48
+ - Comprimir codigo. NUNCA.
49
+ - Comprimir mensagem para nao-tecnico. NUNCA.
50
+ - Mudar valores numericos. NUNCA.
51
+ - Trocar nomes proprios. NUNCA.
52
+
53
+ ## Self-check
54
+
55
+ Apos comprimir, perguntar mentalmente:
56
+ 1. Um leitor tecnico recupera 100% da semantica? Se nao -> reduzir nivel.
57
+ 2. Algum nome/numero/path foi alterado? Se sim -> bug, refazer.
58
+ 3. A reducao e >=20% (lite) / >=60% (full) / >=80% (ultra)? Se nao -> nao houve compressao real.
@@ -0,0 +1,161 @@
1
+ # Cloudflare Stack KB — Free Tier First (2026-05)
2
+
3
+ > Referencia consultada por `adr-tech-decisions` ao decidir arquitetura. Data: 2026-05.
4
+ > Sempre verificar https://developers.cloudflare.com/ para limites atuais antes de chumbar.
5
+
6
+ ## Filosofia G-OS para Cloudflare
7
+
8
+ 1. **Free tier primeiro**: para MVPs descartaveis, recusar opcoes pagas.
9
+ 2. **Monolito Workers + Pages**: front e back no mesmo repo quando possivel — evita CORS, deploy duplo, env separado.
10
+ 3. **Sem servidor separado para WebSocket**: usar Durable Objects (free 1M ops/dia), nao infra dedicada.
11
+ 4. **Anti-vendor-lock**: documentar saida (R2 -> S3, D1 -> Postgres) no ADR.
12
+
13
+ ## Compute
14
+
15
+ ### Workers (free)
16
+ - 100k requests/dia
17
+ - 10ms CPU/request (sem extender — paid sobe pra 30s)
18
+ - Sem cold start
19
+ - Compativel com Hono, itty-router, ts-rest
20
+
21
+ ### Pages (free)
22
+ - Builds ilimitados
23
+ - 500 builds/mes
24
+ - 100 dominios custom
25
+ - Functions inclusos (Workers embutido na Pages)
26
+ - 20k requests/dia para Functions no free
27
+
28
+ ### Workers Paid ($5/mes)
29
+ - 10M requests/mes incluido
30
+ - 30s CPU/request
31
+ - Workers Logs
32
+
33
+ ## Storage
34
+
35
+ ### D1 (free)
36
+ - 5GB total
37
+ - 5M reads/dia
38
+ - 100k writes/dia
39
+ - SQLite-compatible
40
+ - Boa para CRUD ate ~10k registros ativos
41
+ - **Limitacao: 1 banco por Workers binding (sem cross-db queries)**
42
+
43
+ ### KV (free)
44
+ - 100k reads/dia
45
+ - 1k writes/dia (BAIXO — atencao)
46
+ - 1GB total
47
+ - Eventually consistent (~60s replication)
48
+ - Boa para feature flags, sessions, cache leve
49
+ - **Anti-uso: nao usar como banco transacional**
50
+
51
+ ### R2 (free)
52
+ - 10GB storage
53
+ - 1M Class A ops/mes (writes/lists)
54
+ - 10M Class B ops/mes (reads)
55
+ - Sem egress fee (vs S3)
56
+ - S3-compatible API
57
+ - Boa para uploads de usuario, assets, backups
58
+
59
+ ### Durable Objects (free)
60
+ - 1M requests/mes
61
+ - 400k GB-seconds/mes
62
+ - WebSocket support nativo
63
+ - Storage: 50ms reads/writes locais
64
+ - Boa para: chat rooms, contadores, locks distribuidos, real-time games
65
+ - **Custo invisivel: alarms persistem mesmo se DO esta idle (cobra GB-s)**
66
+
67
+ ## Real-time
68
+
69
+ ### WebSocket via DO (recomendado para descartavel)
70
+ - Free 1M ops/mes
71
+ - Suporta hibernation (DO desliga e reativa em ~10ms quando WS reconnect)
72
+ - Codigo: `state.acceptWebSocket(ws)` + `webSocketMessage(ws, msg)`
73
+ - Limite: 32k WS conexoes por DO (mas 1 DO ja basta para MVP)
74
+
75
+ ### Quando NAO usar DO+WS:
76
+ - Mais de 10k usuarios simultaneos -> usar Supabase Realtime (Postgres-based, escala melhor)
77
+ - Precisa pubsub cross-DO -> adiciona Queues (paid)
78
+
79
+ ## Auth
80
+
81
+ ### Cloudflare Access (free ate 50 users)
82
+ - Zero-trust auth, sem codigo
83
+ - Login Google/GitHub/email magic link
84
+ - Bom para: dashboards internos, ferramentas de time
85
+ - **Limite: 50 users free; depois $3/user/mes**
86
+
87
+ ### Sem auth nativa Workers
88
+ - Workers nao tem session/cookie mgmt embutido
89
+ - Para auth complexa: Supabase Auth ou Auth.js (Lucia)
90
+
91
+ ## Bindings (configuracao em wrangler.toml)
92
+
93
+ ```toml
94
+ name = "<projeto>"
95
+ compatibility_date = "2026-05-01"
96
+
97
+ [[d1_databases]]
98
+ binding = "DB"
99
+ database_name = "<nome>"
100
+ database_id = "<uuid>"
101
+
102
+ [[kv_namespaces]]
103
+ binding = "KV"
104
+ id = "<uuid>"
105
+
106
+ [[r2_buckets]]
107
+ binding = "R2"
108
+ bucket_name = "<nome>"
109
+
110
+ [[durable_objects.bindings]]
111
+ name = "ROOM"
112
+ class_name = "ChatRoom"
113
+
114
+ [[migrations]]
115
+ tag = "v1"
116
+ new_classes = ["ChatRoom"]
117
+ ```
118
+
119
+ ## Patterns recomendados
120
+
121
+ ### Pattern A — SPA descartavel (perfil A do ADR)
122
+ - Pages serve `index.html` + assets
123
+ - Sem Workers, sem DB
124
+ - Estado em localStorage
125
+ - 0 setup, deploy via `git push`
126
+
127
+ ### Pattern B — App CRUD continuo (perfil B)
128
+ - Pages serve front (Vite build)
129
+ - Workers em `/api/*` rota
130
+ - D1 binding para CRUD
131
+ - Auth: Supabase Auth (front-only) OU Cloudflare Access (zero-config)
132
+
133
+ ### Pattern C — Realtime (perfil C)
134
+ - Pages serve front
135
+ - Workers para REST CRUD
136
+ - DO para WebSocket
137
+ - D1 para persistencia OU Supabase Postgres
138
+ - Cloudflare Tunnel se backend precisa rodar localmente em dev
139
+
140
+ ## Limites para alarmar (gates do ADR)
141
+
142
+ | Recurso | Limite free | Quando ja preocupar |
143
+ |---------|-------------|---------------------|
144
+ | Workers reqs | 100k/dia | >50k/dia projetado |
145
+ | D1 writes | 100k/dia | CRUD com escrita > 1/s sustentado |
146
+ | KV writes | 1k/dia | Qualquer caso de escrita por user-action |
147
+ | DO requests | 1M/mes | >100 conexoes WS sustentadas |
148
+ | Pages builds | 500/mes | CI commit > 16/dia |
149
+
150
+ ## Ferramentas
151
+
152
+ - **Wrangler CLI**: `npm i -g wrangler` — deploy, dev local, tail logs
153
+ - **Local dev**: `wrangler dev` simula Workers localmente, mas D1 local e separado de remote (`--remote` para usar prod)
154
+ - **Logs**: `wrangler tail` (real-time) — gratis ate 5/dia ativos
155
+
156
+ ## Anti-patterns para flagar
157
+
158
+ - KV como banco principal: 1k writes/dia mata isso rapido.
159
+ - D1 com >10 tabelas joinadas em 1 query: D1 nao otimiza JOIN como Postgres.
160
+ - DO sem hibernation: deixa 1 conexao WS aberta = cobra GB-s o tempo todo.
161
+ - Pages Functions para logica pesada: limite 100k execucoes/dia, mais baixo que Workers (1M paid).
@@ -0,0 +1,98 @@
1
+ # Default Stack KB — G-OS canonical (2026-05)
2
+
3
+ > Stack default proposto pelo `gos-master` quando o usuario nao especifica. Sempre confirmado via `adr-tech-decisions` antes de chumbar.
4
+
5
+ ## Principios
6
+
7
+ 1. **TypeScript everywhere** — front, back, scripts. Nunca JS puro em codigo de app.
8
+ 2. **Free tier first** — MVP descartavel cabe 100% no free de Cloudflare + Supabase.
9
+ 3. **Zero servidor proprio** — Workers Pages + Supabase substituem Express+VPS.
10
+ 4. **Anti-vendor-lock** — Postgres standard (Supabase) e Workers (Hono) sao portaveis.
11
+
12
+ ## Stack canonico
13
+
14
+ ### Frontend
15
+
16
+ ```
17
+ - Vite + React 18 + TypeScript (strict)
18
+ - TanStack Query (data fetching, cache, mutations, optimistic UI)
19
+ - TanStack Router (type-safe routing, loaders, search params tipados)
20
+ - Tailwind CSS v4 + shadcn/ui (Radix primitives + cn() helper)
21
+ - Lucide React (UNICA lib de icones — zero emojis em codigo)
22
+ - React Hook Form + Zod (validacao schema-first)
23
+ - Sonner (toasts)
24
+ ```
25
+
26
+ ### Backend
27
+
28
+ ```
29
+ - Cloudflare Workers (Hono framework opcional para routing)
30
+ - Cloudflare Pages Functions (alternativa lightweight para API routes simples)
31
+ - Supabase Postgres (DB principal — preferido sobre D1 quando precisa JOIN/RLS)
32
+ - Supabase Auth (OAuth + magic link — substitui Auth.js/Clerk)
33
+ - Supabase Realtime (WebSocket via Postgres logical replication)
34
+ - Supabase Storage (blob storage com transformacoes de imagem)
35
+ ```
36
+
37
+ ### Hosting
38
+
39
+ ```
40
+ - Frontend: Cloudflare Pages (deploy via git push)
41
+ - Backend: Cloudflare Workers (mesmo dominio, prefixo /api/*)
42
+ - DNS: Cloudflare (proxy on, SSL auto)
43
+ ```
44
+
45
+ ### Tooling
46
+
47
+ ```
48
+ - pnpm (workspace para monorepo, usar npm em projeto unico)
49
+ - Wrangler CLI (deploy + dev local Workers)
50
+ - Supabase CLI (migrations + tipos gerados)
51
+ - Biome OU ESLint+Prettier (preferencia: Biome — mais rapido, zero config)
52
+ ```
53
+
54
+ ## Quando NAO usar este stack
55
+
56
+ | Caso | Stack alternativo | Motivo |
57
+ |------|-------------------|--------|
58
+ | SSR pesado / SEO crítico | Next.js + Vercel | Workers Pages serve SPA — para SSR usar Next |
59
+ | Backoffice + ETL pesado | Node em VPS + Postgres dedicado | Workers tem limite 30s |
60
+ | App mobile nativo | Expo + React Native | Mas API pode continuar Workers+Supabase |
61
+ | Realtime massivo (>1k conn) | Supabase Realtime > Cloudflare DO | Postgres-based escala melhor pra MVP |
62
+
63
+ ## Setup rapido (script mental)
64
+
65
+ 1. `npm create vite@latest <projeto> -- --template react-ts`
66
+ 2. `cd <projeto> && npm i`
67
+ 3. `npx shadcn@latest init` (escolher Tailwind v4, slate base)
68
+ 4. `npm i @tanstack/react-query @tanstack/react-router lucide-react react-hook-form @hookform/resolvers zod sonner`
69
+ 5. `npm i @supabase/supabase-js`
70
+ 6. `npm i -D wrangler`
71
+ 7. Configurar `wrangler.toml` apontando para Pages
72
+ 8. `wrangler pages deploy dist` (apos primeiro build)
73
+
74
+ ## Decisoes embutidas (nao precisa perguntar)
75
+
76
+ - React vs Vue/Svelte -> React (ecossistema + hiring + LLM training data).
77
+ - TanStack Query vs SWR -> TanStack (cache mais granular, devtools).
78
+ - TanStack Router vs React Router -> TanStack (type-safe, search params tipados).
79
+ - Tailwind v3 vs v4 -> v4 (CSS-first, lightning CSS).
80
+ - Lucide vs Heroicons vs FontAwesome -> Lucide (mais variantes, tree-shake melhor).
81
+ - Supabase Auth vs Clerk vs Auth.js -> Supabase (mesmo provider do DB = RLS integrado).
82
+ - Magic link vs password -> magic link first (UX superior, sem reset password fluxo).
83
+
84
+ ## Decisoes que DEVEM perguntar (regra do dono)
85
+
86
+ - D1 vs Supabase Postgres (depende de complexidade do schema)
87
+ - Workers DO vs Supabase Realtime (chat ad-hoc vs notif baseada em DB)
88
+ - Monorepo (turborepo) vs single repo (depende de N apps)
89
+ - Analytics (PostHog vs Plausible vs nada)
90
+ - Error tracking (Sentry vs nada vs Cloudflare Logs)
91
+
92
+ ## Output policy do master
93
+
94
+ `gos-master`, ao iniciar conversa de novo projeto, SEMPRE oferece este stack como ponto de partida. Frase tipica:
95
+
96
+ > "Para o MVP descartavel/continuo, o default que recomendo e Vite+React+TS, TanStack Query/Router, Tailwind v4 + shadcn/ui, Lucide React (icones), hospedado em Cloudflare Pages com Workers no /api e Supabase como DB+Auth+Realtime+Storage. Prefere alguma alternativa ou seguimos com isso e vamos refinando?"
97
+
98
+ Decisoes sao validadas em `adr-tech-decisions` (skill SEMPRE pergunta antes de chumbar).
@@ -0,0 +1,208 @@
1
+ # Engineering Best Practices — G-OS
2
+
3
+ > Padroes de codigo, arquitetura e workflow. Aplicado em todo `plan-blueprint`, codegen e revisao.
4
+
5
+ ## TypeScript — strict mode obrigatorio
6
+
7
+ ```json
8
+ // tsconfig.json
9
+ {
10
+ "compilerOptions": {
11
+ "strict": true,
12
+ "noImplicitAny": true,
13
+ "strictNullChecks": true,
14
+ "noUncheckedIndexedAccess": true,
15
+ "noFallthroughCasesInSwitch": true
16
+ }
17
+ }
18
+ ```
19
+
20
+ ### Regras
21
+
22
+ - **Nunca** `as any`, `@ts-ignore` sem comentario justificando.
23
+ - **Permitido** `@ts-expect-error` com comentario obrigatorio.
24
+ - `interface` para objetos de dominio e contratos.
25
+ - `type` para unions, intersections, utilitarios.
26
+ - **Nunca enum** — use `const X = { ... } as const` + `type Status = typeof X[keyof typeof X]`.
27
+ - Generics tipados — sem `T = any`.
28
+
29
+ ## React 18 — patterns
30
+
31
+ ### Componentes
32
+ - Funcionais sempre. Class components proibidos.
33
+ - `function declaration` para componentes principais (export default).
34
+ - `arrow function` para callbacks/handlers.
35
+ - Props tipadas via `interface`.
36
+ - Children: `React.ReactNode` (nao `JSX.Element[]`).
37
+
38
+ ### Hooks
39
+ - `useState` para estado local primitivo.
40
+ - `useReducer` para state machine (>3 transicoes).
41
+ - `useEffect` apenas para sincronizacao com sistema externo (DOM, network, subscriptions).
42
+ - **NUNCA** `useEffect` para derivar state — calcular inline ou `useMemo`.
43
+ - Custom hooks com prefix `use` + camelCase (`useAuth`, `useProjects`).
44
+
45
+ ### Estado global
46
+ - Servidor: TanStack Query (cache + invalidation).
47
+ - Cliente: Zustand para complexo, `useState` lift-up para simples.
48
+ - **Nunca** Redux em projeto novo.
49
+
50
+ ## TanStack Query — patterns
51
+
52
+ ```tsx
53
+ // Query key como tupla [domain, params]
54
+ const projects = useQuery({
55
+ queryKey: ['projects', { status: 'active' }],
56
+ queryFn: () => api.projects.list({ status: 'active' }),
57
+ staleTime: 60_000, // 1min
58
+ });
59
+
60
+ // Mutation com invalidacao
61
+ const createProject = useMutation({
62
+ mutationFn: api.projects.create,
63
+ onSuccess: () => qc.invalidateQueries({ queryKey: ['projects'] }),
64
+ });
65
+ ```
66
+
67
+ ### Anti-patterns
68
+ - Refetch on window focus em lista grande (custo de rede).
69
+ - queryKey como string (`'projects'`) — sempre array.
70
+ - Mutation sem `onError` quando UX precisa rollback.
71
+
72
+ ## TanStack Router — patterns
73
+
74
+ - Routes em `src/routes/<path>.tsx` com file-based routing OU codegen.
75
+ - Loader para dados criticos (bloqueia render ate ter).
76
+ - Search params via `validateSearch` Zod.
77
+ - Type-safe params: `Route.useParams()`.
78
+
79
+ ## File structure (single-app)
80
+
81
+ ```
82
+ src/
83
+ routes/ # rotas TanStack
84
+ components/
85
+ ui/ # shadcn primitives
86
+ <feature>/ # componentes especificos do dominio
87
+ hooks/ # custom hooks reutilizaveis
88
+ lib/
89
+ supabase.ts # client
90
+ utils.ts # cn(), formatters
91
+ schemas/ # Zod schemas
92
+ types/ # tipos compartilhados
93
+ api/ # client API (workers fetch wrappers)
94
+ ```
95
+
96
+ ## File structure (monorepo)
97
+
98
+ ```
99
+ apps/
100
+ web/ # frontend
101
+ worker/ # backend Workers
102
+ packages/
103
+ ui/ # design system compartilhado
104
+ schemas/ # Zod schemas usados front+back
105
+ types/ # tipos compartilhados
106
+ config/ # tsconfig base, eslint base
107
+ ```
108
+
109
+ ## Naming
110
+
111
+ - Componentes: `PascalCase` (`ProjectCard.tsx`).
112
+ - Hooks: `camelCase` com `use` prefix (`useProjects.ts`).
113
+ - Utils: `camelCase` (`formatCurrency.ts`).
114
+ - Types: `PascalCase` (`Project`, `User`).
115
+ - Constants: `SCREAMING_SNAKE_CASE` (`MAX_FILE_SIZE`).
116
+ - Booleans: `is/has/should` prefix (`isLoading`, `hasError`).
117
+
118
+ ## Commits — Conventional Commits
119
+
120
+ ```
121
+ <type>(<scope>): <subject>
122
+
123
+ [body]
124
+
125
+ [footer]
126
+ ```
127
+
128
+ Types: `feat`, `fix`, `refactor`, `chore`, `docs`, `test`, `style`, `perf`, `ci`.
129
+
130
+ Exemplos:
131
+ - `feat(auth): add magic link login`
132
+ - `fix(projects): correct active count`
133
+ - `refactor(api): extract supabase client`
134
+
135
+ ## Branches
136
+
137
+ - `main` — producao.
138
+ - `dev` — integracao.
139
+ - `feat/<slug>` — feature em desenvolvimento.
140
+ - `fix/<slug>` — bug fix.
141
+ - `chore/<slug>` — limpeza.
142
+
143
+ ## Workflow
144
+
145
+ 1. `feat/<slug>` -> commits pequenos e atomicos.
146
+ 2. PR para `dev`.
147
+ 3. Code review obrigatorio (auto-review aceito em MVP descartavel).
148
+ 4. CI passa (build + tsc + tests).
149
+ 5. Merge squash.
150
+ 6. `dev` -> `main` periodicamente.
151
+
152
+ ## Testing
153
+
154
+ ### MVP descartavel
155
+ - Smoke test manual antes de deploy.
156
+ - Sem unit tests obrigatorios.
157
+
158
+ ### Continuo
159
+ - Vitest para units (so logica pura, formatadores, hooks).
160
+ - Playwright para E2E em fluxos criticos (login, checkout, dashboard).
161
+ - Coverage minima: 60% em logica de negocio.
162
+ - **NAO** testar componentes UI puros (chumba implementacao).
163
+
164
+ ## Performance
165
+
166
+ - Lazy load rotas: `React.lazy` + `Suspense`.
167
+ - Code split por feature (TanStack Router cuida).
168
+ - Imagens: WebP via Cloudflare Image Transformations.
169
+ - Bundle target: <200KB inicial gzip.
170
+ - Lighthouse score 90+ em mobile.
171
+
172
+ ## Acessibilidade
173
+
174
+ - Labels em todos inputs (`htmlFor` + `id` ou `aria-label`).
175
+ - Roles ARIA em componentes custom.
176
+ - Focus management em modal/drawer.
177
+ - Contraste AA (4.5:1 texto, 3:1 UI).
178
+ - Keyboard navigation em todos os flows interativos.
179
+
180
+ Detalhe completo: `libraries/ui-guardrails-checklist.md`.
181
+
182
+ ## Architecture — Hexagonal-ish (continuo)
183
+
184
+ ```
185
+ src/
186
+ domain/ # entidades, value objects, regras puras
187
+ application/ # use cases, services
188
+ infrastructure/ # adapters (supabase, workers, http)
189
+ ui/ # React components
190
+ ```
191
+
192
+ Em MVP descartavel, achatar para `lib/` + `components/` direto.
193
+
194
+ ## Anti-patterns
195
+
196
+ - Componente >500 linhas — quebrar em sub-components.
197
+ - Hook com >5 useState — provavelmente precisa useReducer.
198
+ - Funcao com >50 linhas — extrair sub-funcoes.
199
+ - `any` em props — sempre tipar.
200
+ - `console.log` em codigo que vai pra prod — usar logger ou remover.
201
+ - TODO sem prazo/owner — vira divida tecnica permanente.
202
+ - Comentario explicando WHAT do codigo — refatorar nome em vez de comentar.
203
+
204
+ ## Referencias completas
205
+
206
+ - `docs-tools/docs/engineering/dev/02-padroes-codigo.md` — base completa.
207
+ - `docs-tools/docs/engineering/arquitetura/hexagonal.md` — para apps continuos.
208
+ - `docs-tools/docs/engineering/dev/01-workflow-desenvolvimento.md` — fluxo de trabalho.