Przejdź do głównej zawartości

Programowanie sterowane bledami

Twoj pipeline CI swieci na czerwono. Jest 14 bledow TypeScript, 3 nieudane testy i ostrzezenie o deprecjacji. Twoj instynkt podpowiada, zeby naprawic je samodzielnie albo wkleic caly log bledow do AI i powiedziec “napraw wszystko”. Oba podejscia marnuja czas. Naprawianie samodzielnie ignoruje zdolnosc AI do rozwiazywania mechanicznych problemow. Zrzucanie calego logu daje AI zbyt wiele do przetworzenia na raz i prowadzi do kaskadowych “napraw”, ktore wprowadzaja nowe problemy.

Programowanie sterowane bledami traktuje kazdy blad jako precyzyjna, wygenerowana maszynowo specyfikacje. Komunikat bledu mowi AI dokladnie co jest zle, gdzie jest zle i czego system oczekuje zamiast tego. To lepsza informacja niz jakikolwiek prompt, ktory moglbys napisac od zera.

  • Systematyczny przeplyw pracy do przekazywania bledow asystentowi AI po jednym na raz
  • Prompty, ktore wyciagaja maksymalny sygnal z komunikatow bledow
  • Strategie przerywania kaskad bledow (gdy naprawienie jednego bledu tworzy trzy nowe)
  • Techniki wykorzystywania bledow jako okazji do nauki, ktore ulepszaja twoj CLAUDE.md, .cursor/rules i AGENTS.md

Zamiast probowac zapobiec wszystkim bledom, wykorzystujesz je jako najszybszy dostepny mechanizm sprzezenia zwrotnego. Petla jest prosta:

  1. Wprowadz zmiane (lub pozwol AI ja wprowadzic)
  2. Uruchom krok weryfikacji (build, test, lint, type-check)
  3. Przeczytaj pierwszy blad
  4. Przekaz go AI z docelowym kontekstem
  5. Pozwol AI naprawic przyczyne zrodlowa
  6. Powtorz od kroku 2

Kluczowa dyscyplina to jeden blad na raz. Komunikaty bledow czesto kaskaduja — jedna przyczyna zrodlowa produkuje dziesiątki dalszych bledow. Napraw pierwszy, a polowa pozostalych zniknie.

Jakosc naprawy zalezy calkowicie od tego, jak prezentujesz blad. Nie mow po prostu “build jest zepsuty”. Daj AI dokladny komunikat bledu, plik, w ktorym wystapil, i to, czego sie spodziewales.

Zintegrowany terminal Cursor sprawia, ze programowanie sterowane bledami jest bezproblemowe. Uruchom build lub testy bezposrednio w terminalu, a nastepnie odwolaj sie do bledu 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 parameter
of type 'NotificationPayload'.
Fix the root cause. The function signature in @src/services/notification.ts
expects a NotificationPayload object, not a raw string. Check the caller
at line 42 and the type definition in @src/types/notification.ts.

Agent Cursor moze rowniez czytac wyjscie terminala bezposrednio. Po nieudanej komendzie po prostu wpisz w czacie: “Fix the error in the terminal.”

Czesta pulapka: AI naprawia blad 1, co wprowadza blad 2, ktory po naprawieniu wprowadza blad 3. Konczysz w cyklu “wack-a-mole”, ktory wypala twoje okno kontekstowe bez robienia postepu.

Rozwiazaniem jest rozpoznanie wzorcow kaskadowych i zaadresowanie ich strukturalnie.

Gdy widzisz ten sam plik pojawiajacy sie w wielu bledach, cofnij sie:

We've been fixing errors in notification.ts for three iterations
and new ones keep appearing. Stop fixing individual errors.
Instead:
1. Read the full file @src/services/notification.ts
2. Read the types it depends on @src/types/notification.ts
3. Read the test file @src/services/__tests__/notification.test.ts
4. Identify the structural problem causing the cascade
5. Propose a fix for the root architectural issue
Do not modify any files until I approve the approach.

Najcenniejsze bledy to te, ktorych nigdy wiecej nie zobaczysz. Gdy napotkasz nieoczywisty blad, zapisz lekcje w konfiguracji projektu, aby AI unikal tego samego bledu w przyszlych sesjach.

Dodaj regule 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.

Komunikat bledu jest bezuzyteczny. Niektore komunikaty bledow sa naprawde nieprzejrzyste (segfaulty, generyczne “internal server error”). W takich przypadkach przelacz sie z podejscia sterowanego bledami na podejscie sterowane hipotezami: popros AI o dodanie logowania, odtworzenie problemu i zawezenie przyczyny przez eliminacje.

AI ciągle tlumi bledy zamiast je naprawiac. Jesli widzisz @ts-ignore, as any, puste bloki catch lub eslint-disable w wyjsciu AI, to tłumi objawy zamiast naprawiac przyczyny. Badz bezposredni: “Do not suppress errors. Fix the underlying issue.”

Zbyt wiele bledow do przetworzenia. Jesli type-check produkuje 200+ bledow, nie podawaj ich wszystkich AI. Skup sie na pierwszych 3-5 bledach — to zwykle przyczyny zrodlowe, ktore produkuja reszte. Po ich naprawieniu uruchom ponownie i sprawdz, ile pozostalo.

Blad jest w wygenerowanym kodzie. Gdy blad jest w pliku, ktory AI wygenerowalo od zera, czesto szybciej jest usunac plik i wygenerowac go ponownie z bardziej ograniczonym promptem, niz latac istniejaca zepsuta wersje.