
Deskcomm Doutrina
Doutrina de código do DeskcommCRM, multi-tenancy com RLS, tripla de migration...
Install
npx skills add melgarafael/DeskcommCRM --skill deskcomm-doutrina -g -a claude-code -y- Repository
- melgarafael/DeskcommCRM5k
- Category
- AI and agents
- Updated
- 3d ago
- License
- MIT
- Context cost
- Lightabout 878 tokens
- Runs scripts
- No, instructions only
What it does
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.
DeskcommCRM, doutrina de código
A fonte da verdade é o
CLAUDE.mdda raiz, lido doorigin/maine 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
| arquivo | quando |
|---|---|
CLAUDE.md | sempre, antes de qualquer código, contém a Definition of Done, que muda |
VISION.md | antes 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.md | para 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 -- manifest: <o quê e por quê> no cabeçalho do .sql (o MANIFEST.md é histórico; não recebe linha nova). 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.

