# 切り替えと切り戻しの手順 — 適応させるためのモデル

Capordiaのケースは、独立したバッチを処理するチームである。目的は、
承認状態を失うことなく、特定された作業を引き継ぐことにある。計画的な
中断は可能である。許容される所要時間、品質基準、責任範囲は、移行
ウィンドウの前に決定される。

## 1. 責任を指定する

| 役割 | 責任 | 保持する証跡 |
|---|---|---|
| 切り替え責任者 | 停止、権限の変更、再開を承認する | 決定と時刻（UTC） |
| データ責任者 | 入力を固定し、コピーとインベントリを管理する | バージョン管理されたマニフェストとハッシュ |
| 処理責任者 | プロデューサーを停止し、試行を分類する | バッチ登録簿とプロセスログ |
| 受け入れ責任者 | 出力と合意された基準を比較する | 結果、却下、受け入れ合意 |

小規模なチームでは役割を兼務できるが、受け入れを宣言する者と、
旧権限を停止する方法を知っている者は識別可能でなければならない。
提供されたCSVモデルは、いかなる個人名も強制しない。

## 2. コピーの前に基準を確立する

各バッチに安定した識別子と入力バージョンを付与する。
そのパス、ハッシュ、正確な処理、受け入れ基準を記録する。開始された
試行と受け入れられた結果を区別する。再開に必要なパラメータと依存関係
を、お使いのソフトウェアが要求する計算状態も含めて保持する。`final`
というファイル名だけでは、受け入れを証明するのに十分ではない。

演習では、8つのバッチが48枚の模擬クーポンを表す。受け入れは
整数による決定論的な結果に基づく。これはGPUチェックポイントの
モデルではない。8つの基準出力は、切断の前に計算される。

## 3. 新規作業の到着を停止する

新規バッチの受け入れを閉じ、最後に受け入れた識別子を記録する。
workerを停止するか、予定された再開境界を待つ。旧マシンのいかなる
プロセスも、もはや出力を受け入れられないことを確認する。登録簿を
分類する：完了、進行中、要再開。曖昧なバッチの痕跡は、推測で
完了と宣言するのではなく、保存する。

演習では、LOT-004での切断により3 / 1 / 4となる。照合なしの
再実行は拒否される。登録簿とその結果は一緒に保持される。

## 4. コピー、確認、権限の変更

ターゲットは、固定されたデータセット、必要な状態、互換性のある
プログラムを備えていなければならない。ターゲットからハッシュと
インベントリを検証する。入力が欠落している場合、マニフェストが
変更されている場合、または結果がそのハッシュと受け入れルールに
もはや一致しない場合、再開をブロックする。

この演習では、`basculer`はまずソースを閉じ、次に接続を閉じた後に
ファイルをコピーする。プログラムは、確認の後にのみターゲットを
本番に開放する。この手順の外で、稼働中のデータベースのホットコピーを
模倣してはならない。失敗した場合、ソースは停止したままとなる。

実際のシステムでは、ローカルファイルの閉鎖は、孤立した旧マシンが
継続することを妨げない。結果を受け取るシステムによって、排他的な
公開権限が課されなければならず、旧権限の拒否とその拒否の証跡を
伴う。本プログラムはこの保護を提供しない。

## 5. 照合と受け入れ

完了したすべての結果が存在し、受け入れ可能であることを検証する。
受け入れのない進行中の試行は、旧プロデューサーの停止を確認した後、
要再開に戻される。受け入れを再開する前に、限定的な再開を行う。
予想されるバッチ、受け入れられた一意の識別子、エラー、再開を
集計する。単なるプロセスの終了とは別に、受け入れを記録する。

プログラム内では、`preparer-reprise`は唯一の進行中バッチを要再開
バッチに変換する。`executer`は、完了した3つのバッチを再計算しない。
最終確認は、8つの受け入れられた出力が基準と同一であることを要求する。
LOT-004には2つの試行があるが、受け入れられた出力は1つだけである。

## 6. 観測可能なシグナルで切り戻しをトリガーする

| シグナル | この演習で提案される判断 |
|---|---|
| 入力フィンガープリントの不一致 | 処理前にブロックする。凍結したバージョンを復元する |
| 結果の欠落または改ざん | 受け入れをブロックする。バッチと状態を調査する |
| 権限が二つ存在する可能性 | 再開を停止する。単一の権限を確立する |
| プログラムが再開できない | 受け入れを閉じたままにし、最新の状態を互換環境へ転送する |
| ウィンドウ期限の超過 | 切り替え前にチームが定めた判断と制限を適用する |

ターゲットがすでに新しい結果を受け入れている場合、ソースの古いコピーに戻ると
これらの受け入れが失われます。ターゲットを凍結し、その最新の状態をエクスポートして
検証し、新しい復帰先へ転送します。再開前に結果を照合します。外部への影響がある場合、
その一覧は復帰の一部です。この演習ではいかなる影響も生じません。

```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
```

この操作の後、`manuel/source` と `manuel/cible` は終了します。作業できるのは
`manuel/retour` のみです。コピーが失敗した場合、またはチェックが結果を拒否した場合は、
証拠を保管し、二つのプロデューサーのロックを解除しないでください。

## 7. 移行を終了する

マニフェスト、変更前後のレジストリ、フィンガープリント、チェック結果、
プログラムのバージョン、再開の判断、および必要に応じて復帰の判断を保管します。
古いコピーは、チームが選択した保存期間が経過した後にのみ削除してください。
この演習ではいかなるフォルダーも削除しません。そのリソースは架空のものであり、
レポートとともにアーカイブできます。
