ganbatte-os 0.2.37 → 0.2.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/.gos/agents/profiles/ganbatte-os-master.md +100 -0
  2. package/.gos/libraries/caveman-rules.md +58 -0
  3. package/.gos/libraries/cloudflare-stack-kb.md +161 -0
  4. package/.gos/libraries/component-reuse-gate.md +75 -0
  5. package/.gos/libraries/default-stack-kb.md +98 -0
  6. package/.gos/libraries/engineering-best-practices.md +208 -0
  7. package/.gos/libraries/gos-compress-setup.md +62 -0
  8. package/.gos/libraries/intake-questions-mom-test.md +91 -0
  9. package/.gos/libraries/lucide-icons-policy.md +174 -0
  10. package/.gos/libraries/security-best-practices.md +138 -0
  11. package/.gos/libraries/supabase-stack-kb.md +124 -0
  12. package/.gos/libraries/timer-pattern-spec.md +252 -0
  13. package/.gos/libraries/typeform-pattern-spec.md +204 -0
  14. package/.gos/libraries/ui-guardrails-checklist.md +144 -0
  15. package/.gos/libraries/visual-diff-lenses.md +114 -0
  16. package/.gos/playbooks/audit-streaming-playbook.md +86 -0
  17. package/.gos/skills/adr-tech-decisions/SKILL.md +166 -0
  18. package/.gos/skills/audit-screenshots/SKILL.md +200 -142
  19. package/.gos/skills/cloudflare-pages-setup/SKILL.md +180 -0
  20. package/.gos/skills/figma-print-diff/SKILL.md +170 -0
  21. package/.gos/skills/gos-caveman/SKILL.md +110 -0
  22. package/.gos/skills/gos-compress/SKILL.md +134 -0
  23. package/.gos/skills/gos-compress/scripts/compress.py +346 -0
  24. package/.gos/skills/gos-compress/scripts/setup.py +91 -0
  25. package/.gos/skills/idea-intake/SKILL.md +147 -0
  26. package/.gos/skills/plan-blueprint/SKILL.md +18 -3
  27. package/.gos/skills/plan-to-tasks/SKILL.md +37 -1
  28. package/.gos/skills/prd-from-intake/SKILL.md +94 -0
  29. package/.gos/skills/prototype-orchestrator/SKILL.md +120 -0
  30. package/.gos/skills/registry.json +12 -1
  31. package/.gos/skills/timer-component-pattern/SKILL.md +245 -0
  32. package/.gos/skills/typeform-form-pattern/SKILL.md +210 -0
  33. package/.gos/skills/ui-guardrails/SKILL.md +111 -0
  34. package/.gos/templates/intakeTemplate.md +41 -0
  35. package/.gos/templates/planTemplate.md +25 -4
  36. package/.gos/templates/prdLeanTemplate.md +40 -0
  37. package/.gos/templates/taskTemplate.md +29 -5
  38. package/package.json +1 -1
