DeskcommCRM — doutrina de código

SkillCommunication

Doutrina de código do DeskcommCRM — multi-tenancy com RLS, tripla de migration, restrição de canal, eixo self-host. USE SEMPRE ao escrever ou revisar código neste repositório, e antes de responder pergunta sobre convenção, schema, tenancy, WhatsApp/WAHA, instalador ou Definition of Done. É o ponteiro para a doutrina viva do repo; não substitui ler o CLAUDE.md.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the DeskcommCRM — doutrina de código skill

What this skill tells your AI

The instructions your AI receives, as published by melgarafael/deskcommcrm in .agents/skills/deskcomm-doutrina/SKILL.md and read by ahel’s review.

A fonte da verdade é o CLAUDE.md da raiz, lido do origin/main e não de um resumo. Esta skill existe para te fazer abri-lo na hora certa e para carregar as três regras que mais custam caro quando esquecidas.

1. Leia antes de escrever

arquivoquando
CLAUDE.mdsempre, antes de qualquer código — contém a Definition of Done, que muda
VISION.mdantes de decidir escopo, ou de dizer não a uma feature
docs/doctrine/ao mexer em canal, agente, ou peça que se conecte a outra
ARCHITECTURE.mdpara a visão de uma página

Não confie em resumo de doutrina — nem neste arquivo. A Definition of Done já foi de 13 para 14 itens; cópia congelada ensina a regra de ontem. Abra o CLAUDE.md.

2. As três que mais custam

Multi-tenancy. Toda tabela tenant-aware leva organization_id uuid not null e RLS com policy tenant_isolation_<tabela>_all via fn_user_org_ids(). Service role bypassa RLS — handler que o usa filtra organization_id manualmente, resolvido de fonte confiável (cookie, JWT, segredo de webhook, token de path), nunca do body. No backend é sempre getUser(), nunca getSession().

Schema sai em tripla. Arquivo em supabase/migrations/, apêndice idempotente no supabase/baseline.sql, e linha no MANIFEST.md. O kit self-host aplica só o baseline — o que não chega lá não chega em quem instalou numa VPS, que é o cliente que paga. Constraint nova exige corrigir os dados antes, senão o update.sh do clone quebra.

Nenhuma feature nomeia um provider. Provider vive em lib/channels/. pnpm lint:channels é catraca com lista de dívida: arquivo novo sujo reprova — e arquivo que ficou limpo e não saiu da lista também reprova.

3. O eixo que não é técnico

A monetização é self-host em VPS, não assinatura: quem instala é o cliente. Então uma mudança pode ser tecnicamente impecável e ainda assim ser recusada — env var nova sem default quebra instalação fresca, dependência de serviço pago obrigatório quebra o modelo, e a pior de todas é a falha-em-verde: a sonda que declara sucesso medindo caminho diferente do que o usuário usa. Num produto que a pessoa instala sozinha, ela não descobre que está quebrado.

4. Antes de dizer "pronto"

Verde de teste não é prova de comportamento. Sabote a linha que você corrigiu e confirme que a suíte fica vermelha — teste que não reprova não guarda nada. E declare o que não mediu: é o campo que separa medição de relato.

Não-objetivos

Não lista comandos de fluxo — não existem /fix-bug nem /add-module neste repo. Não descreve estrutura de pastas nem convenção de nome de arquivo: a versão anterior deste arquivo era gerada automaticamente e ensinava snake_case com imports relativos, quando o repo usa kebab-case com alias @/. Detalhe correto mora no CLAUDE.md, que está atualizado — o que este arquivo não pode prometer.

Signals

GitHub stars
1k
Forks
503
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
deskcomm-doutrina
Source
github.com/melgarafael/deskcommcrm