Przejdź do głównej zawartości

Naprawianie błędów: Obsługa awarii i wychodzenie z impasu

Claude właśnie zrefaktorował twój moduł uwierzytelniania. Dotknął sześciu plików, zaktualizował testy, a potem — type checker pokazuje 23 błędy. Testy, które przechodziły pięć minut temu, teraz zawodzą w trzech zestawach testowych. Claude próbuje naprawić błędy, ale wprowadza nowe. Jesteś dwie iteracje w głąb spirali naprawa-naprawy i baza kodu jest gorsza niż na początku. Musisz wrócić do znanego dobrego stanu, zrozumieć, co poszło nie tak, i spróbować ponownie z lepszym podejściem.

Ten poradnik obejmuje każdy mechanizm odzyskiwania, jaki daje ci Claude Code: checkpointy do cofania edycji, zarządzanie sesjami do czystego restartu, strategie przerwania pętli błędów i workflow zapobiegające kaskadowym awariom w pierwszej kolejności.

  • Przewijanie checkpointu Esc-Esc, które natychmiast cofa zmiany Claude
  • Workflow odzyskiwania po kaskadowych awariach testów bez utraty postępu
  • Strategie wyrwania Claude z pętli naprawa-naprawy
  • Techniki zarządzania kontekstem, gdy sesje stają się zbyt długie
  • Wzorce prewencyjne redukujące potrzebę odzyskiwania w pierwszej kolejności

Za każdym razem, gdy Claude edytuje plik, tworzy migawkę poprzedniej zawartości przed dokonaniem zmian. Te checkpointy są twoją siatką bezpieczeństwa.

Najszybsze odzyskiwanie: naciśnij Esc dwa razy. To otwiera interfejs przewijania checkpointu, pozwalając ci przewinąć przez edycje Claude i przywrócić dowolny poprzedni stan. Każdy checkpoint pokazuje, co się zmieniło, więc możesz wybrać dokładnie, do którego punktu cofnąć.

To jest oddzielne od git. Nie musisz niczego commitować. Checkpointy obejmują wszystkie edycje plików dokonane przez Claude podczas bieżącej sesji.

# Po naciśnięciu Esc dwa razy zobaczysz coś takiego:
# [3] Edytowano src/lib/auth.ts - zrefaktorowano handler sesji
# [2] Edytowano src/lib/auth.ts - dodano rate limiting
# [1] Edytowano src/api/routes/login.ts - zaktualizowano handler logowania
#
# Wybierz checkpoint, aby cofnąć do tego stanu

Jeśli wolisz zostać w rozmowie:

Cofnij ostatnią zmianę, którą dokonałeś w src/lib/auth.ts.

Lub aby cofnąć wszystko od konkretnej akcji:

Cofnij wszystkie zmiany z refaktoryzacji uwierzytelniania.
Przywróć każdy plik, którego dotknąłeś, do tego, jak było wcześniej.

Najczęstszy tryb awarii: Claude wprowadza błąd, próbuje go naprawić, wprowadza nowy błąd, naprawia ten, a kod stopniowo się pogarsza z każdą iteracją. Oto jak się wyrwać.

W momencie, gdy zauważysz, że Claude chodzi w kółko, przerwij:

Stop. Nie rób więcej zmian. Ostatnie trzy próby pogorszyły
sprawy. Pozwól mi ocenić, gdzie jesteśmy.

Następnie poproś Claude o ocenę bieżącego stanu bez dokonywania edycji:

To zmusza Claude do rozumowania o problemie zamiast reaktywnego łatania objawów.

Czasami najczystszą ścieżką do przodu jest cofnięcie wszystkiego i start od nowa z innym podejściem:

Cofnij wszystkie zmiany z tej sesji. Następnie spróbujmy innego
podejścia do refaktoryzacji uwierzytelniania. Zamiast restrukturyzacji
całego modułu, zmień tylko logikę obsługi sesji i
zostaw resztę nietknięta.

Świeża próba z węższym zakresem niemal zawsze daje lepsze wyniki niż próba uratowania zepsutej refaktoryzacji.

Jeśli Claude ciągle zawodzi tą samą strategią, przekieruj jawnie:

