# Procedimento de comutação e reversão — modelo a adaptar

O caso Capordia é uma equipe que processa lotes independentes. O objetivo
é retomar os trabalhos identificados sem perder sua aceitação. Uma
interrupção planejada é possível. A duração admissível, os critérios de
qualidade e as responsabilidades são decididos antes da janela de migração.

## 1. Designar as responsabilidades

| Papel | Responsabilidade | Evidência a conservar |
|---|---|---|
| Piloto de comutação | Autoriza parada, mudança de autoridade e retomada | Decisão e hora UTC |
| Responsável pelos dados | Congela as entradas, controla cópia e inventário | Manifesto versionado e impressões digitais |
| Responsável pelo processamento | Para o produtor, classifica as tentativas | Registro dos lotes e diário do processo |
| Responsável pela recepção | Compara saídas e critérios acordados | Resultados, recusas e acordo de recepção |

Uma equipe pequena pode acumular papéis, mas a pessoa que pronuncia
a aceitação e aquela que sabe parar a antiga autoridade devem ser
identificáveis. O modelo CSV fornecido não impõe nenhum nome de pessoa.

## 2. Estabelecer a referência antes de copiar

Atribuir a cada lote um identificador estável e uma versão de entrada.
Registrar seu caminho, sua impressão digital, o processamento exato e o critério
de aceitação. Distinguir uma tentativa iniciada de um resultado aceito.
Conservar os parâmetros e dependências necessários à retomada, incluindo
os estados de cálculo que seu software exige. Um nome de arquivo `final`
não basta para provar uma aceitação.

No exercício, oito lotes representam 48 cupons fictícios. A aceitação
baseia-se em um resultado determinístico em inteiros; não é um modelo de
checkpoint GPU. As oito saídas de referência são calculadas antes do corte.

## 3. Parar a chegada de novos trabalhos

Fechar a admissão de novos lotes e anotar o último identificador admitido.
Parar o worker ou aguardar a fronteira de retomada prevista. Confirmar
que nenhum processo da antiga máquina pode ainda aceitar saídas.
Classificar o registro: concluído, em andamento, a retomar. Preservar os vestígios
de um lote ambíguo em vez de declará-lo concluído por suposição.

No exercício, o corte em LOT-004 dá 3 / 1 / 4. Uma relançamento sem
reconciliação é recusado. O registro e seus resultados permanecem juntos.

## 4. Copiar, controlar, mudar de autoridade

O destino deve dispor do conjunto congelado, do estado necessário e do programa
compatível. Verificar as impressões digitais e o inventário a partir do destino.
Bloquear a retomada se uma entrada faltar, se o manifesto tiver mudado ou se um
resultado não corresponder mais à sua impressão digital e à regra de aceitação.

Neste exercício, `basculer` encerra primeiro a origem, depois copia os
arquivos após o fechamento das conexões. O programa abre o destino para a
produção somente após o controle. Não imitar uma cópia a quente de um
banco de dados ativo fora deste procedimento. Uma falha deixa a origem parada.

Em um sistema real, o encerramento de um arquivo local não impede uma antiga
máquina isolada de continuar. Um direito de publicação exclusivo deve ser
imposto pelo sistema que recebe os resultados, com recusa dos antigos direitos
e prova dessa recusa. O presente programa não fornece essa proteção.

## 5. Reconciliar e recepcionar

Verificar que todos os resultados concluídos estão presentes e aceitáveis.
As tentativas em andamento sem aceitação são remetidas para retomada após
confirmação da parada de seu antigo produtor. Fazer uma retomada limitada
antes de reabrir a admissão. Contabilizar os lotes esperados, os identificadores
únicos aceitos, os erros e as retomadas. Registrar uma aceitação
distinta do simples fim do processo.

No programa: `preparer-reprise` transforma o único lote em andamento em lote
a retomar. `executer` não recalcula os três lotes concluídos. O controle
final exige oito saídas aceitas e idênticas à referência. LOT-004 tem
duas tentativas, mas uma única saída aceita.

## 6. Acionar o retorno sobre um sinal observável

| Sinal | Decisão proposta para este exercício |
|---|---|
| Impressão digital de entrada diferente | Bloquear antes do processamento; recuperar a versão fixada |
| Resultado ausente ou alterado | Bloquear o recebimento; examinar o lote e o estado |
| Duas autoridades possíveis | Parar a retomada; estabelecer uma autoridade única |
| Programa incapaz de retomar | Manter a admissão fechada e transferir o estado recente para o ambiente compatível |
| Prazo da janela excedido | Aplicar a decisão e o limite definidos pela equipe antes da troca |

Se o destino já aceitou novos resultados, voltar à cópia antiga
da origem perderia essas aceitações. Congelar o destino, exportar seu estado
recente, verificá-lo e transferi-lo para um novo local de retorno.
Reconciliar os resultados antes de reiniciar. Na presença de efeitos externos,
seu inventário faz parte do retorno; este exercício não produz nenhum.

```text
python exercice.py basculer --source manuel/cible --destination manuel/retour --proprietaire atelier-retour
python exercice.py preparer-reprise --dossier manuel/retour
python exercice.py executer --dossier manuel/retour
python exercice.py comparer --reference manuel/reference --candidat manuel/retour
```

Após essa operação, `manuel/source` e `manuel/cible` são encerrados. Apenas
`manuel/retour` pode trabalhar. Se a cópia falhar ou se o controle recusar
um resultado, conservar as evidências e não desbloquear dois produtores.

## 7. Encerrar a migração

Conservar manifesto, registro antes/depois, impressões digitais, resultados de controle,
versão do programa, decisão de retomada e decisão de retorno eventual.
Excluir a cópia antiga somente após o período de conservação escolhido
pela equipe. O exercício não exclui nenhuma pasta; seus recursos são
fictícios e podem ser arquivados com o relatório.
