> 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/deploy-sem-quebrar-execucoes-em-andamento.md).

# Deploy sem quebrar execuções em andamento

Checklist operacional para publicar código novo em produção quando há execuções vivas, hibernadas em delays de dias ou esperando eventos. O raciocínio está em [Versionamento de código com execuções em andamento](/aprender/fundamentos/versionamento-de-codigo-com-execucoes-em-andamento.md); aqui é o procedimento.

## Quando você precisa disto

Em todo deploy de produção de um workload que já tem execuções. A pergunta que decide o caminho: alguma function alterada mudou a sequência de `await`s (inseriu, removeu ou reordenou command, `Delay`, `WhenAll`, `WhenAny`, `WaitForEvent`; renomeou method; mudou uma condição que escolhe o `await` seguinte a partir de dados já no histórico)?

## Caminho A: o fluxo não mudou

Corrigiu corpo de command, mudou logs, adicionou functions novas, alterou lógica que não muda os `await`s.

1. Publique com o mesmo `SKAIL_WORKLOAD`, com rolling update normal.
2. Observe no Monitor as primeiras retomadas de execuções antigas: se houver `SkailNonDeterministicException`, você errou a avaliação; siga para o caminho C.

## Caminho B: o fluxo mudou

1. Antes de tudo, confira no Monitor se há execuções em andamento ou hibernadas nas functions alteradas. Se não há, caminho A.
2. Defina a nova versão (`v1.4.0`) e crie o workload com ela no portal.
3. Publique a nova versão como uma implantação separada, sem derrubar a anterior: segundo Deployment no Kubernetes, segundo serviço no container, segundo app ou slot. Cada uma recebe só as execuções da própria versão.
4. Valide com uma execução de teste na nova versão.
5. Aponte os triggers de produção para `/trigger/nome/v1.4.0/...`.
6. Mantenha a versão antiga rodando: as execuções iniciadas nela são retomadas só por ela, sem migração automática para a versão nova. Acompanhe no Monitor as execuções que ainda estão nela. Esperas longas podem manter a antiga viva por semanas; isso é esperado e barato.
7. Quando a antiga estiver com zero execuções em andamento e hibernadas, derrube a aplicação antiga.

Alternativa quando só uma function mudou: mantenha a antiga no código com o nome original e publique a nova com `[SkailFunction(skailMethodName: "...V2")]`, sem trocar a versão do workload; aponte os novos triggers para a V2 e remova a antiga quando esvaziar.

## Caminho C: publicou por cima e quebrou

Execuções antigas em falha com `SkailNonDeterministicException` ou "Target method not found".

1. Publique de volta o código anterior das functions afetadas (mesmo nome, mesma sequência de `await`s), com o `SKAIL_WORKLOAD` que as execuções usam.
2. Retome as execuções falhas manualmente no Monitor; os commands concluídos não repetem. Ver [Retomada manual de execuções falhas](/operar/retomada-manual-de-execucoes-falhas.md).
3. Refaça o deploy pelo caminho B.

## Checklist antes de aprovar o deploy

* A pipeline define `SKAIL_WORKLOAD` a partir da tag do build.
* Cada function alterada foi classificada: fluxo igual (A) ou fluxo diferente (B).
* Para B: workload novo criado, implantação separada, triggers atualizados depois da validação, plano para derrubar a antiga quando esvaziar.
* Records usados em argumentos, retornos e payloads não perderam nem renomearam propriedades que execuções antigas vão ler.
* Alguém vai olhar o Monitor nas primeiras horas: falhas por `SkailNonDeterministicException` aparecem nas retomadas, não no deploy.

## O que observar no Monitor

Depois do deploy: execuções novas na versão nova; retomadas na versão antiga sem falhas; a contagem da antiga caindo com o tempo.

## Próximos passos

[Como fazer deploy de uma nova versão do workload](/construir/configurar-e-hospedar/como-fazer-deploy-de-uma-nova-versao-do-workload.md) tem os detalhes por plataforma. [Versionamento](/aprender/fundamentos/versionamento-de-codigo-com-execucoes-em-andamento.md). [Workloads](/construir/portal/workloads.md).
