Wróć do listy wpisów

Reguła bez sondy to dekoracja: dlaczego potrzebujesz mutacyjnego selftestu bramek

2026-10-26
Michał Sznurowski

Większość zespołów wdrażających zasady dla AI popełnia ten sam błąd: tworzy rozbudowane pliki .cursorrules, AGENTS.md lub skrypty walidacyjne z dziesiątkami reguł typu:

  • „Nigdy nie używaj as any”
  • „Każde przejście maszyny stanów musi mieć strażnika”
  • „Nie modyfikuj plików konfiguracyjnych poza oknem kontraktowym”

Wszystko wygląda imponująco w dokumentacji, dopóki nie zadasz prostego pytania:

Skąd wiesz, że ta reguła w ogóle działa i potrafi zgłosić błąd?


1. Zjawisko dekoracyjnych bramek jakości

W projektach z agentami AI bardzo często dochodzi do sytuacji, w której reguła walidatora:

  1. Posiada subtelny błąd w wyrażeniu regularnym (np. brak flagi multiline lub zły separator).
  2. Sprawdza obiekt, którego struktura zmieniła się 3 commity wcześniej.
  3. Nigdy nie została przetestowana na niepoprawnym kodzie.

Wynik? Kod z poważnymi naruszeniami bezpieczeństwa przechodzi przez CI z zielonym statusem. Deweloper ma fałszywe poczucie kontroli, podczas gdy walidator jest martwą dekoracją.


2. Zasada CDAL: Każda reguła MA mieć mutację pozytywną

W architekturze CDAL każda reguła kontraktu (Rule) oraz każda reguła zakazanego kodu (forbidden) musi posiadać przynajmniej jedną jawną sondę mutacyjną:

// packages/kinds/src/state-machine.ts
{
  rule: 'STATE-REACHABILITY',
  file: 'state-machine.contract.mjs',
  find: "from: 'REQUESTED'",
  replace: "from: 'UNREACHABLE_ORPHAN'",
}

Komenda cdal selftest kopiuje kontrakty i kod do odizolowanego środowiska tymczasowego, aplikuje mutację i sprawdza, czy walidator zgłasza dokładnie to konkretne naruszenie.

Jeżeli po wprowadzeniu mutacji walidator zgłosi sukces — test mutacyjny natychmiast przerywa działanie i oblewa pipeline weryfikacyjny.


3. Sondy pozytywne i negatywne dla wzorców zakazanych

Ta sama dyscyplina dotyczy zakazanego kodu. Sonda testuje:

  • Przypadek pozytywny: czy @ts-ignore w pliku .ts zostanie natychmiast zablokowany?
  • Przypadek negatywny: czy legalny komentarz zawierający słowo „ignore” zostanie dopuszczony bez fałszywego alarmu?
  • Obejścia (gate evasion): czy model próbujący połączyć ciąg znaków ['@ts', 'ignore'].join('') zostanie przechwycony?

Dopiero wtedy bramka staje się prawdziwą tarczą ochronną, a nie wpisem na liście życzeń.

Reguła bez sondy to dekoracja: dlaczego potrzebujesz mutacyjnego selftestu bramek — CDAL Blog