# Build, deploy e testes

O SDK atual não cobre apenas runtime. Ele também participa do empacotamento do projeto, da estratégia de logging e dos testes locais.

## Build e empacotamento

O pacote público expõe tooling de build em `@tunnelhub/sdk/building` e o bin `tunnelhub-sdk-esbuild`.

Esse fluxo lê a configuração do projeto, usa `tunnelhub.yml` como referência e normalmente gera um artefato ZIP para deploy.

Na prática, isso ajuda a padronizar:

* entrypoint;
* runtime;
* memória e timeout;
* arquivos incluídos no bundle;
* artefato final esperado pela CLI.

## Estratégia de logging

O SDK escolhe entre logging em tempo real e logging em lote conforme o volume e o perfil da execução.

Em alto nível:

* cargas pequenas tendem a usar logging em tempo real;
* cargas muito grandes tendem a usar modo em lote;
* flows podem ajustar limiares protegidos para adaptar o comportamento.

Esse desenho melhora custo e performance sem exigir lógica manual em cada integração.

## Observabilidade

Os logs da automação alimentam as telas de monitoramento da plataforma. A qualidade dos metadados e das mensagens impacta diretamente a capacidade de suporte e investigação.

Boas práticas:

* incluir identificadores de negócio nos metadados;
* evitar mensagens genéricas demais;
* diferenciar erro técnico de erro funcional;
* usar `setupInterceptor()` apenas quando o ganho investigativo justificar.

## Testes locais

Para testes, o SDK expõe o flag:

```ts
SDK.testMode = true;
```

Esse modo é recomendado para suítes Jest e cenários de mock de serviços AWS ou chamadas externas.

## Modo verboso

Quando necessário, você pode habilitar:

```ts
SDK.verbose = true;
```

Isso ajuda durante desenvolvimento e depuração local.

## O que vale testar em uma automação

Checklist mínimo:

* handler chama `AutomationExecution.executeAutomation(...)` corretamente;
* flow instancia sem erro com payload mínimo;
* `defineMetadata()` está válida;
* principal caminho feliz da integração está coberto;
* erros relevantes retornam mensagens operacionais úteis.

## Troubleshooting comum

* **parâmetro obrigatório ausente**: valide o cadastro no produto e o helper usado no código;
* **Tabela De/Para ou Sequência não encontrada**: confirme código, ambiente e associação correta;
* **erro de metadata**: revise labels reservadas e tipos inválidos;
* **artefato inconsistente**: confira `tunnelhub.yml`, entrypoint e caminho do ZIP antes do deploy.
