Przejdź do treści

Skills

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.

WzorzecPochodzenie: cleanStatus: activev0.1.0 · Apache-2.0

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

  1. 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.
  2. Uruchom to. Skopiuj prawdziwe wyjście do notatek: typ wyjątku, złą wartość obok oczekiwanej, kod wyjścia. Nie swoje streszczenie.
  3. 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.
  4. 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.git
chimera skills-import chimera-agent/skills/chimera-reproduce-before-diagnosing/SKILL.md

Integralność

SHA-256 pliku w postaci opublikowanej. Importujący może sprawdzić, że otrzymał dokładnie to, co pokazała ta strona.

9d70fa5a61992e3b79a2d0ab2afb592c41a7b63274efbdca0afec1724a5b8338

Przeczytaj kartę w repozytorium