Skip to main content

Architectural Decision Records (ADRs)

Decisões arquiteturais do GarraIA seguem o formato MADR simplificado. Cada ADR é imutável após merge — se a decisão mudar, escreve-se um novo ADR que superseda o antigo.

Quando escrever um ADR​

Per CLAUDE.md regra 8: sempre antes de uma decisão arquitetural irreversível. Exemplos:

  • Escolha de database backend
  • Escolha de vector store
  • Protocolo de autenticação
  • Framework de UI
  • Runtime de sandbox
  • Estratégia de deployment

Se a decisão é fácil de reverter (ex.: qual biblioteca de logging usar), ADR é overkill.

Convenção de nome​

NNNN-slug-em-kebab-case.md

  • NNNN — sequencial monotônico. Primeira decisão é 0001.
  • slug — identificador humano curto.

Formato mínimo​

Cada ADR tem essas seções:

  1. Status — proposed | accepted | superseded | deprecated
  2. Context and Problem Statement — o que estamos decidindo e por quê
  3. Decision Drivers — critérios ponderados
  4. Considered Options — alternativas com prós/contras
  5. Decision Outcome — a escolha + rationale
  6. Consequences — positive / negative / neutral
  7. Links — issues, PRs, benchmarks, docs externos

Rationale curta ("porque sim") é sinal de que a decisão não deveria ser ADR — ou que falta pensamento.

Index​

#TitleStatusDateIssue
0001Local inference backend (candle vs mistral.rs vs llama.cpp)✅ accepted2026-04-21GAR-371
0002Vector store (pgvector vs lancedb vs qdrant embedded)✅ accepted2026-04-21GAR-372
0003Database para Group Workspace (Postgres vs SQLite)✅ accepted2026-04-13GAR-373
0004Object storage (S3 compatible, MinIO default)✅ accepted2026-04-21GAR-374
0005Identity Provider (BYPASSRLS role + Argon2id + HS256 + lazy upgrade)✅ accepted2026-04-13GAR-375
0006Search strategy (Postgres FTS → Tantivy → Meilisearch)✅ accepted2026-04-21GAR-376
0007Desktop frontend (HTML+Vanilla baseline → SolidJS trigger)✅ accepted2026-04-21GAR-377
0008Doc collaboration (Tier 1 single-editor → y-crdt Tier 2)✅ accepted2026-04-21GAR-378
0009Web Console design system "Garra Glass" (HTML+CSS custom tokens, zero CDN)✅ accepted2026-05-14GAR-607
0010Garra Learning Agent / Self-Improving Operations Manual✅ accepted2026-05-17GAR-641
0011GarraMaxPower — Native Agent-Advanced Mode (garra max-power)✅ accepted2026-05-24GAR-492
0012Persona Amistosa do Garra — tom de voz padrão (inspirado em OpenHuman)✅ accepted2026-06-01GAR-771
0013Recorrência de agendamento em duas camadas (cron no SQLite pessoal + RRULE no workspace)✅ accepted2026-08-29plan 0355
0014Superfície Anthropic-compatible no gateway (POST /v1/messages)✅ accepted2026-08-30plan 0360
0015Toolchain de empacotamento Linux (nfpm .deb/.rpm + appimagetool AppImage)✅ accepted2026-08-31plan 0361
0016Garra Mobile — Termux como camada de execução (local-first no Android, gerações v0-v3)✅ accepted2026-09-02ADR + release v0.3.6
0017Camada de apresentação do CLI (UiEvent + TerminalRenderer)✅ accepted2026-09-05#942
0018O que fazer com o crate garraia-embeddings📋 proposed2026-09-07#949
0019Confinamento das tools — PR_SET_DUMPABLE agora, Landlock depois✅ accepted2026-09-09#1084
0020Crate garraia-hardware — abstração de dispositivos físicos✅ accepted2026-09-11#1124
0021GarraIA Desktop — Control Center (garraia desktop)✅ accepted2026-09-14#1181
0022z-ai/glm-5.3-flash via OpenRouter como LLM padrão; local como segunda opção✅ accepted2026-09-13#1180
0023WhatsApp pessoal por dispositivo vinculado (garra whatsapp) — bridge Node/Baileys por stdio + sessão cifrada✅ accepted2026-09-16#1238
0024Perfis de execução standard e isolated-pod — poder total dentro do pod, nada implícito fora; dono do WhatsApp por identidade declarada; raiz do MCP filesystem no workspace✅ accepted2026-09-21#1329
0025Classes de capacidade, teto por principal e Access Policy v2 do WhatsAppAccepted2026-09-26
0026Schema de billing: plan / subscription / invoice no workspace (Garra Cloud; so schema)✅ accepted2026-10-22#1652

Legenda: ✅ accepted · 📋 proposed (aguardando execução) · 🔒 blocked (issue Linear aguardando este ADR ser escrito).

Histórico de supersessões​

Nenhuma até o momento.