Przestań próbować naprawić błąd typu zmieniając interfejs.
Zamiast tego zaktualizuj implementację w auth-service.ts, aby pasowała
do istniejącego interfejsu. Interfejs jest poprawny;
implementacja jest błędna.

Claude często potrzebuje, abyś powiedział mu, która strona konfliktu jest autorytatywna. Bez kierunku może ciągle oscylować między zmianą interfejsu a zmianą implementacji.

Gdy wiele testów zawodzi po zmianie, awarie są zwykle połączone. Poproś Claude o znalezienie przyczyny źródłowej:

To zapobiega temu, aby Claude próbował naprawiać każdy test indywidualnie, co często prowadzi do niespójnych łatek w plikach testowych.

Gdy masz wiele awarii, odzyskuj przyrostowo:

  1. Uruchom najpierw type checker — Błędy typu są najczęstszą przyczyną źródłową awarii testów po refaktoryzacji. Napraw te przed patrzeniem na wyniki testów.

  2. Uruchamiaj jeden plik testowy na raz — Zacznij od pliku testowego najbliższego zmienionemu kodowi. Napraw ten przed przejściem do zależnych plików testowych.

  3. Weryfikuj po każdej poprawce — Uruchom pełny zestaw po naprawieniu każdego pliku testowego, aby zobaczyć, czy poprawka rozwiązała awarie gdzie indziej też.

  4. Zatrzymaj się, gdy zielono — Nie kontynuuj “naprawiania” testów, które już przechodzą.

Uruchom najpierw npx tsc --noEmit. Napraw wszystkie błędy typu. Następnie uruchom
testy tylko dla @src/lib/auth.test.ts. Napraw wszelkie awarie.
Następnie uruchom pełny zestaw, aby zobaczyć, co jeszcze się wyjaśniło.

Długie sesje gromadzą kontekst: odczyty plików, outputy komend, nieudane próby, wycofane podejścia. W końcu odpowiedzi Claude się pogarszają, ponieważ ważne informacje są zakopane pod szumem.

Gdy Claude zaczyna tracić ślad wzorców twojego projektu lub powtarzać wcześniejsze błędy:

/compact skup się na refaktoryzacji uwierzytelniania i bieżących awariach testów

Komenda /compact podsumowuje rozmowę i zwalnia przestrzeń kontekstową. Argument focus mówi Claude, na czym priorytetyzować w podsumowaniu, więc ważny kontekst przetrwa kompakcję.

Jeśli kompakcja nie wystarczy, wyczyść całą rozmowę:

/clear

Następnie natychmiast przywróć kontekst:

Pracowałem nad refaktoryzacją modułu uwierzytelniania. Bieżący
stan to:
- Zmieniłem src/lib/auth.ts, aby używać asynchronicznej obsługi sesji
- Type checker przechodzi
- Dwa testy w auth.test.ts nadal zawodzą
- Awarie są związane z setupem mocków dla nowych funkcji asynchronicznych
Przeczytaj zawodzące testy i napraw setup mocków.

Jeśli zadanie zajmuje więcej niż 30-40 minut, podziel je na oddzielne sesje zamiast walczyć z degradacją kontekstu:

  • Sesja 1: Schemat i migracja bazodanowa
  • Sesja 2: Implementacja routy API
  • Sesja 3: Testy i integracja
  • Sesja 4: Review i PR

Rozpocznij każdą sesję na świeżo z claude, nie claude -c. Daj Claude krótkie podsumowanie tego, co zostało zrobione w poprzednich sesjach i jakie jest bieżące zadanie.

Jeśli Claude Code nieoczekiwanie się wyłączy, twoja historia rozmowy jest zachowana. Wznów za pomocą:

Okno terminala
claude -c

To kontynuuje najnowszą rozmowę. Wszystkie poprzednie wiadomości i wyniki narzędzi są przywrócone.

Jeśli chcesz spróbować innego podejścia bez utraty bieżącej sesji:

Okno terminala
claude --continue --fork-session

To tworzy nową sesję z tą samą historią rozmowy do tego punktu. Oryginalna sesja pozostaje niezmieniona. Możesz spróbować alternatywnego podejścia w rozwidleniu i wrócić do oryginału, jeśli nie zadziała.

