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)