chimera-reproduce-before-diagnosing
Diagnoza to twierdzenie o maszynie, której nie uruchomiłeś. Najpierw odtwórz awarię jednym krótkim poleceniem — zwłaszcza gdy diagnoza przyszła od kogoś innego.
Nadane przez osobę, która przeczytała kartę, a nie deklarowane przez sam plik. Karta, którą agent destyluje podczas przebiegu z niezaufaną treścią, rodzi się skażona i czeka na recenzję, zanim kiedykolwiek zostanie pobrana.
Kiedy przychodzi na myśl
- przyszło zgłoszenie błędu
- inny agent wyjaśnił przyczynę
- traceback wskazuje na plik
- naprawa błędu, którego nie widziałeś
Wartość zwykle kryje się w Unikaj i Sprawdź. Rób to sekcja, którą pisze każdy.
Treść karty powyżej to tłumaczenie. Angielski oryginał jest tym, co importuje CLI, co agent czyta w czasie działania i czego dotyczy hasz poniżej.
Wyzwalacz
Masz zamiar zmienić kod z powodu porażki, której osobiście nie widziałeś: czerwonego joba CI, fragmentu logu w zgłoszeniu, opisu użytkownika albo — i o to naprawdę chodzi w tej karcie — pewnej siebie diagnozy podanej ci przez recenzenta, podagenta albo narzędzie analizy statycznej, z plikiem i numerem linii włącznie.
Nie dotyczy sytuacji, gdy porażka już jest jednym poleceniem. Test, który zawodzi lokalnie, gdy go uruchamiasz, jest odtworzeniem; nie buduj drugiego. Nie dotyczy też pracy, w której nie ma żadnej porażki — nowej funkcji, refaktoru, pytania projektowego. Tam nie ma czego odtwarzać.
Rób
- Napisz najkrótszą rzecz, która zawodzi i daje się uruchomić samodzielnie: jeden skrypt, jedno pytestowe node id, jedno wywołanie CLI. "Uruchom zestaw i spójrz na trzeci błąd" to nie to — za każdym razem przeczytasz obok tego błędu.
- Uruchom to. Skopiuj prawdziwe wyjście do notatek: typ wyjątku, złą wartość obok oczekiwanej, kod wyjścia. Nie swoje streszczenie.
- Teraz postaw diagnozę i natychmiast spróbuj ją zabić. Wstaw
raise RuntimeError("here")na początku funkcji, którą diagnoza obwinia, i uruchom odtworzenie ponownie. Jeśli oryginalna porażka wciąż pojawia się bez zmian, ta funkcja nie leży na zawodzącej ścieżce, a diagnoza jest błędna, niezależnie od tego, jak dobrze była uargumentowana. - Napraw, uruchom to samo polecenie ponownie i zachowaj odtworzenie jako test w tej samej zmianie. Odtworzenie usunięte po poprawce nie może ci powiedzieć, kiedy poprawka zostanie cofnięta.
Unikaj
Edytowanie ramki stosu, którą rozpoznajesz. Rozpoznawana ramka to ta, którą już czytałeś, a nie ta, która jest zła, a wiarygodna edycja w niej często przesuwa objaw gdzie indziej — co czyta się potem jako postęp.
Unikaj dziedziczenia diagnozy jako faktu. Przekazane wyjaśnienie to tekst, a proces produkujący płynne błędne wyjaśnienie jest tym samym procesem, który produkuje płynne poprawne, więc płynność nie niesie informacji o tym, które dostałeś. Traktuj to jako hipotezę z nazwiskiem: przydatną do uporządkowania, co próbować, bezwartościową jako dowód.
# reviewer says the cache key is missing the tenant id
key = f"{tenant.id}:{user.id}"
# yes — first make the failure appear on demand
# repro.py: two tenants, same user id, assert the second read misses
I unikaj odruchu "uruchamiaj, aż będzie zielone" przy porażce sporadycznej. Ponowne uruchamianie nie diagnozuje wyścigu, tylko go ukrywa, i zamienia błąd odtwarzalny raz w błąd, którego nikt nie potrafi odtworzyć w ogóle.
Sprawdź
Zanim napiszesz poprawkę, odpowiedz tak albo nie: czy potrafię sprawić, by ta porażka zdarzyła się ponownie, teraz, jednym poleceniem? Jeśli nie, nie debugujesz, tylko spekulujesz z otwartym edytorem.
Po poprawce: czy to samo polecenie teraz przechodzi i czy widziałeś na własne oczy, jak wcześniej zawodziło? Poprawka potwierdzona wyłącznie zzielenieniem zestawu dowodzi, że zestaw jest zielony — a mógł taki być z niewłaściwego powodu, jeśli zawodzącego przypadku nigdy w zestawie nie było.
Ryzyko
Niektóre porażki są naprawdę drogie w odtworzeniu: wyścig pojawiający się raz dziennie, stan istniejący tylko na produkcji, wywalenie sześć godzin po starcie długiego joba. Upieranie się przy tanim odtworzeniu spala tam więcej, niż kosztuje błąd. Ogranicz to czasowo, a gdy limit minie, powiedz wprost, że poprawka jest niezweryfikowana, zamiast opisywać ją jako potwierdzoną.
Subtelniejszą pułapką jest nadmierna minimalizacja. Obcięty skrypt może zacząć zawodzić z innego powodu, i wtedy naprawiasz zabawkę. Broń się przed tym, stosując poprawkę także do oryginalnej zawodzącej ścieżki i potwierdzając, że oryginalny objaw tam znika — zminimalizowany przypadek jest narzędziem do znalezienia przyczyny, nigdy dowodem, że to była przyczyna.
Jak użyć
Karta to dane. Sklonuj repozytorium i zaimportuj ją ścieżką — to, co przychodzi przez sieć, jest traktowane jako skażone i wstrzymywane do zatwierdzenia. Taki jest pożądany sposób działania i dlatego nie ma tu instalatora w jednej linijce.
git clone https://github.com/brcampidelli/chimera-agent.gitchimera skills-import chimera-agent/skills/chimera-reproduce-before-diagnosing/SKILL.mdIntegralność
SHA-256 pliku w postaci opublikowanej. Importujący może sprawdzić, że otrzymał dokładnie to, co pokazała ta strona.
9d70fa5a61992e3b79a2d0ab2afb592c41a7b63274efbdca0afec1724a5b8338