Skip to content

docs(audit): auditoria técnica 22 dimensões — nota 6.6/10 - #128

Merged
adm01-debug merged 6 commits into
mainfrom
claude/auditoria-tecnica-sistema-xj2rvh
Sep 2, 2026
Merged

docs(audit): auditoria técnica 22 dimensões — nota 6.6/10#128
adm01-debug merged 6 commits into
mainfrom
claude/auditoria-tecnica-sistema-xj2rvh

Conversation

@adm01-debug

@adm01-debug adm01-debug commented Sep 2, 2026

Copy link
Copy Markdown
Owner

📝 Descrição

Relatório de auditoria técnica exaustiva do sistema Zapp Web V2, cobrindo 20 dimensões ponderadas com evidências extraídas diretamente do codebase e banco de dados em produção (tnnnlkbymytvtqngbbqh).

Nota final: 6.6/10 (224.5 / 34 peso total)

Arquivo gerado: docs/audits/AUDITORIA_TECNICA_22_DIMENSOES_2026-09-02.md


Scorecard resumido

Dimensão Nota Peso
Segurança — Auth/RBAC 8.5 3
Segurança — Input/API 6.5 3
Banco de Dados — RLS 9.0 3
Banco de Dados — Schema 7.0 2
TypeScript 5.0 2
Qualidade de Código 5.5 2
Testes 4.5 2
Observabilidade 4.0 2
CI/CD 7.5 2
Performance Frontend 6.5 2
Performance Backend 5.0 2
Tratamento de Erros 5.5 2
Dependências 7.0 1
Documentação 7.0 1
Acessibilidade 4.0 1
Internacionalização 3.0 1
Resiliência 5.0 1
Conformidade LGPD 5.5 1
DX / Tooling 7.5 1
Arquitetura 7.0 1

Achados críticos (P1/P2)

  • P1 — HMAC não enforçado em evolution-webhook/index.ts: webhook aceita qualquer payload sem validar assinatura. Fix: 5 linhas usando WebhookSecurityService já presente em _shared/hmac-validation.ts.
  • P2 — API key exposta em docs: docs/security/validation-report-2026-08-30.md contém chave parcial (sbp_...). Rotacionar via Supabase dashboard.
  • P3 — TypeScript sem strict: strict: false, noImplicitAny: false, strictNullChecks: false — ~100+ null-deref latentes.
  • P4 — Sentry não inicializado: erros de produção silenciados. logger.ts existe mas sem DSN configurado.
  • P5 — Zero testes E2E: nenhum Playwright/Cypress; fluxos críticos (login, envio WhatsApp, campanha) sem cobertura de integração.

Top 3 ações de maior ROI

  1. Enforce HMAC na evolution-webhook — 5 linhas, risco crítico eliminado
  2. Rotacionar API key exposta nos docs — 2 min no dashboard, zero risco residual
  3. Ativar strictNullChecks: true em tsconfig.app.json — corrigir erros resultantes

🎯 Tipo de Mudança

  • 📚 Documentação

🧪 Testes Realizados

  • Evidências verificadas diretamente no banco de produção via MCP
  • Evidências verificadas no codebase (leitura de arquivos)

✅ Checklist

  • Self-review realizado
  • Sem secrets/credenciais hardcoded
  • RLS policies consideradas (verificadas — 126/126 tabelas com RLS ativo)

⚠️ Notas para Reviewer

O relatório documenta gaps com evidências concretas (arquivo:linha). Cada dimensão inclui ações corretivas específicas. As dimensões de maior impacto imediato são Segurança (webhook HMAC) e TypeScript (strict mode).


🤖 Generated with Claude Code

https://claude.ai/code/session_01UDFCBv9FvzHkwHCN6YcKVa


Summary by cubic

Adiciona o relatório de auditoria técnica do Zapp Web V2 (nota 6.6/10) e aplica as correções mais urgentes apontadas por ele. O typecheck do CI deixou de ser um no-op: agora roda tsc -b --force com baseline e só falha em erro novo.

Correções incluídas

  • Remove o webhook secret em texto claro de docs/EVOLUTION_WEBHOOKS_DOCUMENTATION.md e a cópia rastreada em tmp/, que passou a ser ignorada pelo git.
  • Corrige auto-close-conversations, que sempre falhava ao inserir mensagem com sender: 'system' e a coluna inexistente type.
  • Consolida policies SELECT duplicadas em messages e contacts e adiciona CHECK constraints em tabelas de alta escrita; as migrations já estão aplicadas em produção.
  • Liga strictNullChecks; os 147 erros atuais entram no baseline do typecheck ratchet.

