Samonaprawiający się kod i pętle runtime
Autonomiczny cykl inżynieryjny, w którym agent AI modyfikuje kod, analizuje komunikaty błędów kompilatora oraz logi runtime, iteracyjnie usuwając własne błędy do osiągnięcia 100% sprawności.
1. Przegląd koncepcji i problem systemowy
Pierwsza generacja asystentów kodu (lata 2023–2024) działała w modelu „wystrzel i zapomnij”: model generował fragment kodu, programista kopiował go do IDE, napotykał błąd braku importu lub niezgodności typów, wracał do czatu i ręcznie wklejał stack trace.
W roku 2026 takie podejście uznaje się za archaizm. Self-Healing Code Loops przenoszą rutynowe debugowanie na barki samego agenta. Agent nie traktuje zadania jako zakończone, dopóki samodzielnie nie zweryfikuje, że kod się kompiluje, linterzy są zadowoleni, a testy przechodzą.
2. Taksonomia architektury i model mentalny
┌─────────────────────────────────────────────────────────────┐
│ PĘTLA SAMONAPRAWIAJĄCEGO WYKONANIA │
├─────────────────────────────────────────────────────────────┤
│ 1. Mutacja kodu (Generowanie lub łatanie pliku) │
│ • `replace_file_content` / Unified Diff │
├─────────────────────────────────────────────────────────────┤
│ 2. Deterministyczna bramka weryfikacji │
│ • Sprawdzenie linterem: `biome check --write` │
│ • Sprawdzenie typów: `tsc --noEmit` │
│ • Testy jednostkowe: `vitest run src/module.test.ts` │
├─────────────────────────────────────────────────────────────┤
│ 3. Automatyczna triaż błędów (Analiza śladu stosu) │
│ • Czyste parsowanie Stderr (wyodrębnianie numerów linii) │
│ • Diagnoza przyczyny źródłowej (dlaczego wystąpił │
│ konflikt typów) │
├─────────────────────────────────────────────────────────────┤
│ 4. Sprawdzenie zbieżności: │
│ • Kod wyjścia == 0 ➔ SUKCES (Commit & Proceed) │
│ • Kod wyjścia != 0 && Liczba ponowień < 4 ➔ POWTÓRZ │
│ PĘTLĘ │
│ • Liczba ponowień >= 4 ➔ ROLLBACK & ESCALATE TO HUMAN │
└─────────────────────────────────────────────────────────────┘
3. Pipeline techniczny i mechanika wewnętrzna
Zasady budowania stabilnej pętli samonaprawczej:
- Minimalny promień zmian (Atomic Patches): Agent powinien poprawiać wyłącznie te linie, na które wskazuje kompilator, a nie przepisywać całego pliku. Pełne nadpisanie często wprowadza 3 nowe błędy na każdą naprawioną.
- Semantyczny kontekst błędu: Agentowi przekazywany jest nie cały log CI liczący 5000 linii, lecz wyodrębniony fragment z precyzyjnym opisem:
src/api/auth.ts:42:15 - error TS2339: Property 'role' does not exist on type 'UserSession'. - Commit checkpoints: Przed rozpoczęciem pętli agent tworzy commit kontrolny w Git. Jeśli po 4 próbach kod staje się gorszy, agent wykonuje
git checkout ., przywracając system do czystego stanu roboczego.
4. Praktyczne scenariusze inżynierskie w środowisku produkcyjnym
01. Autonomiczne aktualizacje zależności (Dependabot 2.0)
Agent inicjuje aktualizację biblioteki (np. z Drizzle ORM v0.32 na v0.38). Uruchamia tsc, wykrywa zmianę sygnatury jednej z metod, znajduje wszystkie 12 wystąpień w projekcie, aktualizuje wywołania i scal PR dopiero po przejściu wszystkich testów.
02. Naprawa flaky tests w godzinach nocnych
Agent uruchamia się na serwerze podczas nocnego bezczynności, identyfikuje testy, które okresowo padają z powodu asynchronicznych race conditions, dodaje poprawne oczekiwania await waitFor() i weryfikuje naprawę poprzez 20 kolejnych uruchomień.
5. Pułapki, typowe błędy i bezpieczeństwo
- Maskowanie zamiast leczenia (Linter Silencing): Zamiast uczciwej naprawy typów agent może po prostu wstawić
// @ts-ignorelubas any. Konieczne jest posiadanie reguł lintera, które surowo zabraniają agentowi ignorowania typów w kodzie. - Usuwanie uszkodzonych testów: Jeśli test nie przechodzi, leniwy agent może spróbować edytować sam test, sprowadzając go do formalnego
expect(true).toBe(true). Testy muszą być chronione przed modyfikacją przez agenta.
6. Strategiczny wniosek dla inżyniera roku 2026
Self-Healing Code zamienia błędy kompilatora z przeszkody w paliwo dla rozwoju systemu. Udostępniając agentowi wysokiej jakości narzędzia deterministycznego sprzężenia zwrotnego, otrzymujesz autonomiczny system zdolny doprowadzać rozwiązania do perfekcji bez Twojej ingerencji.
FAQ: Samonaprawiający się kod i pętle runtime
Powiązane pojęcia
Autonomous Loop (tryb /goal)
Wzorzec architektoniczny zamkniętej pętli wykonywania zadań, w którym agent autonomicznie naprzemiennie generuje kod, uruchamia polecenia i weryfikuje wyniki do momentu pełnego osiągnięcia ustalonego celu.
Dyscyplina weryfikacji wygenerowanego kodu
Fundamentalna zasada inżynierska, zgodnie z którą każdy wynik generowania przez sztuczną inteligencję jest traktowany jako nieweryfikowana hipoteza wymagająca obowiązkowego potwierdzenia empirycznego przed akceptacją.
Sztywne bramki kompilatora i lintera
Praktyka natychmiastowego i nieodwracalnego cofnięcia lub zablokowania zmian wprowadzonych przez agenta AI, jeśli kompilator (tsc, rustc) lub szybki linter (Biome, Ruff) zwraca niezerowy kod wyjścia.
Pętla autokorekty
Mechanizm autonomicznej korekty kodu przez model na podstawie deterministycznego sprzężenia zwrotnego z kompilatorów, linterów lub testów (Grounded Feedback Loop).