# Solução de problemas

Primeiro, o panorama geral, a partir do diretório da instalação:

```
./draften status      # version, health of both web colours and the workers, HTTPS, database dumps
```

Depois, com mais detalhes:

```
docker compose ps                        # are the services up, is the database healthy?
docker compose logs --tail 50 worker     # the worker's last entries
docker compose run --rm worker node diag.mjs mailbox@company.com
```

O último faz o mesmo que **Testar a conexão** na interface: pega o acesso
guardado para a caixa de e-mail, obtém um token, mostra as permissões dele
(nunca o próprio token) e lê a Caixa de Entrada.

## Erros comuns

| Sintoma | Causa | O que fazer |
|---|---|---|
| `set DB_PASSWORD in .env` na inicialização | faltam as senhas do banco de dados | preencha o `.env` |
| `mailbox … has no access yet` | a caixa de e-mail não tem registro nem conta conectada | a página da caixa de e-mail → Acesso aos e-mails |
| `Graph … 401 … invalid_client` | client secret errado ou expirado | um novo secret no registro e, depois, o teste de conexão |
| `Graph … 403 … AppOnly AccessPolicy` | a application access policy ainda não entrou em vigor, ou a caixa de e-mail não está no grupo | espere (às vezes horas) e repita o teste; adicione a caixa de e-mail ao grupo |
| `Graph … 403 … ErrorAccessDenied` | falta o consentimento do administrador | no Entra, Grant admin consent no registro |
| `Category not added … MailboxSettings` | falta a permissão `MailboxSettings.ReadWrite`; o marcador funciona, só que sem cor | adicione a permissão e dê o consentimento |
| `No active assistant in the database` | o assistente está desativado, ou os dados iniciais não foram criados | ative o assistente; confira o log de inicialização |
| o assistente é pulado (“no prompts yet”) | o assistente não tem instruções escritas | conclua a configuração guiada ou escreva as instruções à mão |
| `Draft without signature` / `links outside the allowed domains` | o rascunho não passou em uma verificação | examine a mensagem – pode ser uma tentativa de falsificação |
| `Limit reached` | o limite diário ou por remetente | aumente-o só quando a enxurrada de e-mails for legítima |
| `Model refused to answer` | o filtro de segurança do modelo | trate a mensagem à mão |
| `Model exhausted max_iterations` | o modelo entrou em loop nas ferramentas | é repetido duas vezes; se continuar acontecendo, aprimore a instrução do tipo Tarefa |
| `ECONNREFUSED … 3306` | o banco de dados caiu ou ainda não subiu | `docker compose ps`, `docker compose logs db` |
| a barra “A licença expirou” ou “A instalação não tem licença”, os assistentes não escrevem nada | a licença está faltando ou expirou | carregue uma licença válida – veja [A licença](/pt/admin/licence) |
| uma atualização terminou com erro | a nova versão não ficou saudável; a anterior continua atendendo | o erro em Solicitações ou na saída de `./draften update`; `./draften status` |
| “O último backup diário falhou” no cartão Backups do banco de dados | o dump do banco de dados falhou (a mensagem está no cartão); uma nova tentativa é feita uma hora depois | execute `./draften backup` e leia o erro; confira o espaço livre em disco (`df -h`) e `./draften status` |

## Quando o log não mostra

- A interface: nas Configurações do assistente → **Atividade** (verificações
  de e-mails, solicitações, eventos) e a página **Operação** (workers, fila,
  erros das últimas 24 horas).
- Depois de três tentativas sem sucesso, a mensagem recebe o status **com
  falha**; o último erro está no detalhe dela.

## Uma rodada manual avulsa

```
docker compose run --rm worker node worker.mjs --dry-run
```

Ela passa uma vez por todos os assistentes ativos e força o modo de teste –
nada é gravado nos e-mails. Útil para conferir se tudo funciona.

## Quando você precisa da nossa ajuda

```
./draften diagnose
```

grava um arquivo `diagnose-<time>.tar.gz` com o status da instalação, as
versões, a configuração sem segredos e o final dos logs. Envie-o para nós.

!> Antes de enviar o arquivo, confira o conteúdo: os logs podem conter
endereços e assuntos dos e-mails processados. Nada sai do servidor sozinho.