Jeśli masz wiele sesji z różnych prób:

Okno terminala
claude --resume

To otwiera selektor sesji. Użyj B do filtrowania po bieżącym branchu, ułatwiając znalezienie sesji, której chcesz.

Najlepsze odzyskiwanie to brak potrzeby odzyskiwania. Te wzorce redukują awarie zanim się zdarzą.

Najbardziej efektywny nawyk:

Po dokonaniu każdej zmiany uruchom type checker i odpowiednie testy.
Nie przechodź do następnego kroku, dopóki bieżący krok nie przejdzie. Jeśli
coś zawodzi, napraw to przed kontynuowaniem.

To wychwytuje błędy, gdy są małe i izolowane, nie po tym, jak rozlały się przez bazę kodu.

Przed ryzykownymi operacjami utwórz commit git:

Commitnij bieżący stan pracy z komunikatem typu
"checkpoint: przed refaktoryzacją auth". Nie wypychaj tego commitu.

Jeśli wszystko pójdzie nie tak, możesz git reset --soft HEAD~1, aby wrócić do tego punktu zachowując wszystkie zmiany w staged.

Zamiast “zrefaktoruj moduł uwierzytelniania”, spróbuj “zmień tylko logikę wygasania sesji w auth.ts, zachowując resztę modułu niezmienioną.” Węższy zakres oznacza mniej dotkniętych plików, mniej potencjalnych błędów i łatwiejsze odzyskiwanie.

Przed jakąkolwiek złożoną zmianą:

Przed dokonaniem zmian wyjaśnij dokładnie, co planujesz zmodyfikować
i dlaczego. Wymień każdy plik, którego dotkniesz, i jaka będzie zmiana
w każdym pliku.

Wychwycenie złego planu jest znacznie tańsze niż cofanie złej implementacji.

Esc-Esc nie pokazuje checkpointów — Checkpointy istnieją tylko dla bieżącej sesji. Jeśli rozpocząłeś nową sesję, checkpointy z poprzedniej sesji zniknęły. Użyj historii git do odzyskania zamiast tego: git diff, aby zobaczyć, co się zmieniło, git checkout -- <file>, aby cofnąć konkretne pliki.

Claude ciągle powtarza to samo nieudane podejście — Użyj /clear i zacznij na świeżo. Opisz problem od zera i jawnie wyklucz podejście, które nie działało: “Nie restrukturyzuj modułu. Zamiast tego dokonaj minimalnej zmiany potrzebnej do naprawy problemu z timeoutem.”

/compact traci ważny kontekst — Dodaj argument focus: /compact skup się na migracji bazodanowej i trzech pozostałych awariach testów. Bez focus kompakcja może upuścić szczegóły, których potrzebujesz. Dla krytycznego kontekstu dodaj go do swojego CLAUDE.md, aby przetrwał między sesjami.

Testy przechodzą lokalnie, ale Claude wprowadził subtelne błędy — Po każdej znaczącej zmianie poproś Claude o przejrzenie swojej własnej pracy: “Przejrzyj wszystkie zmiany, które dokonałeś w tej sesji. Sprawdź przypadki brzegowe, obsługę null i ścieżki błędów, które mogą brakować.” Ten autoreview wychwytuje problemy, które testy przegapiają.

Sesja staje się nieużyteczna z powodu rozdęcia kontekstu — Rozpocznij nową sesję z claude (nie claude -c). Daj Claude krótkie podsumowanie i konkretne pliki do przeczytania. Pięć minut przywracania kontekstu jest szybsze niż walka ze zdegradowaną sesją przez trzydzieści minut.

Właśnie ukończyłeś poradnik szybkiego startu Claude Code. Możesz zainstalować Claude Code, uwierzytelnić się, skonfigurować uprawnienia, skonfigurować swoje IDE, zainicjować projekt z CLAUDE.md, zaplanować funkcje z PRD, używać extended thinking dla trudnych problemów, podłączać serwery MCP, budować funkcje przyrostowo, zarządzać kontrolą wersji i odzyskiwać z awarii.