> 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/construa/conceitos.md).

# Conceitos

Os conceitos que sustentam o skail, explicados uma vez e referenciados pelo resto da documentação. Sem passo a passo. A ordem abaixo é a ordem de leitura.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><h4>Execução durável</h4></td><td>O que é execução durável, qual problema ela resolve, o que o skail garante quando você escreve um fluxo desse jeito, e por que a comparação mais útil é com uma transação de banco de dados (com uma diferença que importa).</td><td><a href="/construa/conceitos/execucao-duravel.md">Execução durável</a></td><td><a href="https://1898946878-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsJmS5ILPG5x2x5j0WyiV%2Fuploads%2FsG7G8Q44udBRhplNQ8yU%2Fap-duravel-s.svg?alt=media">ap-duravel-s.svg</a></td></tr><tr><td><h4>Modelo de programação</h4></td><td>Todo código skail é formado pela function, que orquestra, e pelo command, que executa as operações de I/O. Esta página define o que cada um é, como eles se combinam e o que a linha do tempo de uma execução guarda.</td><td><a href="/construa/conceitos/functions-e-commands.md">Functions e commands</a></td><td><a href="https://1898946878-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsJmS5ILPG5x2x5j0WyiV%2Fuploads%2FuQ8MKri2FDpjFvH1ehQk%2Fap-modelo-s.svg?alt=media">ap-modelo-s.svg</a></td></tr><tr><td><h4>Determinismo e replay</h4></td><td>Uma function é reexecutada do início toda vez que a execução é retomada. Esta página explica por que isso acontece, o que pode e o que não pode estar dentro de uma function, e o que significa o erro de não determinismo.</td><td><a href="/construa/conceitos/replay-e-determinismo.md">Replay e determinismo</a></td><td><a href="https://1898946878-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsJmS5ILPG5x2x5j0WyiV%2Fuploads%2Fm6shtcEclDT7CKG1o4bj%2Fap-replay-s.svg?alt=media">ap-replay-s.svg</a></td></tr><tr><td><h4>Hibernação e retomada</h4></td><td>Quando uma function chega em um ponto de espera, ela para de existir em memória e volta exatamente de onde parou quando a espera termina. Esta página explica a hibernação, a retomada e o que elas permitem.</td><td><a href="/construa/conceitos/hibernacao-e-retomada.md">Hibernação e retomada</a></td><td><a href="https://1898946878-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsJmS5ILPG5x2x5j0WyiV%2Fuploads%2FdC0crgTYV9ElgrDKXlN3%2Fap-hibernacao-s.svg?alt=media">ap-hibernacao-s.svg</a></td></tr><tr><td><h4>Tempo e agendamento</h4></td><td>Como uma function espera um tempo sem segurar nada, o que acontece se a aplicação for reiniciada durante a espera, e por que a hora atual vem de um command.</td><td><a href="/construa/conceitos/tempo-e-agendamento.md">Tempo e agendamento</a></td><td><a href="https://1898946878-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsJmS5ILPG5x2x5j0WyiV%2Fuploads%2FtNC7PB00xJ73vPVoY3GE%2Fap-tempo-s.svg?alt=media">ap-tempo-s.svg</a></td></tr><tr><td><h4>Eventos externos e correlação</h4></td><td>Uma function pode parar e esperar algo que acontece fora dela: um webhook, uma aprovação, o retorno de outro sistema. Esta página explica como o skail associa o disparo à espera, o que acontece quando o evento chega antes ou nunca chega, e quem dispara por onde.</td><td><a href="/construa/conceitos/eventos-externos-e-correlacao.md">Eventos externos e correlação</a></td><td><a href="https://1898946878-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsJmS5ILPG5x2x5j0WyiV%2Fuploads%2FERw8gcp9KnsoAi1fjoGX%2Fap-eventos-s.svg?alt=media">ap-eventos-s.svg</a></td></tr><tr><td><h4>Falhas, retries e idempotência</h4></td><td>O que acontece quando um command lança exceção, quando uma function falha, quantas vezes o skail tenta de novo, e por que a idempotência da operação externa continua sendo responsabilidade do seu código.</td><td><a href="/construa/conceitos/retries-e-idempotencia.md">Retries e idempotência</a></td><td><a href="https://1898946878-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsJmS5ILPG5x2x5j0WyiV%2Fuploads%2FymGrKIQ3xUEpBYOh5VkA%2Fap-falhas-s.svg?alt=media">ap-falhas-s.svg</a></td></tr><tr><td><h4>Versionamento de código com execuções em andamento</h4></td><td>Uma execução que hibernou há três dias é retomada pelo código da versão em que ela começou: se <code>SKAIL_WORKLOAD</code> era <code>faturamento:v1.0.0</code>, é a <code>v1.0.0</code> que precisa estar publicada quando ela acordar. Esta página explica o que pode mudar nesse código sem quebrar a retomada, o que não pode, e como versionar quando precisa mudar o fluxo.</td><td><a href="/construa/conceitos/versoes-com-execucoes-em-andamento.md">Versões com execuções em andamento</a></td><td><a href="https://1898946878-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsJmS5ILPG5x2x5j0WyiV%2Fuploads%2FXhNSIfgNkCY44J6N5Q3y%2Fap-versionamento-s.svg?alt=media">ap-versionamento-s.svg</a></td></tr></tbody></table>
