Programowanie sterowane błędami
Twój pipeline CI świeci na czerwono. Jest 14 błędów TypeScript, 3 nieudane testy i ostrzeżenie o deprecjacji. Twój instynkt podpowiada, żeby naprawić je samodzielnie albo wkleić cały log błędów do AI i powiedzieć “napraw wszystko”. Oba podejścia marnują czas. Naprawianie samodzielnie ignoruje zdolność AI do rozwiązywania mechanicznych problemów. Zrzucanie całego logu daje AI zbyt wiele do przetworzenia na raz i prowadzi do kaskadowych “napraw”, które wprowadzają nowe problemy.
Programowanie sterowane błędami traktuje każdy błąd jako precyzyjną, wygenerowaną maszynowo specyfikację. Komunikat błędu mówi AI dokładnie co jest źle, gdzie jest źle i czego system oczekuje zamiast tego. To lepsza informacja niż jakikolwiek prompt, który mógłbyś napisać od zera.
Czego się nauczysz
Dział zatytułowany „Czego się nauczysz”- Systematyczny przepływ pracy do przekazywania błędów asystentowi AI po jednym na raz
- Prompty, które wyciągają maksymalny sygnał z komunikatów błędów
- Strategie przerywania kaskad błędów (gdy naprawienie jednego błędu tworzy trzy nowe)
- Techniki wykorzystywania błędów jako okazji do nauki, które ulepszają twój CLAUDE.md,
.cursor/rulesiAGENTS.md
Pętla sterowana błędami
Dział zatytułowany „Pętla sterowana błędami”Zamiast próbować zapobiec wszystkim błędom, wykorzystujesz je jako najszybszy dostępny mechanizm sprzężenia zwrotnego. Pętla jest prosta:
- Wprowadź zmianę (lub pozwól AI ją wprowadzić)
- Uruchom krok weryfikacji (build, test, lint, type-check)
- Przeczytaj pierwszy błąd
- Przekaż go AI z docelowym kontekstem
- Pozwól AI naprawić przyczynę źródłową
- Powtórz od kroku 2
Kluczowa dyscyplina to jeden błąd na raz. Komunikaty błędów często kaskadują — jedna przyczyna źródłowa produkuje dziesiątki dalszych błędów. Napraw pierwszy, a połowa pozostałych zniknie.
Przekazywanie błędów do AI
Dział zatytułowany „Przekazywanie błędów do AI”Jakość naprawy zależy całkowicie od tego, jak prezentujesz błąd. Nie mów po prostu “build jest zepsuty”. Daj AI dokładny komunikat błędu, plik, w którym wystąpił, i to, czego się spodziewałeś.
Zintegrowany terminal Cursor sprawia, że programowanie sterowane błędami jest bezproblemowe. Uruchom build lub testy bezpośrednio w terminalu, a następnie odwołaj się do błędu w trybie Agent:
I ran npm run type-check and got this error:
src/services/notification.ts:42:5 - error TS2345:Argument of type 'string' is not assignable to parameterof type 'NotificationPayload'.
Fix the root cause. The function signature in @src/services/notification.tsexpects a NotificationPayload object, not a raw string. Check the callerat line 42 and the type definition in @src/types/notification.ts.Agent Cursor może również czytać wyjście terminala bezpośrednio. Po nieudanej komendzie po prostu wpisz w czacie: “Fix the error in the terminal.”
Przekieruj błędy bezpośrednio do Claude Code lub uruchom komendę i pozwól Claude przeczytać wyjście:
Run npm run type-check. For each error:1. Read the file and line number referenced in the error2. Understand the root cause (don't just suppress the error)3. Fix the root cause4. Re-run type-check to verify the fix5. Move to the next error
Fix errors one at a time. Do not batch fixes.Możesz również przekierować wyjście błędów bezpośrednio:
npm run type-check 2>&1 | claude -p "Fix the first TypeScript error. Show me the root cause and your fix."Agentyczna pętla Claude Code uruchomi komendę, przetworzy wyjście, naprawi problem i automatycznie ponownie uruchomi, aż do uzyskania czystego wyniku.
Środowisko sandbox Codex uruchamia weryfikacje automatycznie:
Run npm run type-check. Fix each error one at a time,starting with the first one. After fixing each error,re-run the check to see if downstream errors resolved.Do not batch fixes -- address one root cause per iteration.W aplikacji Codex możesz wkleić wyjście terminala bezpośrednio jako kontekst. Codex przeanalizuje błędy i będzie je systematycznie rozwiązywać. W przypadku awarii CI integracja Codex z GitHub może odczytać wyjście nieudanej kontroli bezpośrednio z PR.
Przerywanie kaskad błędów
Dział zatytułowany „Przerywanie kaskad błędów”Częsta pułapka: AI naprawia błąd 1, co wprowadza błąd 2, który po naprawieniu wprowadza błąd 3. Kończysz w cyklu “wack-a-mole”, który wypala twoje okno kontekstowe bez robienia postępu.
Rozwiązaniem jest rozpoznanie wzorców kaskadowych i zaadresowanie ich strukturalnie.
Gdy widzisz ten sam plik pojawiający się w wielu błędach, cofnij się:
We've been fixing errors in notification.ts for three iterationsand new ones keep appearing. Stop fixing individual errors.
Instead:1. Read the full file @src/services/notification.ts2. Read the types it depends on @src/types/notification.ts3. Read the test file @src/services/__tests__/notification.test.ts4. Identify the structural problem causing the cascade5. Propose a fix for the root architectural issue
Do not modify any files until I approve the approach.Użyj /clear do zresetowania kontekstu, gdy utkniesz w pętli, a następnie zacznij ponownie z szerszym spojrzeniem:
I've been fixing TypeScript errors in src/services/notification.tsbut they keep cascading. Take a step back:
1. Read the file and all its imports2. Run npm run type-check and capture ALL errors related to this file3. Identify the common root cause4. Fix the structural issue rather than individual symptoms5. Re-run type-check to verifyJeśli Claude działa już więcej niż dwa cykle korekcji na tym samym błędzie, kontekst jest zanieczyszczony nieudanymi podejściami. /clear i świeży prompt prawie zawsze zbiegną szybciej.
Rozpocznij nowy wątek, gdy błędy się kaskadują. Czysty kontekst pomaga Codex zobaczyć problem strukturalny:
The file src/services/notification.ts has cascading TypeScript errors.Individual fixes keep introducing new errors.
Read the file and all its dependencies. Identify the structuralroot cause and fix it holistically. Run type-check after yourchanges to verify all errors are resolved.Zamiana błędów w trwałą wiedzę
Dział zatytułowany „Zamiana błędów w trwałą wiedzę”Najcenniejsze błędy to te, których nigdy więcej nie zobaczysz. Gdy napotkasz nieoczywisty błąd, zapisz lekcję w konfiguracji projektu, aby AI unikał tego samego błędu w przyszłych sesjach.
Dodaj regułę projektu w .cursor/rules/errors.md:
---description: "Common errors and their fixes for this project"alwaysApply: true---
## Known Error Patterns
- When modifying notification types, always update both `src/types/notification.ts` AND the Zod schema in `src/validators/notification.ts`. They must stay in sync.- Redis connection errors in tests: run `docker compose up -d redis` before running the test suite.Dodaj lekcję do swojego CLAUDE.md lub poproś Claude, żeby ją zapamiętał:
Remember: when modifying notification types, always update bothsrc/types/notification.ts AND the Zod schema insrc/validators/notification.ts. They must stay in sync.Automatyczna pamięć Claude zapisze to w ~/.claude/projects/<project>/memory/ i załaduje w przyszłych sesjach. Możesz również dodać to bezpośrednio do CLAUDE.md projektu, aby cały zespół miał z tego korzyści.
Dodaj lekcję do swojego AGENTS.md:
## Known Error Patterns
- Notification types: always update both src/types/notification.ts AND the Zod schema in src/validators/notification.ts together.- Redis must be running for integration tests: docker compose up -d redisCodex czyta AGENTS.md na początku każdej sesji, więc te wskazówki są stosowane automatycznie do całej przyszłej pracy.
Kiedy to nie działa
Dział zatytułowany „Kiedy to nie działa”Komunikat błędu jest bezużyteczny. Niektóre komunikaty błędów są naprawdę nieprzejrzyste (segfaulty, generyczne “internal server error”). W takich przypadkach przełącz się z podejścia sterowanego błędami na podejście sterowane hipotezami: poproś AI o dodanie logowania, odtworzenie problemu i zawężenie przyczyny przez eliminację.
AI ciągle tłumi błędy zamiast je naprawiać. Jeśli widzisz @ts-ignore, as any, puste bloki catch lub eslint-disable w wyjściu AI, to tłumi objawy zamiast naprawiać przyczyny. Bądź bezpośredni: “Do not suppress errors. Fix the underlying issue.”
Zbyt wiele błędów do przetworzenia. Jeśli type-check produkuje 200+ błędów, nie podawaj ich wszystkich AI. Skup się na pierwszych 3-5 błędach — to zwykle przyczyny źródłowe, które produkują resztę. Po ich naprawieniu uruchom ponownie i sprawdź, ile pozostało.
Błąd jest w wygenerowanym kodzie. Gdy błąd jest w pliku, który AI wygenerowało od zera, często szybciej jest usunąć plik i wygenerować go ponownie z bardziej ograniczonym promptem, niż łatać istniejącą zepsutą wersję.