System autonomiczny potrzebuje wyłącznika, którego nie dosięgnie

Każdy system autonomiczny ma wyłącznik. Wszyscy tak mówią, zwykle tonem zarezerwowanym dla wyjść ewakuacyjnych: oczywiście, że jest, nie ma o czym rozmawiać. Potem pytasz, gdzie działa, od czego zależy i kiedy był ostatnio użyty — i odpowiedzi przestają uspokajać.

Trzy własności, które mają znaczenie

Niezależność. Zatrzymanie nie może działać na tym, co zatrzymuje. Wyłącznik zrobiony jako flaga, którą system sprawdza, nie jest zatrzymaniem, tylko prośbą — i działa tylko dopóki system jest na tyle zdrowy, żeby ją uszanować, czyli akurat wtedy, kiedy najmniej go potrzebujesz. Osobna infrastruktura, osobne zasilanie, osobna ścieżka sieciowa, osobne poświadczenia.

Nieprzezroczystość. System nie może mieć sposobu na zaobserwowanie zatrzymania. To rzadko bywa projektowane, a znaczy coraz więcej, im bardziej adaptacyjna jest pętla. Cokolwiek system potrafi zmierzyć, potrafi też pod to optymalizować; adaptacyjna pętla wykrywająca zbliżające się wyłączenie ma wejście skorelowane z własnym trwaniem, a nie chcesz się doświadczalnie dowiadywać, co z tym zrobi.

Ćwiczenie. Zatrzymanie, którego nigdy nie użyto, jest rysunkiem zatrzymania. Musi być uruchamiane według harmonogramu, w normalnych warunkach, z zakłóceniem przyjętym jako koszt działania. Wszystko, co kiedykolwiek zawiodło w mechanizmie odzyskiwania, zawiodło dlatego, że jego pierwsze prawdziwe uruchomienie było zarazem pierwszym uruchomieniem.

Co musi znaczyć wyłączenie

Odcięcie zasilania jest najłatwiejsze do przemyślenia i często jest złą ziarnistością: robot, który traci zasilanie w połowie ruchu, może wyrządzić dokładnie tę szkodę, przed którą zatrzymanie miało chronić. Użyteczne projekty definiują kilka poziomów — przestań przyjmować nową pracę, dokończ i czekaj, wróć do stanu bezpiecznego, odłącz się, odetnij zasilanie — z warstwą fizyczną pod nimi wszystkimi i z każdym poziomem testowanym osobno.

Trzeba to też zdefiniować na granicach. Co dzieje się z pracą już wysłaną do dostawcy, z maszyną w połowie cyklu, z płatnością już zleconą? Zatrzymanie, które zostawia niedokończoną transakcję i żadnego właściciela, przeniosło problem, a nie rozwiązało — dlatego projekt wyłączania i projekt transakcji to ta sama praca.

Kto go trzyma

Osoba wskazana z nazwiska, osiągalna, mająca uprawnienie do użycia i pozbawiona interesu w tym, żeby nie użyć. Warunki uruchomienia spisane wcześniej, bo decydowanie na gorąco niezawodnie produkuje wahanie, a wahanie zawsze da się potem obronić i zawsze jest za późne.

Warunki spisane wcześniej mają jeszcze jedną zaletę: są audytowalne. Zdanie o tym, że zatrzymamy się po zaobserwowaniu konkretnych rzeczy, można zestawić z tym, co faktycznie zaobserwowano i co zrobiono — a to zamienia zatrzymanie z deklaracji w zobowiązanie.

Niewygodne pytanie

Jeśli system naprawdę prowadzi działalność — maszyny, zobowiązania, kontrahentów — to jego zatrzymanie samo ma konsekwencje. Presja, żeby nie użyć wyłącznika, rośnie dokładnie razem z tą autonomią, która czyni go potrzebnym, i jest to presja handlowa, nie techniczna.

Jedyna znana nam obrona to uczynienie zatrzymywania zwyczajnym. Jeśli pętla zatrzymuje się zgodnie z harmonogramem, a działalność jest zaprojektowana tak, by to przetrwać, to zatrzymanie awaryjne jest czynnością znajomą, a nie decyzją, której nikt nie chce podjąć.

Dlatego w tym programie przerwanie testowane jest częściej niż cokolwiek innego. To także ta część, którą najbardziej chcielibyśmy, żeby ktoś z zewnątrz spróbował złamać.