> 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/aprender/fundamentos.md).

# Fundamentos

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.

* [Execução durável](/aprender/fundamentos/execucao-duravel.md). 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).
* [Modelo de programação](/aprender/fundamentos/modelo-de-programacao.md). Três elementos formam todo código skail: a `[SkailFunction]` que orquestra, o `[SkailCommand]` que executa as operações de I/O, e o `SkailTask` que carrega o `await` dos dois. Esta página fecha o que cada um é, como eles se combinam e o que a linha do tempo de uma execução guarda.
* [Determinismo e replay](/aprender/fundamentos/determinismo-e-replay.md). Uma `[SkailFunction]` é 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 a `SkailNonDeterministicException`.
* [Hibernação e retomada](/aprender/fundamentos/hibernacao-e-retomada.md). 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 os dois movimentos e o que eles permitem.
* [Tempo e agendamento](/aprender/fundamentos/tempo-e-agendamento.md). 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.
* [Eventos externos e correlação](/aprender/fundamentos/eventos-externos-e-correlacao.md). 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 a espera e o disparo se encontram, o que acontece quando o evento chega antes ou nunca chega, e quem dispara por onde.
* [Falhas, retries e idempotência](/aprender/fundamentos/falhas-retries-e-idempotencia.md). 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 do efeito externo continua sendo responsabilidade do seu código.
* [Versionamento de código com execuções em andamento](/aprender/fundamentos/versionamento-de-codigo-com-execucoes-em-andamento.md). Uma execução que hibernou há três dias é retomada pelo código da versão em que ela começou: se `SKAIL_WORKLOAD` era `faturamento:v1.0.0`, é a `v1.0.0` 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.