Pontos de atenção

  • O secret redigido pode ainda estar ativo; rotacione EVOLUTION_WEBHOOK_SECRET se a Evolution GO atual o utilizar.
  • Achados como HMAC não enforçado no webhook, Sentry sem DSN e zero testes E2E permanecem abertos no relatório.

Written for commit 4ee36fd. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • Melhorias

    • Mensagens de encerramento automático passam a ser identificadas corretamente como mensagens de agente.
    • Regras de acesso a mensagens e contatos foram consolidadas para refletir permissões de administradores, supervisores, contatos atribuídos e filas ativas.
    • Validações adicionais protegem dados de contatos, e-mails, mensagens e registros de auditoria.
  • Documentação

    • Credenciais sensíveis foram removidas da documentação.
    • Adicionado relatório técnico abrangente do sistema.
  • Qualidade

    • TypeScript agora aplica verificações nulas mais rigorosas e detecta novos erros durante a CI.

Relatório completo de auditoria técnica exaustiva do sistema Zapp Web V2
cobrindo 20 dimensões ponderadas. Evidências extraídas diretamente do
codebase e banco de dados em produção (tnnnlkbymytvtqngbbqh).

Nota final: 6.6/10 (224.5 / 34 peso total)

Achados críticos documentados:
- HMAC não enforçado na evolution-webhook (P1 — 5 linhas de fix)
- TypeScript sem strict/strictNullChecks (100+ null-deref latentes)
- Sentry não inicializado (erros de prod silenciados)
- Zero testes E2E
- Nenhuma transação em edge functions com writes múltiplos

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UDFCBv9FvzHkwHCN6YcKVa

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

adm01-debug has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: c6211edf-c78b-443c-b198-645ae66a926a

📥 Commits

Reviewing files that changed from the base of the PR and between 17436eb and 4ee36fd.

📒 Files selected for processing (15)
  • .github/workflows/ci.yml
  • .gitignore
  • docs/EVOLUTION_WEBHOOKS_DOCUMENTATION.md
  • docs/audits/AUDITORIA_TECNICA_22_DIMENSOES_2026-09-02.md
  • package.json
  • scripts/ci/README.md
  • scripts/ci/typecheck-baseline.json
  • scripts/ci/typecheck-ratchet.mjs
  • scripts/ci/typecheck-ratchet.unit.mjs
  • supabase/deployment-manifest.json
  • supabase/functions/auto-close-conversations/index.ts
  • supabase/migrations/20260902023200_consolidate_rls_select_messages_contacts.sql
  • supabase/migrations/20260902023300_add_check_constraints_high_write_tables.sql
  • tmp/EVOLUTION_WEBHOOKS_DOCUMENTATION.md
  • tsconfig.app.json

📝 Walkthrough

Walkthrough

O PR adiciona um ratchet de TypeScript com baseline, habilita strictNullChecks, atualiza políticas e constraints do Supabase, corrige metadados de mensagens automáticas, redige segredos na documentação, adiciona uma auditoria técnica e ignora tmp/.

Changes

Ratchet de TypeScript

Layer / File(s) Summary
Contrato e baseline do typecheck
tsconfig.app.json, package.json, scripts/ci/typecheck-baseline.json
O projeto habilita strictNullChecks, usa tsc -b --force e registra o baseline de diagnósticos.
Execução e comparação do ratchet
scripts/ci/typecheck-ratchet.mjs
O script executa o TypeScript, normaliza diagnósticos, compara ocorrências e retorna códigos distintos.
Integração e validação
.github/workflows/ci.yml, scripts/ci/README.md, scripts/ci/typecheck-ratchet.unit.mjs
O CI usa o ratchet. A documentação descreve o fluxo. Os testes cobrem parsing, comparação e argumentos.

Controles do Supabase

Layer / File(s) Summary
Mensagem de encerramento automático
supabase/functions/auto-close-conversations/index.ts, supabase/deployment-manifest.json
A mensagem usa sender: 'agent' e message_type: 'text'. O manifesto recebe hashes atualizados.
Políticas de leitura
supabase/migrations/20260902023200_consolidate_rls_select_messages_contacts.sql
As policies de messages são consolidadas em três caminhos de autorização.
Constraints de escrita
supabase/migrations/20260902023300_add_check_constraints_high_write_tables.sql
As tabelas validam telefone, e-mail, remetente, direção e ação de auditoria.

