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
@@ -0,0 +1,144 @@
1
+ # UI Guardrails Checklist (detalhe)
2
+
3
+ > Detalhe expandido de cada item do `ui-guardrails`. Consultar quando uma violacao precisar ser explicada ao usuario.
4
+
5
+ ## A — Estados visuais
6
+
7
+ ### A1 — Loading
8
+ - Tela inteira: skeleton com a estrutura visual (header skeleton, lista de cards skeleton).
9
+ - Componente isolado (ex: botao salvando): spinner inline ou disabled state.
10
+ - Anti-padrao: tela em branco enquanto carrega.
11
+
12
+ Codegen exige no plan:
13
+ ```markdown
14
+ ### Estado: loading
15
+ - Skeleton: 3 cards 240x80px com bg-muted-foreground/10 + shimmer.
16
+ - Trigger: query.isPending
17
+ - Duracao max: 3s antes de error.
18
+ ```
19
+
20
+ ### A2 — Empty
21
+ - Copy explicando POR QUE esta vazio.
22
+ - Ilustracao OU icone grande.
23
+ - CTA primario para sair do empty (criar item, importar, etc.).
24
+ - Anti-padrao: "Nenhum dado" sem nada mais.
25
+
26
+ Codegen exige:
27
+ ```markdown
28
+ ### Estado: empty
29
+ - Copy: "Voce ainda nao tem nenhum projeto. Comece criando um."
30
+ - Icone: FolderPlus 48px text-muted-foreground.
31
+ - CTA: "Criar primeiro projeto" (Button variant=primary).
32
+ ```
33
+
34
+ ### A3 — Error
35
+ - Mensagem clara (nao "erro 500").
36
+ - Acao de recovery (tentar de novo, voltar, contato).
37
+ - Distincao: erro recuperavel vs nao-recuperavel.
38
+
39
+ ```markdown
40
+ ### Estado: error
41
+ - Tipo recuperavel: toast variant=error + retry inline.
42
+ - Tipo nao-recuperavel: tela full com copy + CTA voltar.
43
+ ```
44
+
45
+ ### A4 — Success (quando aplicavel)
46
+ - Toast inline ou success state pos-form.
47
+ - Auto-dismiss em 3-5s OU acao explicita do usuario.
48
+
49
+ ### A5 — Default
50
+ - Estado normal, dados presentes.
51
+
52
+ ## B — Responsividade
53
+
54
+ ### Breakpoints obrigatorios
55
+ - Mobile: <768px (preferencia: comeca daqui — mobile-first).
56
+ - Tablet: 768-1024px.
57
+ - Desktop: 1024-1920px.
58
+
59
+ ### Comportamentos esperados
60
+ - Sidebar -> drawer no mobile.
61
+ - Tabela -> cards no mobile.
62
+ - Drawer right -> bottom sheet no mobile.
63
+ - Tipografia escala (text-base mobile, text-lg desktop ou similar).
64
+
65
+ ### Codegen exige no plan
66
+ ```markdown
67
+ ### Responsividade
68
+ - Mobile: lista vira cards verticais empilhados, sem hover.
69
+ - Tablet: 2 colunas de cards.
70
+ - Desktop: tabela tradicional com hover.
71
+ ```
72
+
73
+ ## C — Acessibilidade
74
+
75
+ ### Roles ARIA
76
+ - `<button>` para acao -> nao usar `<div onClick>`.
77
+ - `<dialog>` ou `role="dialog"` + aria-labelledby para modals.
78
+ - `role="listbox"` + `role="option"` em selects custom.
79
+
80
+ ### Labels
81
+ - Input sem `<label>` visivel: usar `aria-label`.
82
+ - Icon-only button: `aria-label="Fechar"` obrigatorio.
83
+
84
+ ### Focus
85
+ - Modal aberto: focus vai para primeiro elemento focavel.
86
+ - Modal fechado: focus volta para trigger.
87
+ - Tab order segue ordem visual.
88
+ - Focus indicator distinto de hover (outline 2px ring-primary).
89
+
90
+ ### Contraste
91
+ - AA: 4.5:1 texto, 3:1 UI.
92
+ - Erro inline NAO so vermelho — adicionar icone/texto "Erro:".
93
+
94
+ ## D — Tokens do DS
95
+
96
+ ### Cores
97
+ - OK: `bg-primary`, `text-foreground`, `border-border`.
98
+ - Anti: `bg-[#3b82f6]`, `text-blue-500` quando primary existe.
99
+
100
+ ### Spacing
101
+ - OK: `gap-2`, `p-4`, `mt-6`.
102
+ - Anti: `gap-[7px]`, `p-[13px]`.
103
+
104
+ ### Typography
105
+ - OK: `text-sm`, `font-semibold`, `leading-tight`.
106
+ - Anti: `text-[13px]`, `tracking-[0.02em]` quando token existe.
107
+
108
+ ### Radius
109
+ - OK: `rounded`, `rounded-md`, `rounded-lg`.
110
+ - Anti: `rounded-[7px]`.
111
+
112
+ ### Excecoes permitidas (com justificativa)
113
+ - Animacao especifica nao-mapeada: `[animation-delay:120ms]` OK.
114
+ - Posicionamento dinamico: `top-[calc(100%+8px)]` OK.
115
+
116
+ ## E — Interacao
117
+
118
+ ### Trigger declaration
119
+ Cada elemento interativo precisa:
120
+ - Trigger: o que dispara (click, hover, focus, keypress, mount, query)
121
+ - Acao: que callback/mutation roda
122
+ - Resultado: qual estado muda + UI feedback
123
+
124
+ ### Edge cases obrigatorios
125
+ - Double-click rapido em CTA -> debounce 300ms ou disabled durante mutation.
126
+ - Mutation lenta (>3s) -> mostrar loading inline ou progress.
127
+ - Mutation falha -> rollback ou error state com retry.
128
+ - Concorrencia (2 usuarios editando) -> conflict resolution declarado.
129
+
130
+ ## Self-check rapido
131
+
132
+ Antes de submeter tela para codegen:
133
+
134
+ ```
135
+ [ ] A1 loading state declarado e visualmente coerente?
136
+ [ ] A2 empty state existe + CTA primaria?
137
+ [ ] A3 error state com recovery?
138
+ [ ] B responsividade nos 3 breakpoints?
139
+ [ ] C aria-label em icon buttons + focus visivel?
140
+ [ ] D 0 valores hardcoded fora do DS?
141
+ [ ] E todos os triggers tem acao + resultado + edge cases?
142
+ ```
143
+
144
+ Falhou em algum -> NAO codar ainda. Volte ao plano.
@@ -0,0 +1,114 @@
1
+ # Visual Diff Lenses
2
+
3
+ > Referencia das 6 lenses usadas por `figma-print-diff` e `audit-screenshots`. Inspirado em Nielsen Heuristics + design-critique (uxdudu) + WCAG.
4
+
5
+ ## Lens 1 — Layout & hierarquia
6
+
7
+ Pergunta-mestra: "A estrutura espacial bate?"
8
+
9
+ Sub-checks:
10
+ - Containers principais (sidebar, header, footer, main) presentes em ambos?
11
+ - Ordem de filhos dentro de cada container coincide?
12
+ - Proporcoes (sidebar 240px, main 1fr) coerentes?
13
+ - Densidade visual (cards/lista) similar?
14
+
15
+ Severity guide:
16
+ - high: container ausente/extra
17
+ - medium: ordem trocada
18
+ - low: proporcao 10-20% diferente
19
+
20
+ ## Lens 2 — Tokens visuais
21
+
22
+ Pergunta-mestra: "Cor, tipo, espacamento batem com o DS?"
23
+
24
+ Sub-checks:
25
+ - Cor de background dos blocos
26
+ - Cor de texto (primary, secondary, muted)
27
+ - Borders e radius
28
+ - Tipografia (family, size, weight, line-height)
29
+ - Spacing (padding/margin/gap)
30
+ - Shadows e elevations
31
+
32
+ Severity guide:
33
+ - high: cor de acao primaria errada
34
+ - medium: spacing 2x diferente
35
+ - low: radius cosmetico
36
+
37
+ ## Lens 3 — Estados
38
+
39
+ Pergunta-mestra: "Todos os estados estao implementados?"
40
+
41
+ Sub-checks:
42
+ - Loading (skeleton, spinner)
43
+ - Empty (placeholder, CTA)
44
+ - Error (mensagem, recovery)
45
+ - Success (toast, inline)
46
+ - Hover/Focus/Active
47
+ - Disabled
48
+
49
+ Severity guide:
50
+ - high: empty/error nao implementado
51
+ - medium: hover sem feedback
52
+ - low: focus ring cosmetico
53
+
54
+ ## Lens 4 — Conteudo
55
+
56
+ Pergunta-mestra: "Textos e visuais coincidem?"
57
+
58
+ Sub-checks:
59
+ - Textos literais (sem inventar traducao)
60
+ - Icones (mesma lib, mesma variante)
61
+ - Imagens (placeholder vs real)
62
+ - Dados mockados (formato, plausibilidade)
63
+
64
+ Severity guide:
65
+ - high: copy errada que altera significado
66
+ - medium: icone trocado
67
+ - low: lorem ipsum esquecido
68
+
69
+ ## Lens 5 — Interacao (inferida do estatico)
70
+
71
+ Pergunta-mestra: "Affordances batem?"
72
+
73
+ Sub-checks:
74
+ - Cursor pointer onde Figma mostra elemento "clicavel"
75
+ - Botoes com aparencia de botao (nao texto plano)
76
+ - Inputs com aparencia de input (border, placeholder)
77
+ - Tooltips/popovers posicionados corretamente quando visiveis
78
+
79
+ Severity guide:
80
+ - high: botao primario sem aparencia de botao
81
+ - medium: link disfarcado de texto
82
+ - low: cursor em element nao-clicavel
83
+
84
+ ## Lens 6 — Acessibilidade visual
85
+
86
+ Pergunta-mestra: "Acessivel ao olhar?"
87
+
88
+ Sub-checks:
89
+ - Contraste AA (4.5:1 texto, 3:1 UI components)
90
+ - Toque minimo 44x44px em mobile
91
+ - Focus indicator distinto de hover
92
+ - Texto sem so cor (icone + cor para indicar erro)
93
+
94
+ Severity guide:
95
+ - high: contraste reprovado em texto principal
96
+ - medium: toque <44px em mobile
97
+ - low: focus mesmo cor que hover
98
+
99
+ ## Composicao das lenses
100
+
101
+ Ordem fixa: 1 -> 2 -> 3 -> 4 -> 5 -> 6.
102
+
103
+ Por que essa ordem?
104
+ - Layout antes de token (sem layout, token nao importa).
105
+ - Token antes de estado (estado depende de tokens corretos).
106
+ - Estado antes de conteudo (conteudo so faz sentido com estado completo).
107
+ - Interacao depois de conteudo (precisa ver afford).
108
+ - A11y por ultimo (gate final).
109
+
110
+ ## Anti-patterns
111
+
112
+ - Pular lens 3: time esquece estados, codegen sai sem loading/empty/error.
113
+ - Inverter 1 e 2: comeca medindo cor e nao percebe que falta sidebar inteira.
114
+ - Severity hyperinflation: tudo high -> nada e high.
@@ -0,0 +1,86 @@
1
+ # Playbook — Auditoria visual streaming (audit-screenshots)
2
+
3
+ Guia de uso do fluxo de correção visual **plano-primeiro, task-por-insumo**. Confronta o app implementado
4
+ contra o Figma e gera UM plano de correção com tasks escritas na hora — cada divergência passa pelo gate
5
+ de reuso de componente (reuse / create / merge). Substitui o modelo antigo de fila (acumular prints →
6
+ materializar no `close`).
7
+
8
+ ## Quando usar
9
+
10
+ - Você tem N telas com divergências visuais (cola prints, ou aponta rotas) e quer UM plano de fix.
11
+ - Quer auditar sistematicamente um tipo de tela contra o Figma (`validate`).
12
+ - NÃO use para planejar tela nova (use `*plan` / plan-blueprint) nem para executar (use `*execute-plan`).
13
+
14
+ ## Pré-requisitos do workspace
15
+
16
+ 1. `.gos-local/plan-paths.json` configurado (campo `figma_screen_map`; default `docs/figma-screen-map.md`).
17
+ 2. `docs/figma-screen-map.md` — mapa canônico `Rota app ↔ node-id` (contrato tela↔Figma do projeto).
18
+ 3. **Figma MCP** ativo (expected) e **Playwright** disponível (actual, captura do app vivo).
19
+ 4. `progress.txt` na raiz (criado no primeiro `*plan`/`open`).
20
+
21
+ ## Fluxo end-to-end
22
+
23
+ ### 1. Abrir o plano (uma vez por auditoria)
24
+
25
+ ```
26
+ *audit-screenshots open [SLUG]
27
+ ```
28
+
29
+ Cria `docs/plans/PLAN-NNN-fix-<SLUG>/` com `plan.md` em **`status: aberto`** (draft) + `context.md` +
30
+ `tasks/` vazio + `audit-evidence/`. **Não** roda check-plan (o plano ainda é rascunho).
31
+
32
+ ### 2. Adicionar insumos (quantos quiser, a qualquer momento)
33
+
34
+ ```
35
+ # Cole o print + contexto, OU aponte a rota para o Playwright capturar:
36
+ *audit-screenshots add "a aba negocios esta sem a coluna Area" # + imagem colada
37
+ *audit-screenshots add /dashboard/projetos/123?tab=negocios # captura via Playwright
38
+ ```
39
+
40
+ Cada insumo, NA HORA: resolve tela no mapa → captura actual (print ou Playwright) → pull Figma (MCP) →
41
+ confronta via `figma-print-diff` (single-pass, lenses 1-6) → **gate de reuso** por divergência estrutural
42
+ → escreve `tasks/T-NN-*.md` (`status: pendente`) com evidência anexada. Sem fila, sem `close` no fim.
43
+
44
+ ### 3. (Opcional) Sweep de validação por tipo de tela
45
+
46
+ ```
47
+ *audit-screenshots validate listagem # todas as telas tipo "listagem" no mapa
48
+ *audit-screenshots validate --all # varre o mapa inteiro
49
+ ```
50
+
51
+ Itera o `figma-screen-map.md`, captura Playwright + pull Figma, confronta e escreve tasks — mesmo fluxo do `add`.
52
+
53
+ ### 4. Revisar e finalizar
54
+
55
+ ```
56
+ *audit-screenshots list # tasks escritas ate agora + decisoes de componente
57
+ *audit-screenshots finalize # flip status: pendente -> roda check-plan.js -> pronto p/ execute-plan
58
+ ```
59
+
60
+ `finalize` valida que cada task é self-contained, vira o plano para `status: pendente`, dispara
61
+ `ui-guardrails` e roda `check-plan.js` (gate determinístico). Exit 0 → o plano é input de `*execute-plan`.
62
+
63
+ ```
64
+ *execute-plan PLAN-NNN-fix-<SLUG>
65
+ ```
66
+
67
+ `*audit-screenshots discard` aborta o plano aberto a qualquer momento.
68
+
69
+ ## Gate de reuso de componente (design-to-code)
70
+
71
+ Cada divergência em estrutura reusável (table, card, form, list…) NÃO vira patch one-off. O fluxo mapeia o
72
+ elemento → checa a biblioteca (`component-dedup`) → decide **reuse | create | merge** (ver
73
+ `libraries/component-reuse-gate.md`). A task grava `component_decision` + `component_target`.
74
+
75
+ **Exemplo (Fractus):** divergência numa tabela → a primitiva `DataTable` (TanStack) já existe →
76
+ decisão **reuse**. A correção é nas `columns`/dados daquela tela OU na própria primitiva (se o defeito é
77
+ compartilhado) — nunca um `<table>` novo. `negocios-table`, `funders-table` etc. = 1 primitiva, N usos.
78
+
79
+ ## Por que mudou (vs modelo de fila)
80
+
81
+ | Antes (fila) | Agora (streaming) |
82
+ |--------------|-------------------|
83
+ | `add` acumula em `audit-session.json` | `open` cria plano draft; o diretório É o estado |
84
+ | Tasks só nascem no `close` (perda de contexto) | Task escrita NA HORA, por insumo, com evidência |
85
+ | Correção = patch da tela | Correção passa pelo gate de reuso (reuse/create/merge) |
86
+ | check-plan no `close` | check-plan só no `finalize` (plano `aberto` é estado válido) |
@@ -0,0 +1,166 @@
1
+ ---
2
+ name: adr-tech-decisions
3
+ description: >
4
+ Decide stack tecnico de um PRD interativamente, com KB embutido de Cloudflare (Workers,
5
+ Pages, D1, R2, KV, DO, Realtime via WebSocket) e Supabase (Auth, Postgres, Realtime).
6
+ SEMPRE pergunta ao usuario as decisoes-chave antes de chumbar — MVPs descartaveis tem
7
+ estrategia diferente de produtos continuos. Output: docs/adr/ADR-NNN-<slug>.md.
8
+ argument-hint: "<PRD-id> [--cloudflare-only] [--with-supabase] [--websocket]"
9
+ allowedTools: [Read, Glob, Grep, Bash, Write, Edit, AskUserQuestion]
10
+ sourceDocs:
11
+ - libraries/cloudflare-stack-kb.md
12
+ - libraries/supabase-stack-kb.md
13
+ - templates/adr-tmpl.yaml
14
+ use-when:
15
+ - tem-se PRD pronto e precisa decidir arquitetura
16
+ - antes de plan-blueprint quando o projeto e novo
17
+ - quando ha duvida entre Cloudflare-only vs hibrido com Supabase
18
+ do-not-use-for:
19
+ - projetos que ja tem stack.md definido (use plan-blueprint direto)
20
+ - mudanca pontual de lib (registrar via comment no plan)
21
+ metadata:
22
+ category: architecture
23
+ ---
24
+
25
+ Voce esta executando como **Arquiteto Pragmatico** via skill `adr-tech-decisions`. Le PRD, faz 5-7 perguntas direcionadas ao usuario (todas em PT-BR, sem jargao quando possivel), consulta KB embutido e produz ADR + stack.md compatibilizado com plan-blueprint.
26
+
27
+ ## Contrato
28
+
29
+ 1. Input obrigatorio: `PRD-id`. Resolver `docs/prd/<PRD-id>/prd.md`. Ausente -> abortar.
30
+ 2. Ler `descartavel` do frontmatter PRD — afeta perfil de decisoes (ver matriz).
31
+ 3. SEMPRE perguntar ao usuario antes de fechar (regra do dono do framework: `SEMPRE pergunte ao usuario`).
32
+ 4. Output: `docs/adr/ADR-NNN-<slug>.md` + `docs/stack.md` (criar ou atualizar).
33
+ 5. Apos ADR: `docs/stack.md` fica disponivel para `plan-blueprint` consumir.
34
+
35
+ ## Matriz de decisao por perfil
36
+
37
+ ### Perfil A — Descartavel (uso unico, vida util semanas)
38
+
39
+ Default proposto (nao chumbar — pergunte):
40
+ - Frontend: Vite + React + TypeScript + Tailwind + shadcn/ui
41
+ - Hosting: Cloudflare Pages (free, deploy via git)
42
+ - Backend: NENHUM (somente front, dados em localStorage ou Cloudflare KV se publico)
43
+ - Auth: nenhuma OU Cloudflare Access (free para 50 users, sem codigo)
44
+ - Realtime: nenhum
45
+ - DB: nenhum OU Cloudflare KV (free 100k reads/dia)
46
+
47
+ ### Perfil B — Continuo, simples (CRUD basico, ate 1k users)
48
+
49
+ Default proposto:
50
+ - Frontend: Vite + React + TS + Tailwind + shadcn/ui em Cloudflare Pages
51
+ - Backend: Cloudflare Workers (free 100k reqs/dia)
52
+ - DB: Cloudflare D1 (free 5GB) OU Supabase Postgres (free 500MB)
53
+ - Auth: Supabase Auth (free 50k MAU)
54
+ - Realtime: nenhum
55
+ - Storage: Cloudflare R2 (free 10GB)
56
+
57
+ ### Perfil C — Continuo, realtime (chat, dashboard ao vivo, jogo)
58
+
59
+ Default proposto:
60
+ - Frontend: idem perfil B
61
+ - Backend: Cloudflare Workers + Durable Objects (free 1M ops/dia) — para WebSocket
62
+ - Realtime: WebSocket via DO (sem servidor separado)
63
+ - DB: Supabase Postgres + Realtime (channels via Postgres logical replication)
64
+ - Auth: Supabase Auth
65
+
66
+ ## Perguntas obrigatorias (ordem)
67
+
68
+ Sempre perguntar via `AskUserQuestion`:
69
+
70
+ 1. "Esse produto e pra usar uma vez ou rodar continuo?" -> define perfil A vs B/C.
71
+ 2. "Vai precisar de login? (sim/nao/talvez)" -> define auth.
72
+ 3. "Vai ter dados que mudam ao vivo (chat, notificacao em tempo real)?" -> define realtime.
73
+ 4. "Tem orcamento mensal pra infra ou precisa caber 100% no free tier?" -> define limites.
74
+ 5. "Algum lock-in que voce QUER ter ou EVITAR? (ex: ja uso Supabase no outro projeto)" -> overrides.
75
+ 6. (Se perfil C) "Quantos usuarios simultaneos voce espera ter conectados ao mesmo tempo?" -> dimensiona DO.
76
+ 7. "Quer separar frontend e backend em projetos diferentes ou monolito?" -> define repo strategy.
77
+
78
+ ## Pre-flight
79
+
80
+ 1. Verificar se KB esta disponivel: `libraries/cloudflare-stack-kb.md` e `libraries/supabase-stack-kb.md`. Se ausentes, abortar com instrucao para rodar setup do G-OS.
81
+ 2. Resolver `dirs.adr` via `.gos-local/plan-paths.json` (default: `docs/adr/`).
82
+
83
+ ## Output (ADR-NNN-<slug>.md)
84
+
85
+ Use template `templates/adr-tmpl.yaml` mas exporta como markdown:
86
+
87
+ ```markdown
88
+ # ADR-NNN: <decisao principal>
89
+
90
+ **Status**: accepted
91
+ **Date**: <iso>
92
+ **PRD**: PRD-NNN-<slug>
93
+ **Perfil**: A (descartavel) | B (continuo simples) | C (realtime)
94
+
95
+ ## Contexto
96
+ <2-3 paragrafos, citando trechos do PRD que motivam>
97
+
98
+ ## Decisoes (resumo executivo)
99
+
100
+ | Camada | Escolha | Alternativa rejeitada | Motivo |
101
+ |--------|---------|----------------------|--------|
102
+ | Frontend | Vite + React + TS + Tailwind + shadcn | Next.js | <motivo> |
103
+ | Hosting | Cloudflare Pages | Vercel | <motivo> |
104
+ | Backend | Cloudflare Workers | Express+VPS | <motivo> |
105
+ | DB | <D1\|Supabase\|nenhum> | <alternativa> | <motivo> |
106
+ | Auth | <opcao> | <alternativa> | <motivo> |
107
+ | Realtime | <DO+WS\|Supabase Realtime\|nenhum> | <alternativa> | <motivo> |
108
+
109
+ ## Constraints respeitados
110
+ - Free tier: <lista de limites e como ficamos abaixo deles>
111
+ - Descartavel: <true/false> -> <decisoes simplificadas tomadas>
112
+
113
+ ## Consequencias
114
+ - (+) <positivas>
115
+ - (-) <negativas>
116
+ - (~) <neutras>
117
+
118
+ ## Proximo passo
119
+ - Atualizar `docs/stack.md` (ja feito automaticamente).
120
+ - Rodar `*plan-blueprint <tela>` para primeira tela.
121
+ ```
122
+
123
+ ## Saida secundaria (docs/stack.md)
124
+
125
+ Atualizar/criar stack.md com formato compativel com `plan-blueprint`:
126
+
127
+ ```markdown
128
+ # Stack do projeto
129
+
130
+ ## Frontend
131
+ - Framework: <Vite + React + TS>
132
+ - Styling: Tailwind v4 + shadcn/ui + tv()
133
+ - State: <local|zustand|jotai>
134
+ - Data fetching: <fetch|swr|tanstack-query>
135
+
136
+ ## Backend
137
+ - Runtime: <Cloudflare Workers|nenhum>
138
+ - DB: <D1|Supabase Postgres|nenhum>
139
+ - Auth: <opcao>
140
+ - Realtime: <opcao>
141
+
142
+ ## Hosting
143
+ - Frontend: Cloudflare Pages
144
+ - Backend: <Cloudflare Workers|N/A>
145
+
146
+ ## Bindings (Cloudflare)
147
+ - D1: <DB_NAME> (se aplicavel)
148
+ - KV: <NAMESPACE> (se aplicavel)
149
+ - R2: <BUCKET> (se aplicavel)
150
+ - DO: <CLASS_NAME> (se aplicavel)
151
+
152
+ ## Decisoes-chave (refs ADRs)
153
+ - ADR-NNN: <decisao>
154
+ ```
155
+
156
+ ## Regras criticas
157
+
158
+ - **NUNCA chumbar tecnologia sem perguntar**. Mesmo que o perfil indique padrao, perguntar ao usuario antes de escrever ADR.
159
+ - **Free tier first**: para descartaveis, recusar opcoes pagas mesmo que tecnicamente melhores.
160
+ - **Linkar com plan-blueprint**: o `arch_change` flag dele depende do stack.md gerado aqui.
161
+ - **Anti-overengineer**: para perfil A, recusar microservicos, kubernetes, message queues, observability stack — limite e localStorage + fetch.
162
+ - **Citar KB**: ao recomendar uma tecnologia, citar limite especifico do KB ("Workers free = 100k reqs/dia, suficiente para 1k users ativos").
163
+
164
+ ## Input
165
+
166
+ $ARGUMENTS