Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
9f3aa33
fix(agente): editor do rag_bot salvava sem nunca publicar
maugarciasa Aug 22, 2026
f039d44
fix(agente): reconexão do WAHA reprovava número já aquecido no go-live
maugarciasa Aug 22, 2026
23c8fa3
docs(agents): reorganiza CLAUDE.md/AGENTS.md sem contradições e cria …
maugarciasa Aug 22, 2026
de47726
test(unit): conserta 8 gates cegos em checkout Windows (CRLF/separado…
maugarciasa Aug 22, 2026
9f9f453
fix(agente): veto do gate pacing derrubava o turno sem reagendar nada
maugarciasa Aug 23, 2026
17a0134
chore(packaging): repoint kit e compose pro fork independente (maugar…
maugarciasa Aug 23, 2026
7a3ab82
test: confere disparo automático do Actions após habilitar workflows …
maugarciasa Aug 23, 2026
70009ba
fix(seguranca): fecha RLS de papel em contacts e RBAC de 3 rotas de c…
maugarciasa Aug 23, 2026
446d8cb
docs(changelog): fecha a 1.3.1
maugarciasa Aug 23, 2026
c8e2055
test: confirma Actions automático no repo novo (sem vínculo de fork)
maugarciasa Aug 23, 2026
131edf5
test: 2a tentativa de disparo automático
maugarciasa Aug 23, 2026
87ae640
test: 3a tentativa (esperando propagacao)
maugarciasa Aug 23, 2026
f97683e
test: confere disparo automático após habilitar no repo novo
maugarciasa Aug 23, 2026
62c3f30
fix(security): RLS de papel ausente em messages e nas 31 tabelas do a…
maugarciasa Aug 23, 2026
6a63ba4
fix(security): escapa input em filtros .or() do PostgREST
maugarciasa Aug 23, 2026
79c293d
perf: paraleliza ação tag em leads/bulk
maugarciasa Aug 23, 2026
7e2e584
fix(devops): Dockerfile.worker roda non-root
maugarciasa Aug 23, 2026
2662ee5
fix(config): corrige convenção errada na skill do Codex
maugarciasa Aug 23, 2026
e465316
fix: lint-channels quebrava no Windows por separador de path
maugarciasa Aug 23, 2026
c2fa10e
feat(devops): agenda o backup diário automaticamente
maugarciasa Aug 23, 2026
65d0043
feat(security): CSP e HSTS explícitos
maugarciasa Aug 23, 2026
ed21248
perf: virtualiza a lista de conversas do inbox
maugarciasa Aug 23, 2026
58d533f
chore(quality): traz scripts/ pro typecheck oficial e corrige 4 erros
maugarciasa Aug 23, 2026
84a1f6b
docs: arquiva HANDOFF órfãos e remove config inerte do Codex
maugarciasa Aug 23, 2026
b77803e
feat(devops): expurgo genérico por idade em event_log (migration 0172)
maugarciasa Aug 23, 2026
fb1c8c2
refactor(agent-engine): decompõe executarTurnoDoAgente (1672 → 1319 l…
maugarciasa Aug 23, 2026
24bac1d
ci: liga CodeQL (code scanning nunca tinha rodado neste fork)
maugarciasa Aug 23, 2026
c9dd084
ci: codeql-action v3 → v4
maugarciasa Aug 23, 2026
8b0cbc0
docs(architecture): mapa vivo ganha event_log (migration 0172)
maugarciasa Aug 23, 2026
c25d63b
fix(ci): justifica security-events: write do codeql.yml
maugarciasa Aug 23, 2026
05911f8
fix(devops): install.sh grava BACKUP_CRON_HOUR no .env
maugarciasa Aug 23, 2026
25b1360
fix(security): img-src da CSP bloqueava logo servido por http local
maugarciasa Aug 23, 2026
0ab5e8b
fix(agent-engine): classificador do roteador não manda modelo sem pro…
maugarciasa Aug 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 31 additions & 67 deletions .agents/skills/DeskcommCRM/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,79 +1,43 @@
```markdown
# DeskcommCRM Development Patterns
# DeskcommCRM — doutrina de código

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

## Overview
This skill teaches the core development patterns and conventions used in the DeskcommCRM TypeScript codebase. It covers file organization, code style, commit message standards, and testing patterns, providing practical examples and command suggestions to streamline your workflow.
## 1. Leia antes de escrever

## Coding Conventions
| 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 |

### File Naming
- Use **snake_case** for all file names.
- Example:
```
user_profile.ts
customer_data_manager.ts
```
**Não confie em resumo de doutrina — nem neste arquivo.** Abra o `CLAUDE.md`.

### Import Style
- Use **relative imports** for referencing modules.
- Example:
```typescript
import { getUser } from './user_utils';
import { Customer } from '../models/customer';
```
## 2. As três que mais custam

### Export Style
- Use **named exports** for all modules.
- Example:
```typescript
// In user_utils.ts
export function getUser(id: string) { ... }
export const USER_ROLE = 'admin';
```
**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()`.

### Commit Messages
- Follow **conventional commits** with the `fix` prefix for bug fixes.
- Example:
```
fix: correct customer email validation logic
```
**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.

## Workflows
**Nenhuma feature nomeia um provider.** Provider vive em `lib/channels/`. `pnpm lint:channels` é
catraca com lista de dívida.

### Bug Fix Workflow
**Trigger:** When you need to fix a bug in the codebase
**Command:** `/fix-bug`
## 3. Convenção de arquivo — o oposto do que a versão anterior ensinava

1. Identify the bug and create a new branch.
2. Make code changes following the coding conventions.
3. Write or update relevant tests (`*.test.*` files).
4. Commit your changes using the `fix:` prefix and a concise description.
- Example: `fix: resolve crash on empty customer list`
5. Push your branch and open a pull request.
A versão anterior deste arquivo era gerada automaticamente por análise de repositório e ensinava
`snake_case` para nome de arquivo e imports relativos. **O repo usa o oposto**: `kebab-case` para
nome de arquivo (`user-profile.ts`, não `user_profile.ts`) e o alias `@/` para import
(`import { getUser } from "@/lib/auth/get-user"`, não `./user_utils`). Nenhum comando de fluxo
(`/fix-bug`, `/add-module`) existe neste repo — não invente um.

### Adding a New Module
**Trigger:** When you need to add a new feature or module
**Command:** `/add-module`
## 4. Antes de dizer "pronto"

1. Create new files using snake_case naming.
2. Use relative imports to connect new and existing modules.
3. Export functions and constants using named exports.
4. Write corresponding tests in `*.test.*` files.
5. Commit with an appropriate message (e.g., `feat: add customer notes module`).

## Testing Patterns

- Test files follow the `*.test.*` naming pattern.
- Example: `user_utils.test.ts`
- The testing framework is not explicitly specified; check existing test files for structure.
- Place tests alongside or near the modules they test.
- Ensure all new features and bug fixes are covered by tests.

## Commands
| Command | Purpose |
|--------------|-----------------------------------------|
| /fix-bug | Start the bug fix workflow |
| /add-module | Start the new module addition workflow |
```
Verde de teste não é prova de comportamento. Sabote a linha que você corrigiu e confirme que a
suíte fica **vermelha**. Declare o que **não** mediu.
71 changes: 71 additions & 0 deletions .ai/AI_BOOTSTRAP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# AI_BOOTSTRAP — leia isto primeiro

Porta de entrada de qualquer agente de código neste repositório (Claude Code, Codex, Cursor,
Copilot, Amp). Não é doutrina: é o roteador. **Dois minutos aqui evitam o dano típico.**

## 1. Ordem de leitura

| # | Arquivo | Quando |
| --- | --------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| 1 | **este** | Sempre, antes de qualquer coisa |
| 2 | [`CLAUDE.md`](../CLAUDE.md) | Antes de escrever a primeira linha de código. É a doutrina, e vence qualquer outro documento |
| 3 | [`AGENTS.md`](../AGENTS.md) | Se você não é o Claude Code: mesmo contrato, forma portável |
| 4 | [`docs/index.md`](../docs/index.md) | Quando precisar de detalhe de um assunto — índice dos docs |
| 5 | [`docs/current-state.md`](../docs/current-state.md) | Antes de estimar, prometer ou dizer que algo existe |

## 2. A regra que governa todas as outras

**O repositório mede; a prosa descreve.** Código, `package.json`, workflows e `gh api` são a fonte
do estado — documento é sempre uma foto que pode ter envelhecido. Onde os dois discordarem, o
documento está errado: corrija-o no mesmo PR.

Por isso a documentação de autoridade deste repo evita número volátil e prefere comando. Quando
você for escrever uma afirmação de estado, escreva o comando que a prova.

## 3. O que este produto é (e por que isso muda seu trabalho)

CRM de vendas open source com agentes de IA e WhatsApp, **distribuído como código e instalado numa
VPS pelo próprio cliente**. Quem instala é o usuário final. Consequências diretas:

- Mudança que funciona na sua máquina e quebra no clone fresco é **bug de produto**.
- Schema só chega ao cliente se entrar em `supabase/baseline.sql` — migration solta não chega.
- O nome do produto é revendido: **nunca escreva "Deskcomm" em código que alcança o usuário**.
- A tela é o produto. `curl` diagnostica; ele não prova experiência de usuário.

## 4. As dez regras que evitam dano

1. **Toda tabela tenant-aware tem `organization_id` + RLS.** Service role bypassa RLS — quem usa o
admin client filtra `organization_id` à mão, de fonte confiável, **nunca do body**.
2. **`getUser()` no backend, nunca `getSession()`.**
3. **Zod em todo input externo** (body, webhook, env).
4. **`ok()` / `fail()` de `lib/api/wrappers.ts`** — nunca monte `Response` na mão, nunca deixe
`throw` cru na borda.
5. **Mudança de schema = migration versionada + apêndice idempotente no baseline + linha no
MANIFEST.** Os três juntos, ou o self-hoster não recebe.
6. **Trigger Postgres nunca faz HTTP** — emite linha em `event_log`, o worker dispara o efeito.
7. **API key nunca em query string**; bearer no banco só como hash SHA256.
8. **`console.log` é proibido** em código merged — use `lib/logger.ts`.
9. **Tela nova precisa de porta** em `lib/navigation/registry.ts`: existir e ser alcançável são
coisas diferentes.
10. **Nunca invente regra de negócio, SLA ou número.** Se não está escrito, diga que não está e
pergunte.

## 5. Antes de começar

```bash
git fetch origin && git merge origin/main # branch atrasada é a causa nº 1 de retrabalho
pnpm install
```

Nunca use `reset --hard` ou force push para "atualizar" uma branch, e nunca toque em worktree sujo
que não é seu.

## 6. Antes de dizer "pronto"

```bash
pnpm gov:verify # typecheck + lint + lint:channels + test:unit
```

Verde aqui **não** é prova completa: `gov:verify` não roda `test:db` (schema/RLS), `test:e2e` (UI)
nem `test:shell` (kit de instalação). Rode o que sua mudança exige e cumpra a Definition of Done de
[`CLAUDE.md`](../CLAUDE.md) — ela é a régua de conclusão, item por item.
Loading
Loading