# Процедура перемикання та повернення — модель для адаптації

Кейс Capordia — це команда, яка обробляє незалежні партії. Мета —
відновити ідентифіковані роботи, не втративши їхнього прийняття. Планове
переривання можливе. Допустима тривалість, критерії якості та
відповідальність визначаються до вікна міграції.

## 1. Призначити відповідальних

| Роль | Відповідальність | Доказ, який слід зберегти |
|---|---|---|
| Керівник перемикання | Дозволяє зупинку, зміну повноважень і відновлення | Рішення та час UTC |
| Відповідальний за дані | Фіксує вхідні дані, контролює копію та інвентар | Версіонований маніфест і відбитки |
| Відповідальний за обробку | Зупиняє виробника, класифікує спроби | Реєстр партій і журнал процесу |
| Відповідальний за приймання | Порівнює вихідні дані та узгоджені критерії | Результати, відмови та згода на приймання |

Мала команда може суміщати ролі, але особа, яка надає прийняття, і та, яка
вміє зупинити старий орган повноважень, повинні бути ідентифіковані.
Наданий шаблон CSV не нав'язує жодного імені особи.

## 2. Встановити еталон перед копіюванням

Присвоїти кожній партії стабільний ідентифікатор і версію вхідних даних.
Записати її шлях, відбиток, точну обробку та критерій прийняття. Розрізняти
запущену спробу та прийнятий результат. Зберегти параметри й залежності,
необхідні для відновлення, зокрема стани обчислень, яких вимагає ваше
програмне забезпечення. Назви файлу `final` недостатньо, щоб довести
прийняття.

У вправі вісім партій представляють 48 фіктивних купонів. Прийняття
ґрунтується на детермінованому результаті в цілих числах; це не модель
контрольної точки GPU. Вісім еталонних вихідних даних обчислюються до
розриву.

## 3. Зупинити надходження нових робіт

Закрити приймання нових партій і зафіксувати останній прийнятий
ідентифікатор. Зупинити worker або дочекатися передбаченої межі
відновлення. Підтвердити, що жоден процес старої машини більше не може
приймати вихідні дані. Класифікувати реєстр: завершено, у процесі, до
відновлення. Зберегти сліди неоднозначної партії замість того, щоб
оголосити її завершеною за припущенням.

У вправі розрив на LOT-004 дає 3 / 1 / 4. Перезапуск без звірки
відхиляється. Реєстр та його результати залишаються разом.

## 4. Копіювати, контролювати, змінювати повноваження

Ціль повинна мати зафіксований набір, необхідний стан і сумісну програму.
Перевірити відбитки та інвентар із цілі. Заблокувати відновлення, якщо
вхідні дані відсутні, якщо маніфест змінився або якщо результат більше не
відповідає своєму відбитку та правилу прийняття.

У цій вправі `basculer` спершу закриває джерело, потім копіює файли після
закриття з'єднань. Програма відкриває ціль для продакшену лише після
контролю. Не слід імітувати гаряче копіювання активної бази поза цією
процедурою. Невдача залишає джерело зупиненим.

У реальній системі закриття локального файлу не забороняє ізольованій
старій машині продовжувати. Ексклюзивне право публікації повинна
забезпечити система, яка отримує результати, з відмовою старим правам і
доказом цієї відмови. Ця програма не надає такого захисту.

## 5. Звірити та прийняти

Перевірити, що всі завершені результати наявні та прийнятні. Спроби в
процесі без прийняття повертаються до відновлення після підтвердження
зупинки їхнього старого виробника. Зробити обмежене відновлення перед
повторним відкриттям приймання. Порахувати очікувані партії, прийняті
унікальні ідентифікатори, помилки та відновлення. Зареєструвати прийняття,
окреме від простого завершення процесу.

У програмі: `preparer-reprise` перетворює єдину партію в процесі на партію
до відновлення. `executer` не перераховує три завершені партії. Фінальний
контроль вимагає вісім прийнятих вихідних даних, ідентичних еталону.
LOT-004 має дві спроби, але лише один прийнятий результат.

## 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. Завершити міграцію

Зберегти маніфест, реєстр до/після, відбитки, результати перевірки,
версію програми, рішення про відновлення та, за потреби, рішення про повернення.
Видаляти стару копію лише після періоду зберігання, обраного
командою. Вправа не видаляє жодної теки; її ресурси
фіктивні й можуть бути заархівовані разом зі звітом.
