K
Kodama Vault
knowledge hub
Vault
HomeBoardMap of ContentChatConversasAuditoria
Agentes
AgentsIssuesTerminalPreviews
Sistema
MCPSetup MCPSettings
Brain
Global agent instructions
Análise custos migração — evitar senha no payloadLevantamento fluxo registro + duplicados StripeRelatório segurança + pentes finos (Cláudio)Revisão security concerns e race conditionsMagic link / esqueceu senha via SupabaseCorrigir erros pós-upgrade TypeScriptTestar PRs do agente Vault para mergeAnálise de 3 issues para iniciarErro no terminal do VSCodePR #173 — aguardando aprovação do LeoTestar fluxo ponta a ponta — criação de clients no StripePR #172 — testar e subir correção de funções deprecatedPitch de vendas SaaS — agendar call de conversãoOrganizar issues e bugs rápidos para a semanaMerge PR cadastro-novo — funcionalidades e correçõesCorrigir bugs PR #173 e #172 — image domainsPR mesosóico — página de acesso mobile + segurança OTPRefatoração de códigos — PR #202Ajustes em PRs abertos de ontemEstudo de jornada de compra e técnicas de fechamentoDefinir preço e entregável do produtoProspecção de reuniões para esta semanaAgente anti AI slop — centralização de conhecimento ConnfitPR #179 — resolver conflitos e erros de teste CLIAlinhamento de preços e usos da ConffitFix adicional para PR #183 — perfil do usuárioCorrigir estilização da Connfit para identidade visualSubir modificações no copy da ConnfitCriação de 4 campanhas no Meta AdsRevisão de PRs do GilinesExploração do Roblox EditorRelatório João — devolutiva TikTok ShopReunião presencial Zassi Uniformes — diagnóstico automaçõesCriar repositório de diagnósticos e relatórios de entrevistasDiagnóstico da ZassiGeração de relatórios para reuniões de fechamentoProposta Zassi — apresentação amanhãProspecção — Clínica Odontológica Dr. But
VPS Hermes — acesso e estrutura
Always Commit Push DeployHermes Voice GeminiHermes VPSKodama Prospects TrackerMEMORYObsidian VaultRoblox Mining Sim
OpenSpec -- Spec-Driven Development no VaultPlano de Teste — OpenSpec Vault Persistence
CaumzitoNyxzZanini
vek1-api — arquiteturavek1-api — contextovek1-api — decisões técnicasvek1-api — catálogo de endpointsvek1-api — gotchasvek1-api — integrações externasvek1-api — atividade recente
Claude Code — Setup MCP VaultClaude Desktop — Setup MCP Vault (remote)VS Code + Copilot — Setup MCP Vault
Skill — Carousel Designer (Paper Style)
Standup 2026-05-14Standup 2026-05-15Standup 2026-05-16Standup 2026-05-17Standup 2026-05-18Standup 2026-05-19Standup 2026-05-20Standup 2026-05-21Standup 2026-05-22Standup 2026-05-25Standup 2026-05-26Standup 2026-05-27Standup 2026-05-28Standup 2026-05-29Standup 2026-06-01Standup 2026-06-02Standup 2026-06-03Standup 2026-06-05Standup 2026-06-11Standup 2026-06-15Standup 2026-06-16Standup 2026-06-17Standups
MOCWelcome
v0.3
K
Kodama Vault
brain / projects / vek1-api

vek1-api — decisões técnicas

Decisões técnicas

Postgres+pgvector self-hosted (não Supabase / não Neon)

  • Stack VPS já lotada (lunacrm, mimic, vault, etc.); 1 container vs ~8 do Supabase self-host
  • pgvector 0.8.2 cobre busca semântica sem dependência cloud
  • Backup pendente (gap conhecido)

bge-m3 1024 dim (não OpenAI text-embedding-3-small 1536)

  • Multilingual com força em PT-BR (modelo certificado pra PT/EN/ES)
  • 1024 dim reduz storage/index size sem perda relevante de qualidade pra catálogos PME
  • Self-hosted via Ollama — zero custo recorrente

DeepSeek (não OpenAI / Anthropic / outros)

  • Custo bem menor (~10x mais barato que GPT-4o-mini com qualidade similar pra PT-BR)
  • API OpenAI-compatible — zero refactor além de base_url
  • Function calling completo (compatível com tool calling protocol da OpenAI)
  • Trade-off: latência ~1.9s sem tools (vs 0.8s GPT-4o-mini), mas aceitável pra WhatsApp

psycopg2 síncrono (não asyncpg / não SQLAlchemy)

  • Handlers FastAPI já síncronos — refactor pra async daria churn enorme sem ROI claro
  • ThreadedConnectionPool cobre concorrência de tier-1 da PME (50-100 req/s)
  • Trade-off: blocking I/O por request — não vai escalar pra 1000s req/s sem rework. Aceitável pro tamanho atual.

