vek1 — gaps e riscos
Gaps e riscos do VEK1
Análise de lacunas. Versão prévia (2026-05-19) tinha vários gaps que viraram features — atualizado pós-sprint api-first.
Resolvidos desde 2026-05-19
| Gap antigo | Como resolveu |
|---|---|
| GAP-1 ERP/estoque ao vivo | ✅ PR #62 bidirectional stock sync (outbound HMAC + inbound webhook). ERP customer-owned conecta via store_stock_sync_settings. |
| GAP-2 Processamento PDF/Word placeholder | ✅ vek1-api /process-file extrai texto real (PDF chunking via pdfplumber + CSV). Embeddings reais via bge-m3. |
| GAP-4 Multi-usuário | 🟡 Ainda 1:1 user:company. Não trabalhado. |
| GAP-5 Atualização automática catálogo | ✅ Stock sync bidirectional cobre o caso. CSV manual continua opção. |
| GAP-6 Analytics conversa | 🟡 Tem messages_history + lead_events + audit_log + token_usage, mas dashboard de conversation analytics não construído. |
| GAP-8 Schema não reproduzível | 🟡 Mudou pra db:push --force direto (zero migrations versionadas). Agent schema-migrator cuida do fluxo. Reproduzibilidade depende de schema.ts + init/01-init.sql + recreate-indexes.ts rodados em ordem. |
| GAP-9 Test coverage mínima | 🟡 Vitest 4. Orders e2e + state machine + stock sync + abacate-pay + auth-adapter cobertos. UI components ainda quase descobertos. |
| GAP-10 Migração API → Actions parada | ✅ PRs #65–#70 cutover completo pra apiClient. lib/supabase.ts virou thin shim. |
| GAP-11 Multi clients Supabase | ✅ Supabase removido inteiro. |
| GAP-16 Segurança webhook WhatsApp | 🟡 Sem signature ainda no webhook Evolution (Evolution não assina). Mitigação: webhook só processa shapes esperados (PR #52, #54, #55) + fromMe=true filter + LID handling. Risco residual: token de URL pública se vazar. |
🔴 Gaps críticos / Alta severidade
GAP-3 Billing Stripe não implementado
Severidade: Crítica para negócio
Impacto: Beta gratuito custa do bolso. DeepSeek, VPS, Evolution, Resend sem cobrança aos lojistas. Não escalável.
Estado: Spec detalhada em pricing-design + arquivo docs/superpowers/specs/2026-05-20-pricing-stripe-design.md. Aguardando aprovação user pra implementar.
Caminho: 3 tiers Stripe + metered overage + topup com bônus 50%. Schema 4 tabelas novas + alter token_usage. Worker reporting cron 5min. UI em /settings#billing + /pricing público.
GAP-17 (NOVO) DATABASE_URL plaintext entre Vercel e VPS
Severidade: Alta segurança
Impacto: Senha do Postgres trafega em texto claro na internet em cada query Vercel. Sniffable.
Estado: sslmode=disable ainda. TLS pendente — opções: cert direto no Postgres + ajuste pg_hba, ou PgBouncer/nginx stream com TLS termination.
GAP-18 (NOVO) .env.docker no histórico vek1-api
Severidade: Alta segurança
Impacto: Commit bf11231 ainda carrega OPENAI_API_KEY, SUPABASE_ANON_KEY, TOGETHER_API_KEY vazadas. Repo público. Não rotacionadas (pelo menos não documentado).
Caminho: rotate todas as 3 keys + git filter-repo ou git filter-branch pra remover do histórico.
GAP-23 (NOVO) Evolution API (Baileys) é canal não-oficial
Severidade: Alta estratégica
Impacto: Todo WhatsApp do produto roda em Baileys (engenharia reversa) via container Evolution self-hosted. Risco de ban do número a qualquer momento, sem SLA, sem suporte oficial Meta, e bloqueia features novas (templates, flows, interactive messages, click-to-chat ads). Lojistas que escalam não toleram número banido.
Decisão (2026-05-27): migrar pra WhatsApp Cloud API oficial com destino Solution Partner Meta (vek1 paga conversations, cobra plano único com margem). Gate obrigatório: operar como Tech Provider primeiro (Meta exige histórico). Multi-tenant via Embedded Signup desde dia 1 (cada lojista conecta o próprio número, não a Kodama).
Caminho: vek1/whatsapp-cloud-api-migration — 2 trilhas paralelas:
- Trilha A (técnica, ~5-8 semanas): setup Meta → schema dual-provider → client+webhook → app review → embedded signup → templates → piloto → rollout Tech Provider → activation Solution Partner (quando trilha B aprovar)
- Trilha B (Solution Partner application, ~meses): material financeiro+legal+business → customer commitment letters → submissão Meta → entrevista → Solution Partner Agreement → linha de crédito Meta
Trade-offs aceitos: custo per-conversation, janela 24h, templates aprovados pra mensagens proativas, risco de inadimplência lojista, responsabilidade compliance por todos os lojistas.
GAP-13 Sem monitoramento de produção
Severidade: Alta operacional
Impacto: Backend down, webhook quebrado, embeddings falhando — descobre por reclamação do cliente.
Caminho: Sentry/Datadog/Logflare integration. Alert no Slack pra /health degraded. Latency monitor no fluxo WhatsApp.
🟡 Média severidade
GAP-4 Multi-usuário por company
user.id == company_profiles.id. Equipes (dono + marketing + suporte) precisam compartilhar senha. Inviável >2 funcionários.
Caminho: company_members(user_id, company_id, role) + RBAC em assert_owns_* do vek1-api + UI de convite.
GAP-6 Conversation analytics dashboard
Dados existem (messages_history, lead_events, token_usage). Falta UI de:
- Volume conversa / dia / agente
- Taxa de fechamento de order
- Sentiment ou flag "pediu humano"
- Funnel: contato → lead → order → fulfilled
GAP-14 Backup/DR não documentado
Postgres self-hosted. ./pgdata é o único estado. Sem backup automático documentado. Cair o VPS = perda total.
Caminho: cron pg_dump → S3 (MinIO mesmo ou outro), retention policy, restore drill documentado.
GAP-19 (NOVO) Cache auth single-instance
auth_service cache em memória só vale dentro do processo. Se escalar horizontal (multi-replica vek1-api), cache fica inconsistente — login pode falhar após mudança de session.
Caminho: Redis externo (mas mais infra), ou aceitar latência Postgres direto (tirar cache).
🔵 Baixa severidade / Tech debt
GAP-7 Pricing landing ≠ pricing spec
Landing hardcoded R$199/99/49. Spec billing tem Starter R$79 / Pro R$299 / Business R$899. Atualizar landing junto com implementação Stripe.
GAP-15 Onboarding wizard erro handling fraco
Falha em batch upsert mostra inline; user pode mudar step e perder. Tech debt UX.
GAP-20 (NOVO) openai SDK 5 nas deps sem uso
Frontend não chama OpenAI direto. Backend (vek1-api) usa Python SDK. Limpar.
GAP-21 (NOVO) Components soltos em components/ raiz
~25+ arquivos violando convenção components/[feature]/. Reorganizar quando feature toca cada um.
GAP-22 (NOVO) Test coverage UI quase zero
Vitest cobre business logic (orders, stock, auth-adapter). Components React não. Hard pra fazer com Cache Components — tests precisam mocks de cookies/connection.
Resumo
| Severidade | Antes (2026-05-19) | Agora (2026-05-20) |
|---|---|---|
| 🔴 Críticos | 4 | 4 (3 novos: billing, TLS, secrets vazados) |
| 🟡 Médios | 5 | 4 (multi-user, analytics, backup, cache single-instance) |
| 🔵 Baixos | 7 | 5 (pricing drift, onboarding UX, deps cleanup, components org, UI tests) |
Prioridades imediatas:
- Billing Stripe (GAP-3) — bloqueador comercial
- DATABASE_URL TLS (GAP-17) — bloqueador segurança
- Rotate keys vazadas (GAP-18) — bloqueador segurança
- Monitoring (GAP-13) — bloqueador operacional