@@ -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.
@@ -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,75 @@
1
+ # Component Reuse Gate
2
+
3
+ > Disciplina design-to-code aplicada a CADA divergência detectada por `audit-screenshots` (e por
4
+ > `plan-blueprint` Fase 1.3). Antes de virar task de correção, toda divergência que toca uma estrutura
5
+ > reusável passa por: **mapear → checar biblioteca → decidir reuse | create | merge**. O objetivo é
6
+ > nunca corrigir com patch one-off quando a correção certa é uma primitiva compartilhada.
7
+
8
+ ## Por que
9
+
10
+ Corrigir uma tela "na mão" (className solta, JSX duplicado) resolve a tela e multiplica dívida: a próxima
11
+ tela com a mesma table/card/form repete o bug. A correção correta promove (ou reusa) uma primitiva — o
12
+ delta entre telas vira só **dados**, não estrutura.
13
+
14
+ ## Heurística de decisão (score vs biblioteca)
15
+
16
+ Para cada divergência cujo alvo é uma estrutura reusável (table, card, form, list, modal, toolbar):
17
+
18
+ 1. **Mapear** o elemento → nome de componente candidato (estilo `plan-blueprint` Fase 1.3: indexar
19
+ `dirs.components/` + `.stories.tsx`).
20
+ 2. **Rodar `component-dedup`** (ou o equivalente inline: grep nome + comparar props/estrutura/variantes).
21
+ 3. **Decidir** pelo score:
22
+
23
+ | Score vs existente | Decisão | `component_decision` | Ação na task |
24
+ |--------------------|---------|----------------------|--------------|
25
+ | 71–100% (essencialmente o mesmo) | **REUSE** | `reuse` | `component_target` = primitiva existente; muda só dados/props |
26
+ | 31–70% (overlap parcial) | **MERGE** | `merge` | combinar features → estender a primitiva (nova variant/prop) |
27
+ | 0–30% (não existe equivalente) | **CREATE** | `create` | criar primitiva nova no DS; task de criação antes do uso |
28
+
29
+ A decisão grava no frontmatter da task (`component_decision`, `component_target`). REUSE/MERGE referenciam
30
+ o path da primitiva; CREATE gera task de criação que precede a task de uso (`depends_on`).
31
+
32
+ ## Padrão de referência: DataTable + TanStack (Fractus)
33
+
34
+ Caso canônico de **REUSE**. No Fractus, `src/components/ui/data-table.tsx` é a primitiva única:
35
+
36
+ ```tsx
37
+ interface DataTableProps<TData, TValue> {
38
+ columns: ColumnDef<TData, TValue>[]
39
+ data: TData[]
40
+ loading?: boolean
41
+ emptyMessage?: string
42
+ tableRef?: React.MutableRefObject<Table<TData> | null>
43
+ }
44
+ ```
45
+
46
+ Cada tela define só `columns` + `data` e compõe a primitiva:
47
+
48
+ ```tsx
49
+ // negocios-table.tsx — NÃO reimplementa <table>, reusa DataTable
50
+ const columns = getNegociosColumns(projectId, canDelete, onDelete, deletingId)
51
+ return <DataTable columns={columns} data={negocios} loading={loading} emptyMessage="Nenhum negócio encontrado" />
52
+ ```
53
+
54
+ `negocios-table`, `funders-table`, `impacto-tab-content` — **uma primitiva, N usos**. O que muda entre
55
+ telas: **as colunas (header + cell render) e os dados das rows**. Nada de estrutura de tabela duplicada.
56
+
57
+ **Regra prática para o audit:** divergência em qualquer tabela →
58
+ - existe `DataTable` (ou equivalente) no DS? → **REUSE**: a correção é nas `columns` daquela tela OU na
59
+ primitiva (se o defeito é compartilhado). Nunca um `<table>` novo na página.
60
+ - o defeito é da primitiva (afeta todas as telas)? → corrigir na primitiva (1 task, `component_target` = `data-table.tsx`).
61
+ - precisa de comportamento que a primitiva não suporta? → **MERGE** (nova prop/variant na primitiva).
62
+
63
+ O mesmo raciocínio vale para Card, Form, Toolbar, EmptyState etc.: se a estrutura se repete ou pode se
64
+ repetir, ela é primitiva; a tela só injeta dados.
65
+
66
+ ## Saída na task
67
+
68
+ ```yaml
69
+ component_decision: reuse # reuse | create | merge
70
+ component_target: src/components/ui/data-table.tsx
71
+ override_target: NegociosTable:area-column # quando a correção é cosmética de uso
72
+ ```
73
+
74
+ A task descreve a correção em termos de **dados/props da primitiva** (REUSE), **extensão da primitiva**
75
+ (MERGE) ou **nova primitiva + adoção** (CREATE) — seguindo o modelo O QUE / ONDE / COMO / POR QUE.
@@ -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).