> For the complete documentation index, see [llms.txt](https://docs.skail.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.skail.dev/operar/troubleshooting.md).

# Troubleshooting

Sintoma, causa provável, como confirmar, o que fazer. Comece pelo sintoma que você está vendo; cada linha aponta para a página com o detalhe.

## A aplicação não sobe ou não descobre as functions

| Sintoma                                            | Causa provável                                                                                                                                           | Como confirmar                                                        | O que fazer                                                                                    |
| -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| "There is not Skail runtime available!"            | Faltou `builder.UseSkail()` / `services.AddSkail()`; ou o pacote de build não rodou (sem reescrita de IL); ou falta `[assembly: VisibleToSkailPlatform]` | Ver `Program.cs`; ver se `Skail.Platform.Runtime.Build` está no build | Adicionar o que falta. Ver [Configuração do host](/construir/sdk-.net/configuracao-do-host.md) |
| "The Builder Factory can only be registered once!" | `AddSkail`/`UseSkail` chamado duas vezes no processo                                                                                                     | Procurar chamadas duplicadas; em testes, dois `ServiceProvider`       | Registrar uma vez por processo                                                                 |
| "StateMachine not registered."                     | Método decorado não descoberto: assembly sem atributo, método não `async`, assinatura errada                                                             | A mensagem aparece no log ao disparar a function                      | Conferir atributo, `async`, `SkailTask`                                                        |
| Build falha com SKAIL001, SKAIL002 ou SKAIL003     | Assinatura fora das regras                                                                                                                               | Mensagem do compilador                                                | [Regras do analyzer](/construir/sdk-.net/regras-do-analyzer-skail001-skail002-skail003.md)     |
| Runtime não conecta ao skail                       | `SKAIL_SIDECAR` errado (host, porta, esquema), rede, ou indisponibilidade                                                                                | Log da aplicação; testar acesso ao endereço a partir do host          | Conferir a variável; ver [Suporte e status](/operar/suporte-e-status.md)                       |
| `Unauthenticated` no log                           | `SKAIL_KEY` vazia, inválida ou revogada; `SKAIL_NAMESPACE` de outro environment                                                                          | Comparar com a tela do environment                                    | Corrigir; ver [Chaves](/operar/chaves-criar-rotacionar-revogar.md)                             |
| `ResourceExhausted` no log                         | Limite atingido no skail                                                                                                                                 | Recorrência no log                                                    | Reduzir carga; ver [Limites e cotas](/aprender/garantias/limites-e-cotas.md)                   |

## O trigger não funciona

| Sintoma                                        | Causa provável                                                                                                                | Como confirmar                                                                  | O que fazer                                                                                      |
| ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| 401 ou 403                                     | `skail-key` ou `Skail-namespace` errados, ou de outro environment                                                             | Comparar headers com a tela do environment                                      | Corrigir. [Autenticação e headers](/construir/api-http/autenticacao-e-headers.md)                |
| Outro 4xx                                      | `workload`, `versao` ou `funcao` não batem com o publicado; corpo não é array; argumento não desserializa                     | Comparar o caminho com `SKAIL_WORKLOAD` e o nome do método; ver o corpo enviado | Corrigir o caminho ou o corpo (array na ordem da assinatura)                                     |
| 2xx, nada no Monitor                           | Namespace de outro environment                                                                                                | Procurar no Monitor do outro environment                                        | Corrigir o namespace                                                                             |
| 2xx, aparece no Monitor, não executa (Na fila) | Nenhuma aplicação rodando com esse `SKAIL_WORKLOAD`                                                                           | Log da aplicação; `SKAIL_WORKLOAD`                                              | Subir a aplicação ou corrigir a variável                                                         |
| "Target method not found" no runtime           | Execução endereçada a um método que esta versão não tem: `SKAIL_WORKLOAD` diferente do que gerou a execução, método renomeado | Comparar endereço na mensagem com os métodos publicados                         | Ver [Versionamento](/aprender/fundamentos/versionamento-de-codigo-com-execucoes-em-andamento.md) |
| "Message image mismatch"                       | Execução de outro workload entregue a este processo                                                                           | `SKAIL_WORKLOAD`                                                                | Corrigir a variável                                                                              |

## A execução não anda

| Sintoma                              | Causa provável                                                                                                              | Como confirmar                                          | O que fazer                                                                                                                                                       |
| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Aguardando evento há muito tempo     | Nome ou instance id divergentes entre `WaitForEvent` e fire; fire enviado a outro namespace; webhook do parceiro não chegou | Monitor mostra nome e id esperados; comparar com o fire | Corrigir nos dois lados; disparar o fire manualmente por cURL se for o caso. [Eventos externos](/aprender/fundamentos/eventos-externos-e-correlacao.md)           |
| Aguardando evento sem prazo definido | Espera sem `WhenAny` com `Delay`                                                                                            | Código da function                                      | Adicionar prazo; para a execução atual, disparar o evento ou aceitar a espera. [Como esperar com timeout](/construir/escrever-fluxos/como-esperar-com-timeout.md) |
| Delay não acorda no horário          | Nenhuma instância da aplicação rodando quando o prazo venceu; indisponibilidade                                             | Estado Na fila após o prazo; log da aplicação           | Subir/escalar a aplicação; a retomada acontece ao voltar                                                                                                          |
| Na fila por muito tempo              | Instâncias de menos ou aplicação fora                                                                                       | Log; réplicas                                           | Escalar réplicas                                                                                                                                                  |

## A execução falha

| Sintoma                                              | Causa provável                                                                                                  | Como confirmar                                              | O que fazer                                                                                                                         |
| ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| Falha com exceção do seu command                     | Serviço externo fora além do `retryCount`; dado inválido; bug                                                   | Exceção e passo na linha do tempo                           | Corrigir a causa e retomar. [Retomada manual](/operar/retomada-manual-de-execucoes-falhas.md)                                       |
| `SkailNonDeterministicException`                     | Relógio, aleatoriedade, I/O ou `Task.*` na function; ou fluxo alterado com execuções em andamento (após deploy) | Comparar o código com a linha do tempo; ver se houve deploy | Corrigir o código ou publicar a versão compatível; retomar. [Determinismo e replay](/aprender/fundamentos/determinismo-e-replay.md) |
| Falha de negócio retentada várias vezes              | Recusa lançada como exceção                                                                                     | Command com N tentativas iguais                             | Devolver resultado em vez de exceção. [Falhas, retries e idempotência](/aprender/fundamentos/falhas-retries-e-idempotencia.md)      |
| Command executado duas vezes no sistema externo      | Falha entre o efeito e a gravação do resultado, sem chave de idempotência                                       | Duas chamadas no sistema externo, um passo no Monitor       | Chave de idempotência. [Como escrever commands idempotentes](/construir/escrever-fluxos/como-escrever-commands-idempotentes.md)     |
| Function reentregue 15 vezes após um command esgotar | Exceção do command não capturada na function                                                                    | Linha do tempo com repetições                               | Capturar e decidir (compensar, marcar pendente). [Como tratar erros](/construir/escrever-fluxos/como-tratar-erros-e-compensar.md)   |

## Testes e depuração

| Sintoma                                                        | Causa provável                                | O que fazer                                                                                                                                 |
| -------------------------------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| "Hibernation is not allowed in the unit test."                 | Teste alcançou `Delay`/`WaitForEvent`         | Testar até o ponto de espera. [Como testar](/construir/testar-depurar-e-observar/como-testar-funcoes-com-skail.platform.runtime.testing.md) |
| Time Travel Debug diverge com `SkailNonDeterministicException` | Código local diferente do que gerou a captura | Usar a mesma versão. [Como depurar com Time Travel Debug](/construir/testar-depurar-e-observar/como-depurar-com-time-travel-debug.md)       |
| Logs duplicados de uma function                                | Replay reexecuta o corpo                      | Esperado; use `TaskId` no escopo; logue em command o que não pode repetir                                                                   |

## Antes de abrir um chamado

Tenha à mão: TaskId da execução, workload e versão, environment, horário, a exceção do Monitor e o trecho relevante do log da aplicação. Ver [Suporte e status](/operar/suporte-e-status.md).

## Próximos passos

[Monitoramento e alertas](/operar/monitoramento-e-alertas.md) para detectar antes do sintoma. [Exceções](/construir/sdk-.net/excecoes.md) para a referência das mensagens.