Per-domain routers com try/except ImportError no main.py

  • Routers carregados lazy; falha de import logada como warning, não trava startup
  • Permite deploy parcial (ex: novo router buggy não derruba auth/orders existentes)
  • Trade-off: bugs de import passam silenciosos pro user (vê 404 em vez de stack). Mitigado por logs.

Token scope segregation (3 tokens isolados)

  • INTERNAL_API_TOKEN (app) — domínios normais
  • INTERNAL_AUTH_TOKEN — só /internal/auth/* (Better Auth)
  • INTERNAL_WEBHOOK_TOKEN — webhooks (email, AbacatePay relay)
  • Comprometimento de um escopo não dá acesso aos outros
  • Fallback: app token serve pros 3 se dedicados ausentes (deploy parcial)
  • Constant-time compare via hmac.compare_digest

Pydantic strict (extra="forbid") em todos endpoints

  • 422 explícito se cliente manda campo desconhecido (anti-typo)
  • Anti version-drift entre vek1 e vek1-api: schema mismatch falha rápido
  • Trade-off: precisa coordenar updates de shape — vek1 e vek1-api precisam deploy junto se body schema mudar. Mitigação: deploys quase sempre simultâneos (single owner).

Cache em memória pro auth (não Redis)

  • Singleton dict no processo, TTL curto (findUserByEmail, findSessionByToken)
  • Reduz round-trip Postgres em hot path login
  • Single instance container — cache fica consistente
  • Trade-off: se escalar horizontal, cache fica inconsistente. Hoje single replica, ok. Próximo gap.

consumeOne(verification) atomic via DELETE..RETURNING

  • Elimina race PKCE (find + delete tem janela)
  • Single round-trip Postgres
  • Implementado em auth_service.consume_verification(identifier, value) — Better Auth chama via adapter

Audit log via BackgroundTasks (não inline)

  • audit_service.log_audit(...) chamado com bg.add_task(...) — não bloqueia request
  • Trade-off: se request falhar antes do bg rodar, audit não grava. Aceitável (audit é nice-to-have, não SLA).

Function calling com 5 iterações máx

  • LLM pode chamar várias tools em sequência (ex: search → get_details → create_order)
  • Limite 5 evita loop infinito de hallucinação
  • Trade-off: ocasionalmente trunca um fluxo complexo. Logs ajudam diagnosticar.

Skip backend persistence se lead_id present

  • vek1 já grava em messages_history (e fileira extract-lead)
  • Vek1-api gravava também → dupla escrita
  • dd2ac9f removeu — vek1-api só grava se NÃO veio do vek1 (ex: chamada direta de teste sem lead_id)

dry_run no /chat

  • dry_run: true simula side-effect tools (create_order, confirm_shipping) sem chamar HTTP
  • Usado em tests/test_function_calling.py pra rodar prompts contra DeepSeek real sem poluir DB
  • Sem dry_run, tests precisariam mock DeepSeek (frágil)

slowapi rate limit opcional

  • try: import slowapi — não trava dev sem pip install slowapi
  • Em prod, configurado em hot paths (chat, embed) com @limiter.limit("60/minute")
  • Trade-off: rate limit in-memory por IP — não distribuído. Single replica ok.

GZip middleware ≥1KB

  • Comprime responses ≥1KB
  • Reduz egress Vercel/VPS em endpoints com listas grandes (orders/leads/messages_history)
  • Melhora TTFB perceptível em dashboards

Logging verboso (com emojis)

  • 📥 request, 📤 response, ✅ success, ❌ erro, 🚨 exceção crítica
  • Stack trace completo em exceções não tratadas
  • Trade-off: logs gordos — LOG_LEVEL=INFO em dev, considerar WARNING em prod se egress de logs ficar caro

init/01-init.sql versionado no repo

  • pgvector ext + HNSW indexes + RPC match_documents_test
  • Aplicado no init do container Postgres (/docker-entrypoint-initdb.d)
  • Reproduzibilidade do schema parcial (Drizzle schema é o outro pedaço — vide vek1/data-model)

Sem ORM (raw SQL via psycopg2)

  • Toda query escrita manual em services/*_service.py
  • Vantagem: controle total (pgvector queries complexas, JOIN com filtro custom), zero overhead ORM
  • Trade-off: typing manual via TypedDict / dict; refactor de schema dá churn (achar todas as queries que tocam coluna X)

Tests pytest com integration suite real

  • tests/test_function_calling.py — chama DeepSeek real (não mock) + Postgres test DB
  • Valida prompt behavior (anti-skip create_order)
  • Trade-off: tests lentos (~30s suite full) + custo DeepSeek minimal mas real. Aceitável.

Single image Dockerfile (python:3.10-slim)

  • Imagem ~250MB final
  • Sem multi-stage build (não vale a pena pro tamanho)
  • Restart unless-stopped (compose) — reinicia automático em crash
notas relacionadas
carregando…