Phase 15 - Lesson 16
Checkpoints e Rollback
Cada transição de estado do grafo persiste. Quando um worker falha, sua concessão (lease) expira e outro worker assume a partir do checkpoint mais recente. Os Cloudflare Durable Objects mantêm o estado por horas ou semanas. Propor-depois-confirmar (Lição 15) define um plano de rollback por ação. A verificação pós-ação fecha o ciclo. O Artigo 14 da Lei de IA da UE torna o monitoramento humano eficaz obrigatório para sistemas de alto risco — na prática, isso significa que os checkpoints devem ser pesquisáveis, os rollbacks devem ser ensaiados e a trilha de auditoria deve sobreviver a um deploy. O modo de falha crítico: sem chaves de idempotência e verificações de pré-condição, uma nova tentativa após uma falha temporária pode executar duas vezes uma ação já aprovada. A verificação pós-ação é o que a detecta.
Tipo: Aprender Idiomas: Python (stdlib, máquina de estados de checkpoint e rollback) Pré-requisitos: Phase 15 · 12 (Durable execution), Phase 15 · 15 (Propose-then-commit) Tempo: ~60 minutos
O Problema
A execução durável (Lição 12) torna um agente que falhou recuperável. Propor-depois-confirmar (Lição 15) torna uma ação aprovada auditável. Esta lição une ambos: o que acontece quando uma ação aprovada é executada parcialmente, falha e é retomada? Quando o rollback é executado e contra qual estado?
Sistemas reais conectam isso de forma diferente:
- O LangGraph salva checkpoints de cada transição de estado do grafo no PostgreSQL. Em caso de falha do worker, a concessão é liberada e outro worker retoma no checkpoint mais recente. Os fluxos de trabalho pausam em
interrupt(), que também persiste. - Os Cloudflare Durable Objects mantêm o estado por chave durante horas ou semanas. Coloque a computação junto com o armazenamento para a ação aprovada.
- O Microsoft Agent Framework expõe primitivas de
Checkpointna API do fluxo de trabalho; o replay mais a idempotência cobrem as tentativas de reexecução.
Em todos os casos, a combinação que realmente funciona é: chave de idempotência (evita execução dupla) + verificação de pré-condição (o estado ainda é aquele com base no qual aprovamos) + verificação pós-ação (o efeito colateral realmente aconteceu) + rollback em caso de falha na verificação.
O Conceito
Cada transição persiste
Uma transição de estado do grafo é qualquer etapa que move o fluxo de trabalho de um estado nomeado para outro. Implementações ingênuas persistem apenas em pontos de confirmação (commit) específicos; implementações de produção persistem cada transição. O custo (algumas gravações extras) é pequeno em relação ao ganho de confiabilidade (o replay pode começar de qualquer lugar, a recuperação de concessão é precisa).
Recuperação de concessão
Quando um worker falha, o fluxo de trabalho não é perdido; a concessão (um direito temporário de que este worker está executando esta execução) simplesmente expira. Outro worker assume o checkpoint mais recente e retoma. O mecanismo de concessão é o que permite que sistemas de produção sobrevivam a deploys contínuos (rolling deploys) sem perder o trabalho em andamento.
Idempotência mais pré-condições
A idempotência sozinha não é suficiente. Considere: um fluxo de trabalho é aprovado para "transferir
Toda ação consequente precisa de ambos:
- Chave de idempotência: evita a execução dupla.
- Verificação de pré-condição: confirma se o estado ainda é consistente com o que foi aprovado.
Verificação pós-ação
"A ferramenta retornou 200" não é uma verificação. Uma verificação real lê novamente o estado de destino e confirma se o efeito colateral realmente aconteceu. Padrões:
- Atualização de banco de dados:
UPDATE ... RETURNING *e então declarar (assert) que a linha retornada corresponde ao estado pretendido. - Envio de e-mail: verificar a pasta de enviados para o ID da mensagem após o envio.
- Gravação de arquivo: ler o arquivo de volta e gerar seu hash.
- Chamada de API: fazer um
GETsubsequente no recurso de destino.
Se a verificação falhar, o fluxo de trabalho estará em um estado sabidamente ruim. O rollback é ativado.
Planos de rollback
Cada ação consequente em propor-depois-confirmar (Lição 15) carrega um plano de rollback. Tipos:
- Rollback in-band: reverte o efeito colateral diretamente (
DELETEapósINSERT,Send-correction-emailapós o envio). - Transação de compensação: uma nova ação que neutraliza a original (padrão SAGA tradicional).
- Rollback out-of-band: alerta um humano, pausa o fluxo de trabalho, deixa o estado ruim para investigação.
O rollback no-op ("não podemos desfazer isso") deve ser nomeado na proposta. Ações sem rollback exigem um HITL mais forte no momento da confirmação (desafio e resposta da Lição 15).
Leitura operacional do Artigo 14 da Lei de IA da UE
O Artigo 14 exige "supervisão humana eficaz" para sistemas de alto risco. Em termos operacionais, os implementadores interpretam isso como:
- Os checkpoints são pesquisáveis por um auditor.
- Os rollbacks são ensaiados (testados de ponta a ponta pelo menos uma vez).
- A trilha de auditoria sobrevive a um deploy (o backend de checkpoint não é efêmero).
- As verificações que falham geram alertas, não sendo apenas registradas silenciosamente em logs.
Um fluxo de trabalho que falha no meio do commit, retoma e conclui o efeito colateral sem um caminho de verificação + rollback não passa no teste do Artigo 14.
O modo de falha crítico: a execução dupla
O incidente de produção mais comum neste espaço:
- Ação aprovada, chave de idempotência k.
- O commit começa, executa, retorna 200.
- O fluxo de trabalho falha antes de persistir o status "confirmado" (committed).
- O fluxo de trabalho é retomado; vê "aprovado, mas não confirmado"; executa novamente.
- O efeito colateral ocorre duas vezes.
Mitigação: persista uma intenção "em andamento" (in-flight) antes da execução, execute com uma chave de idempotência e, em seguida, marque como "confirmado" somente após a verificação pós-ação ser bem-sucedida. Se a ação ocorrer e a gravação do status falhar, você saberá que deve verificar e (se necessário) disparar novamente. Se a gravação do status for bem-sucedida e a ação falhar, você verifica e dispara exatamente uma vez por meio do caminho de recuperação.
Use-o
code/main.py implementa um fluxo de trabalho com checkpoint, idempotência, pré-condições, verificação e rollback. O driver simula quatro cenários: execução limpa, nova tentativa após falha (a idempotência captura), falha de pré-condição (o fluxo de trabalho é abortado sem disparar) e falha de verificação (o rollback é ativado).
Envie-o
outputs/skill-rollback-rehearsal.md projeta um teste de ensaio de rollback para um fluxo de trabalho proposto e audita o backend de checkpoint para persistência da trilha de auditoria.
Exercícios
Execute
code/main.py. Verifique os quatro cenários. Para o caso de falha durante o commit, confirme que a ação é disparada exatamente uma vez nas novas tentativas.Modifique o padrão "marcar como concluído primeiro, depois fazer" para que a gravação do status ocorra após a ação. Execute novamente o cenário de falha. Meça quantas ações duplicadas são disparadas.
Projete um plano de rollback para uma ação de produção específica (por exemplo, "postar em um canal do Slack"). Classifique como in-band, de compensação ou out-of-band. Justifique a escolha.
Pegue um fluxo de trabalho que você conhece. Identifique cada transição de estado. Marque cada uma com um requisito de durabilidade (persistir / não persistir). Conte as que você não está persistindo atualmente.
Teste de rollback ensaiado: projeta um teste de ponta a ponta que executa um fluxo de trabalho real, simula uma falha nele e confirma que o caminho de rollback é ativado. O que o teste valida (assert)?
Termos-Chave
| Termo | O que as pessoas dizem | O que realmente significa |
|---|---|---|
| Checkpoint | "Ponto de salvamento" | Cada transição de estado do grafo persiste em um armazenamento durável |
| Concessão (Lease) | "Reivindicação do worker" | Reivindicação de curta duração de que um worker está executando uma execução; expira em caso de falha |
| Pré-condição | "Portão de estado" | Asserção de que o estado ainda é consistente com a ação aprovada |
| Verificação pós-ação | "Verificação de releitura" | Confirma se o efeito colateral realmente aconteceu no sistema de destino |
| Rollback in-band | "Desfazer direto" | Reverte o efeito colateral com a operação inversa |
| Transação de compensação | "Desfazer SAGA" | Uma nova ação que neutraliza a original |
| Marcar como concluído primeiro | "Ordem de gravação de status" | Persiste o status de confirmado antes de retornar do commit |
| Artigo 14 | "Supervisão humana da Lei de IA da UE" | Operacional: checkpoints pesquisáveis, rollbacks ensaiados, trilha auditável |
Leituras Adicionais
- Microsoft Agent Framework — Checkpointing and HITL — primitivas de checkpoint e recuperação de concessão.
- Cloudflare Agents — Human in the loop — Durable Objects como um substrato de estado.
- EU AI Act — Article 14: Human oversight — linha de base regulatória.
- Anthropic — Measuring agent autonomy in practice — estrutura de confiabilidade para fluxos de trabalho de longo horizonte.
- Anthropic — Claude Code Agent SDK: agent loop — formato de fluxo de trabalho para Claude Code Routines.