Files
DeskcommCRM/scripts
melgarafaelandClaude Opus 5 048ca5b481 Merge origin/main (#677, telefonia): as duas abas ficam, e a cascata não encolhe
A main andou de novo enquanto este PR rodava — segundo merge do dia. Dois
conflitos, resolvidos pelo mesmo método: lado autoritativo e delta reaplicado.

`components/connections/ConexoesShell.tsx` — cada lado acrescenta uma ABA ao
mesmo `Tabs`: "Telefone" (#677) e "Redes sociais" (este PR). Somadas. Escolher
um lado apagaria uma tela inteira da navegação.

`supabase/baseline.sql` — parti do baseline da main e reapliquei o delta desta
branch por contexto. O hunk do apêndice rejeitou, como da primeira vez, e foi
colocado à mão ANTES do bloco de varredura anon, porque cria função.

A CONFERÊNCIA QUE FALTOU DA PRIMEIRA VEZ, e que agora é a razão deste commit
existir com este texto: na rodada anterior o apêndice desta branch redefiniu
`fn_lgpd_cascade_redact_contact` a partir de uma versão anterior e APAGOU o
passo `sales` da main, em silêncio. Quem pegou foi o invariante, no CI.

Desta vez a comparação foi feita ANTES de commitar, e a sonda é o contador da
própria cascata:

  awk <da última definição até o `$$;`> | grep -oE "v_counts \|\| jsonb_build_object\('[a-z_]+'"

  main .............. 15 tabelas
  este merge ........ 16 tabelas
  só na main ........ (vazio)  ← nenhuma se perde
  só neste PR ....... 'prospecting_candidates'

Zero funções criadas depois da varredura anon, conferido também.

DESKCOMM_GOV_INVARIANTS_EDIT=1 porque o merge traz arquivos de
`tests/invariants/**` vindos da main; este commit não altera nenhum deles —
`git diff --stat HEAD^ HEAD -- tests/invariants/` mostra só o que veio de lá.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0173B9sHr5gABdMAx2fWsQ5W
2026-09-20 03:09:45 -03:00
..
…

scripts/

CLI utilities pra operação local e de produção.

Lista

  • seed-tenant.ts — Cria um tenant manualmente (modo BPO). Placeholder; implementação na Spec 01.

Convenções

  • Todos em TypeScript (executar via npx tsx scripts/<nome>.ts)
  • Sempre validar input com Zod
  • Logar via console.error (stderr) pra mensagens operacionais; console.log (stdout) só pra output estruturado consumível por pipe
  • Operações destrutivas exigem flag --confirm ou prompt interativo
  • Toda mutação relevante gera entrada em api_audit_log com actor=script:<nome>