Tkanina zamówiła drugi robot najpierw.

To była pierwsza rzecz, która wyglądała źle.

Nie było źle na podłodze. Źle na księdze.

Przekazanie już miało miejsce w przejściu. Robot A przetoczył pojemnik do punktu transferowego, zatrzymał się czysto, a Robot B podniósł go bez wahania. Koordynacja off-chain wyglądała idealnie. Telemetria z obu jednostek zgadzała się tak, jak chcesz, gdy dwie agencje dzielą jedną granicę zadania, a żadna z nich nie ma czasu na dramatyczność.

Potem otworzyłem widok cyklu życia zadania.

B ruszył pierwszy.

Nie... nie przeniesiono najpierw. Zarejestrowano najpierw.

Przewinąłem wstecz.

Ten sam wynik.

Stan przejścia cyklu życia zadania Robota B przeszedł do zaakceptowanego i aktywnego, zanim przejście zakończenia Robota A całkowicie się ustabilizowało. Na podłodze A zakończył, a B podążył. W protokole natywnym agenta Fabric zamówienie przyszło w drugą stronę.

Sprawdziłem ślady wykonania Fabric obok siebie. Ostateczny pakiet telemetryczny Robota A był tam. Dołączony sygnał zakończenia. Potwierdzenie punktu transferu obecne. Ślad aktywacji Robota B był tam również, tylko kilka milisekund później, i to wystarczyło, aby sekwencja wydawała się niewłaściwa w sposób, którego nie mogłem zignorować.

Nieuszkodzony.

Gorszy.

Czysty.

Odświeżyłem widok zamówienia księgi na Fabric, ponieważ czasami interfejs buforuje poprzednią sekwencję, gdy dwa powiązane zadania lądują w tym samym wąskim oknie. Chciałem, aby tak było.

To nie było.

Zamówienie pozostało.

Umowa na przydział zadania Robota B została zakończona jako pierwsza. Finalizacja Robota A wciąż się zamykała za nim. Łańcuch nie stracił żadnego z wydarzeń. Po prostu sprawił, że wyglądały na czystsze, niż były.

Położyłem się bliżej panelu. Zbyt blisko. Wentylator chłodzący pod konsolą zmienił ton na sekundę, a potem znowu się ustabilizował.

Pobrałem rekordy tożsamości maszyny na Fabric, aby upewnić się, że nie pomieszałem agentów. Ten sam klaster operatorów. Ten sam strumień roboczy. To samo zadanie transferu. Inne podpisy robotów.

Poprawna para.

Z powrotem do śladów.

Robot A: ostatni ruch zakończony.

Robot B: potwierdzenie inicjacji odbioru.

Raz kliknąłem w złą linię cyklu życia, zauważyłem to, cofnąłem się. Ten sam wynik.

Sprawdziłem czas sieci następnie. Nawyk.

Brak flag anomalii. Brak weryfikacji. Brak oczywistych odchyleń propagacyjnych. Zamówienie nie było dziwne, ponieważ sieć była chora. Było dziwne, ponieważ rozliczenie na Fabric musiało wybrać jedną sekwencję, a ta, którą wybrało, spłaszczyła przekazanie do czegoś, co wyglądało schludniej, niż faktycznie żyły maszyny.

Robot B był już w połowie drogi wzdłuż pasa z pojemnikiem w tym momencie.

Robot A przeszedł na bezczynne telemetry i po prostu dodawał pakiety sygnałów zdrowotnych.

Otworzyłem dzienniki harmonogramu, myśląc, że może warstwa koordynacji uruchomiła B zbyt wcześnie. To byłoby łatwiejsze do zniesienia. Jeden zły próg. Jeden niedbały wyzwalacz. Napraw to i idź dalej.

Ale harmonogram był czysty.

Wydany w tolerancji.

B aktywowany w tolerancji.

Wróciłem ponownie do panelu cyklu życia zadania. A finalizujący. B już aktywny. Rozliczenie sprawia, że wyglądają na sekwencyjne, kiedy naprawdę zachodziły na siebie na krawędzi przekazania.

Jeśli zacieśnię okno koordynacji Fabric, zablokuję transfery, które są już fizycznie czyste. Jeśli zostawię luźno, księga wciąż zapisuje wersję przekazania, która wydaje się bardziej pewna, niż podłoga kiedykolwiek była.

Zawiesiłem się nad zestawem reguł, gdzie mogłem zmusić Robota B do czekania na ostateczne zakończenie księgi Robota A przed aktywacją.

Bezpieczniej na papierze.

Wolniej w przejściu.

I prawdopodobnie fałszywe w inny sposób, ponieważ wtedy zmuszałbym roboty do czekania na zapis przekazania zamiast na samo przekazanie.

Inne przejście dotarło, podczas gdy nadal się temu przyglądałem.

Robot A: zakończony.

Robot B: rosnący ślad wykonania.

Nie dotknąłem reguły.

Inna aktualizacja cyklu życia dotarła pod nią, zanim zdecydowałem, czy zacieśnić okno, czy zostawić to w spokoju.

Podłoga już się przemieściła.

Fabric nie miał. #ROBO $ROBO @Fabric Foundation