Documentação e higiene

Layer / File(s) Summary
Redação do segredo de webhook
docs/EVOLUTION_WEBHOOKS_DOCUMENTATION.md
A documentação substitui valores literais por referências ao segredo armazenado no Supabase.
Relatório de auditoria técnica
docs/audits/AUDITORIA_TECNICA_22_DIMENSOES_2026-09-02.md
O relatório cobre 20 dimensões técnicas, scorecard, ações prioritárias e roadmap.
Arquivos scratch
.gitignore
O diretório local tmp/ passa a ser ignorado.

Estimated code review effort: 4 (Complex) | ~45 minutos

Sequence Diagram(s)

sequenceDiagram
  participant CI as Workflow CI
  participant Ratchet as typecheck-ratchet.mjs
  participant TSC as TypeScript
  participant Baseline as Baseline JSON
  CI->>Ratchet: Executa o typecheck ratchet
  Ratchet->>TSC: Executa tsc -b --force
  TSC-->>Ratchet: Retorna diagnósticos
  Ratchet->>Baseline: Compara problemas
  Baseline-->>Ratchet: Retorna ocorrências conhecidas
  Ratchet-->>CI: Retorna o resultado da verificação
Loading

Poem

Sou um coelho e celebro o typecheck,
O baseline registra cada diagnóstico,
As policies protegem a toca,
As constraints mantêm os dados válidos,
O segredo fica redigido,
E tmp/ permanece fora do repositório.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands.

@vercel

vercel Bot commented Sep 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
zapp_web_v2 Ready Ready Preview Sep 2, 2026 3:00am UTC

messages/contacts tinham 2 policies SELECT permissivas cada, combinadas
por OR pelo Postgres. Consolidadas em 1 por tabela, formula validada em
producao via impersonacao (set_config + auth.uid()) com os 4 usuarios
reais do sistema: contagens de contacts/messages visiveis identicas
antes e depois (1105/11410, batendo com o total irrestrito via
service_role).

CHECK constraints adicionadas em contacts/email_messages/audit_logs
(107 de 126 tabelas do banco nao tinham nenhuma) - 0 violacoes
confirmadas contra o dataset ao vivo e contra o codigo-fonte das edge
functions que escrevem essas colunas.

Migrations ja aplicadas em producao (tnnnlkbymytvtqngbbqh) e
registradas em supabase_migrations.schema_migrations.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UDFCBv9FvzHkwHCN6YcKVa
…tmp/

docs/EVOLUTION_WEBHOOKS_DOCUMENTATION.md continha um webhook secret
completo em texto claro (achado F-02 da auditoria de 2026-08-30, ainda
pendente). tmp/ nao esta no .gitignore e carregava uma copia identica
do mesmo documento (achado G-05) - removida do git e do disco, tmp/
adicionado ao .gitignore.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UDFCBv9FvzHkwHCN6YcKVa
sender: 'system' viola o CHECK messages_sender_check (so aceita
'agent'|'contact') e sempre falhava; type: 'text' referenciava uma
coluna inexistente (a coluna real e message_type). Essa function
falhava sempre que auto_close_config.close_message estava configurado.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UDFCBv9FvzHkwHCN6YcKVa
tsc --noEmit sozinho nao verificava nada: tsconfig.json so declara
"references" (sem files/include), e sem --build o tsc nao resolve as
referencias, saindo sempre com exit 0. O "typecheck limpo" reportado em
toda auditoria anterior validava um comando vazio - confirmado rodando
tsc -b --force de verdade, que achou 21 erros de tipo pre-existentes
(entre eles um padrao "Expected 1 arguments, but got 0" repetido em 12
arquivos, e vite.config.ts com uma API de plugin inexistente).

typecheck agora roda "tsc -b --force" via scripts/ci/typecheck-ratchet.mjs,
no mesmo principio do lint-ratchet.mjs ja usado no repo: baseline dos
erros conhecidos, falha so em ocorrencia nova.

strictNullChecks: true ligado em tsconfig.app.json junto com a correcao
do gate - os 146 erros que isso adiciona (validados empiricamente, nao
estimados) entram no mesmo baseline de 147 ocorrencias totais.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UDFCBv9FvzHkwHCN6YcKVa
@ecc-tools

