# Procedura przełączenia i powrotu — szablon do dostosowania

Przypadek Capordia to zespół, który przetwarza niezależne partie. Celem
jest wznowienie zidentyfikowanych zadań bez utraty ich akceptacji. Planowane
przerwanie jest możliwe. Dopuszczalny czas, kryteria jakości i zakres
odpowiedzialności są ustalane przed oknem migracji.

## 1. Wyznaczenie odpowiedzialności

| Rola | Odpowiedzialność | Dowód do zachowania |
|---|---|---|
| Prowadzący przełączenie | Autoryzuje zatrzymanie, zmianę uprawnień i wznowienie | Decyzja i godzina UTC |
| Odpowiedzialny za dane | Zamraża dane wejściowe, kontroluje kopię i inwentarz | Wersjonowany manifest i sumy kontrolne |
| Odpowiedzialny za przetwarzanie | Zatrzymuje producenta, klasyfikuje próby | Rejestr partii i dziennik procesu |
| Odpowiedzialny za odbiór | Porównuje wyniki i uzgodnione kryteria | Wyniki, odrzucenia i zgoda na odbiór |

Mały zespół może łączyć role, ale osoba wydająca akceptację i osoba, która
potrafi zatrzymać stare uprawnienia, muszą być identyfikowalne. Dostarczony
szablon CSV nie narzuca żadnych nazwisk.

## 2. Ustalenie punktu odniesienia przed kopiowaniem

Nadaj każdej partii stały identyfikator i wersję danych wejściowych.
Zapisz jej ścieżkę, sumę kontrolną, dokładne przetwarzanie i kryterium
akceptacji. Rozróżnij uruchomioną próbę od zaakceptowanego wyniku.
Zachowaj parametry i zależności niezbędne do wznowienia, w tym
stany obliczeń wymagane przez Twoje oprogramowanie. Nazwa pliku `final`
nie wystarcza do udowodnienia akceptacji.

W ćwiczeniu osiem partii reprezentuje 48 fikcyjnych kuponów. Akceptacja
opiera się na deterministycznym wyniku w liczbach całkowitych; nie jest to
model checkpointu GPU. Osiem wyników referencyjnych jest obliczanych przed
przerwaniem.

## 3. Zatrzymanie napływu nowych zadań

Zamknij przyjmowanie nowych partii i zanotuj ostatni przyjęty identyfikator.
Zatrzymaj worker lub poczekaj na przewidzianą granicę wznowienia. Potwierdź,
że żaden proces starej maszyny nie może jeszcze przyjmować wyników.
Sklasyfikuj rejestr: zakończone, w toku, do wznowienia. Zachowaj ślady
niejednoznacznej partii, zamiast uznawać ją za zakończoną na podstawie
przypuszczenia.

W ćwiczeniu przerwanie na LOT-004 daje 3 / 1 / 4. Ponowne uruchomienie bez
uzgodnienia jest odrzucane. Rejestr i jego wyniki pozostają razem.

## 4. Kopiowanie, kontrola, zmiana uprawnień

Cel musi dysponować zamrożonym zbiorem, niezbędnym stanem i zgodnym
programem. Zweryfikuj sumy kontrolne i inwentarz z poziomu celu.
Zablokuj wznowienie, jeśli brakuje danych wejściowych, jeśli manifest się
zmienił lub jeśli wynik nie odpowiada już swojej sumie kontrolnej i regule
akceptacji.

W tym ćwiczeniu `basculer` najpierw zamyka źródło, a następnie kopiuje
pliki po zamknięciu połączeń. Program otwiera cel dla produkcji dopiero
po kontroli. Nie należy naśladować kopiowania aktywnej bazy w trybie gorącym
poza tą procedurą. Niepowodzenie pozostawia źródło zatrzymane.

W rzeczywistym systemie zamknięcie pliku lokalnego nie uniemożliwia
odizolowanej starej maszynie kontynuowania pracy. Wyłączne prawo publikacji
musi być wymuszone przez system, który odbiera wyniki, wraz z odmową starych
uprawnień i dowodem tej odmowy. Niniejszy program nie zapewnia tej ochrony.

## 5. Uzgodnienie i odbiór

Sprawdź, czy wszystkie zakończone wyniki są obecne i akceptowalne.
Próby w toku bez akceptacji są przekazywane do wznowienia po potwierdzeniu
zatrzymania ich starego producenta. Wykonaj ograniczone wznowienie przed
ponownym otwarciem przyjmowania. Zlicz oczekiwane partie, unikalne
zaakceptowane identyfikatory, błędy i wznowienia. Zapisz akceptację
odrębną od samego zakończenia procesu.

W programie: `preparer-reprise` przekształca jedyną partię w toku w partię
do wznowienia. `executer` nie przelicza trzech zakończonych partii. Kontrola
końcowa wymaga ośmiu zaakceptowanych wyników identycznych z punktem
odniesienia. LOT-004 ma dwie próby, ale tylko jeden zaakceptowany wynik.

## 6. Wyzwolenie powrotu na podstawie obserwowalnego sygnału

| Sygnał | Proponowana decyzja dla tego ćwiczenia |
|---|---|
| Inny odcisk wejścia | Zablokować przed przetwarzaniem; odnaleźć zamrożoną wersję |
| Brakujący lub zmieniony wynik | Zablokować odbiór; zbadać partię i stan |
| Dwie możliwe autorytety | Zatrzymać wznowienie; ustanowić pojedynczy autorytet |
| Program niezdolny do wznowienia | Utrzymać zamknięty nabór i przenieść najnowszy stan do zgodnego środowiska |
| Przekroczony limit okna | Zastosować decyzję i limit ustalone przez zespół przed przełączeniem |

Jeśli cel zaakceptował już nowe wyniki, powrót do starej kopii
źródła utraciłby te akceptacje. Zamrozić cel, wyeksportować jego najnowszy stan,
zweryfikować go i przenieść do nowej lokalizacji powrotu.
Uzgodnić wyniki przed ponownym uruchomieniem. W przypadku efektów zewnętrznych
ich inwentarz jest częścią powrotu; to ćwiczenie nie tworzy żadnych.

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

Po tej operacji `manuel/source` i `manuel/cible` są zamknięte. Tylko
`manuel/retour` może pracować. Jeśli kopia się nie powiedzie lub jeśli kontrola odrzuci
wynik, zachować dowody i nie odblokowywać dwóch producentów.

## 7. Zamknąć migrację

Zachować manifest, rejestr przed/po, odciski, wyniki kontroli,
wersję programu, decyzję o wznowieniu i ewentualną decyzję o powrocie.
Usunąć starą kopię dopiero po okresie przechowywania wybranym
przez zespół. Ćwiczenie nie usuwa żadnego folderu; jego zasoby są
fikcyjne i można je zarchiwizować wraz z raportem.
