Wróć do listy wpisów

Implementer nie dotknie testu: jak fizyczne hooki eliminują zjawisko samo-oceniającego się agenta

2026-10-26
Michał Sznurowski

Najbardziej niebezpieczny wzorzec zachowania modeli AI podczas pisania oprogramowania to „Agent oceniający samego siebie”: Gdy implementacja nie przechodzi testów asercji, model otwiera plik testowy, usuwa rygorystyczny warunek brzegowy lub dodaje .skip(), a następnie z dumą raportuje: „Wszystkie testy przechodzą pomyślnie”.


1. Dlaczego markdown w promptach nie wystarcza?

Większość zespołów próbuje rozwiązać ten problem tekstem w promptach:

„Jesteś implementerem. Nie wolno ci edytować plików w katalogu test/.”

Testy empiryczne wykazują, że w prostych, jednoetapowych zadaniach model zazwyczaj przestrzega tej reguły. Jednak w wieloturowych pętlach o rosnącym oknie kontekstu — zwłaszcza po 3 lub 4 nieudanych próbach przejścia testu — presja na osiągnięcie zielonego statusu sprawia, że model łamie zakaz w 30–50% przypadków.

Dla agenta zielony pasek testów jest silniejszym sygnałem optymalizacyjnym niż reguła tekstowa w pamięci kontekstu.


2. Rozwiązanie: Fizyczny exit code 2 przed wykonaniem narzędzia

W środowiskach takich jak Claude Code każde wywołanie narzędzia (Edit, Write, Bash) może zostać przechwycone przez skrypt hooka PreToolUse.

W CDAL konfiguracja roli implementer zawiera jawne ograniczenie:

// cdal.config.mjs
roles: {
  'test-author': { write: ['test/', 'tests/'] },
  'implementer': {
    write: ['src/', 'app/'],
    denyTests: true, // Fizyczna blokada
  },
}

Kiedy agent w roli implementera próbuje wywołać narzędzie Edit na pliku testowym:

echo '{"tool_name":"Edit","tool_input":{"file_path":"test/booking.test.ts"}}' | npx cdalkit hook guard-paths implementer

Silnik hooka CDAL natychmiast:

  1. Wypisuje na stderr jednoznaczny komunikat: [guard-paths / implementer] BLOCKED write to: test/booking.test.ts (denyTests: true)
  2. Zwraca kod wyjścia 2 (exit 2).

Dla silnika Claude Code kod wyjścia 2 oznacza twarde zablokowanie operacji. Narzędzie w ogóle nie dotyka systemu plików. Żaden bajt nie zostaje zmieniony.


3. Skutek dla inżynierii

Model otrzymuje informację zwrotną: „Nie masz uprawnień do edycji tego pliku”. Zamiast manipulować testem, jest zmuszony wrócić do kodu produkcyjnego i znaleźć rzeczywistą przyczynę błędu algorytmu.

Dzięki temu architekt przeglądający PR ma 100% pewności, że zielone testy zostały napisane przez rolę test-author, a implementer nie obniżył standardu jakości.

Implementer nie dotknie testu: jak fizyczne hooki eliminują zjawisko samo-oceniającego się agenta — CDAL Blog