ecc-tools Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

adm01-debug has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

O fix em auto-close-conversations/index.ts (commit anterior) mudou o
hash do arquivo sem regenerar o manifest de atestado que o CI valida
(scripts/edge-deploy/generate-manifest.mjs --check) - derrubou o job
Lint & TypeCheck no PR.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UDFCBv9FvzHkwHCN6YcKVa

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

adm01-debug has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@ecc-tools

ecc-tools Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@adm01-debug
adm01-debug marked this pull request as ready for review September 2, 2026 09:18
Copilot AI lite review requested due to automatic review settings September 2, 2026 09:18
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

adm01-debug has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@adm01-debug
adm01-debug merged commit b1d04ea into main Sep 2, 2026
11 of 12 checks passed
@adm01-debug
adm01-debug deleted the claude/auditoria-tecnica-sistema-xj2rvh branch September 2, 2026 09:18

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

A migration introduces email-format CHECK constraints with um regex inválido/enganoso para Postgres (\s) e conflito com DEFAULT '' de from_address, o que pode quebrar inserts/migrations em produção.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Adiciona um relatório de auditoria técnica (22 dimensões) e aplica correções/incrementos derivados do relatório, incluindo reforços de CI (typecheck ratchet), ajustes em Edge Function e hardening de schema/RLS no Supabase, além de remover/redigir material sensível em docs.

Changes:

  • Ativa strictNullChecks no app e substitui o typecheck do CI por um “ratchet” com baseline (tsc -b --force) para evitar regressões sem bloquear pela dívida existente.
  • Remove arquivo sensível em tmp/, redige segredo em documentação, e ajusta a função auto-close-conversations para inserir mensagens com colunas válidas.
  • Consolida policies RLS de SELECT (messages/contacts) e adiciona CHECK constraints em tabelas de alta escrita.
File summaries
File Description
tsconfig.app.json Habilita strictNullChecks no projeto app.
package.json Troca script typecheck para tsc -b --force.
.github/workflows/ci.yml Substitui typecheck por scripts/ci/typecheck-ratchet.mjs.
scripts/ci/typecheck-ratchet.mjs Implementa ratchet de typecheck via baseline e tsc -b.
scripts/ci/typecheck-ratchet.unit.mjs Adiciona testes unitários do ratchet.
scripts/ci/typecheck-baseline.json Baseline inicial dos erros de typecheck atuais.
scripts/ci/README.md Documenta o fluxo do typecheck ratchet e comandos.
supabase/functions/auto-close-conversations/index.ts Corrige insert em messages (campos sender/message_type).
supabase/deployment-manifest.json Atualiza hashes/bytes após mudança na edge function.
supabase/migrations/20260902023200_consolidate_rls_select_messages_contacts.sql Consolida policies SELECT duplicadas/sobrepostas.
supabase/migrations/20260902023300_add_check_constraints_high_write_tables.sql Adiciona CHECK constraints em contacts/email_messages/audit_logs.
.gitignore Passa a ignorar tmp/.
docs/EVOLUTION_WEBHOOKS_DOCUMENTATION.md Redige o webhook secret removendo valor explícito.
tmp/EVOLUTION_WEBHOOKS_DOCUMENTATION.md Remove arquivo sensível versionado anteriormente.
docs/audits/AUDITORIA_TECNICA_22_DIMENSOES_2026-09-02.md Adiciona relatório de auditoria técnica.
Review details

Suppressed comments (1)

supabase/migrations/20260902023300_add_check_constraints_high_write_tables.sql:23

  • email_messages.from_address tem DEFAULT '' (ver migration de criação), mas este CHECK exige formato de e-mail — qualquer INSERT que omita from_address passará a falhar por receber o default vazio. Além disso, o regex usa \s (não-whitespace no PostgreSQL). Sugestão: dropar o default e trocar o padrão para [[:space:]].
ALTER TABLE public.email_messages
  ADD CONSTRAINT email_messages_from_format CHECK (
    from_address ~* '^[^@\s]+@[^@\s]+\.[^@\s]+$'
  );
  • Files reviewed: 14/15 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +15 to +18
ALTER TABLE public.contacts
ADD CONSTRAINT contacts_email_format CHECK (
email IS NULL OR email ~* '^[^@\s]+@[^@\s]+\.[^@\s]+$'
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants