Przejdź do treści

Test z przykładami do skopiowania

Ile z 10 bramek zatrzyma zły kod AI w Państwa CI?

Zły kod od agenta AI zatrzyma w CI dziesięć bramek: lint, sprawdzanie typów, obowiązkowe testy, zakazane wzorce, skan sekretów, strażnik migracji, kontrola zależności, szablon PR z sekcją o AI, zasada review i chroniona gałąź. Proszę zaznaczyć, które Państwo mają, a od razu zobaczą Państwo wynik i brakujące bramki od największego ryzyka. Pod listą przy każdej bramce jest przykład dla GitHub Actions.

To, co Państwo wypełnią i zaznaczą, zostaje tylko w tym oknie przeglądarki. Niczego nie wysyłamy, dopóki sami Państwo nie poproszą o ocenę e-mailem. Po zamknięciu strony zniknie, dlatego proszę wydrukować wynik.

Dla CTO i tech leadów, których zespół już pisze kod z Claude Code, Codex lub Cursorem. Zasadę w AGENTS.md agent może obejść. Bramki w CI nie. Przykłady są dla GitHub Actions i pnpm. W GitLab CI każda bramka to to samo polecenie w script:.

AI pisze dziś cały nasz kod, a za wynik odpowiada senior. Większość przykładów pochodzi z naszego publicznego repozytorium claude-code-production-starter, gdzie znajdą je Państwo w całości.

1. Które bramki już Państwo mają?

Proszę zaznaczyć tylko to, co naprawdę blokuje scalenie. Bramka, która tylko zgłasza, się nie liczy.

2. Dziesięć bramek z przykładami

Lint blokuje scalenie

Lint, który tylko ostrzega, agent ignoruje. Proszę uruchamiać go w CI i pozwolić mu paść. Wprowadzając nową ostrą regułę do starego kodu, proszę zapisać dzisiejsze naruszenia, a CI niech pada, gdy ich przybędzie.

- run: pnpm lint --max-warnings 0

Sprawdzanie typów w trybie strict

Agent chętnie zmienia typ na any, żeby kod przeszedł. Tryb strict i osobny krok w CI to zatrzymają.

# tsconfig.json: "strict": true
- run: pnpm exec tsc --noEmit

Testy są obowiązkowe i coś udowadniają

Test, który przechodzi także na gałęzi głównej, niczego nie udowadnia. Zmieniony kod źródłowy potrzebuje zmienionego testu, a ten musi paść na gałęzi głównej i przejść na Państwa. Wyjątek (czysty refaktoring) zatwierdza człowiek etykietą, nie agent.

- name: Zmienione testy padają na base i przechodzą tutaj
  if: "!contains(github.event.pull_request.labels.*.name, 'skip-red-proof')"
  run: bash scripts/gate.sh red-proof "origin/${{ github.base_ref }}"

Zakazane wzorce

Niektóre skróty agentów znajdzie zwykłe wyszukiwanie: .only w teście, wyłączone sprawdzanie typów, wyłączony lint. Proszę sprawić, żeby padały w CI.

- name: Zakazane wzorce
  run: "! git grep -nE '(it|test|describe)\\.only\\(|@ts-ignore|eslint-disable' -- src tests"

Skan sekretów

Klucz w commicie jest problemem także po usunięciu, bo zostaje w historii. Proszę skanować przed commitem (hook) i w CI.

- uses: actions/checkout@v5
  with:
    fetch-depth: 0
- run: docker run --rm -v "$PWD:/repo" ghcr.io/gitleaks/gitleaks:latest git /repo --redact

Strażnik migracji

Migracji bazy danych nie da się cofnąć tak łatwo jak kodu. PR zmieniający migracje przechodzi tylko z etykietą od człowieka. Uruchomienie migracji produkcyjnej wymaga potwierdzenia w ustawieniach agenta.

- name: Migracje tylko z etykietą
  if: "!contains(github.event.pull_request.labels.*.name, 'migration-ok')"
  run: "! git diff --name-only origin/${{ github.base_ref }}... | grep -E '(^|/)migrations/'"

Kontrola zależności

Agent dodaje pakiet, gdy zadanie go potrzebuje. Proszę sprawdzić, czy nie ma znanej poważnej podatności, i regularnie aktualizować zależności.

- run: pnpm audit --audit-level high
# .github/dependabot.yml: package-ecosystem npm, schedule weekly

Szablon PR z sekcją o AI

PR musi mówić, jak zmiana została sprawdzona i czego autor nie zrobił. Reviewer wie wtedy, gdzie patrzeć.

## Jak to zostało sprawdzone
- [ ] gate jest zielony, łącznie z red-proof
- [ ] żaden test nie został osłabiony, pominięty ani usunięty

## Co napisał agent, a co sprawdził autor
<!-- Które części wygenerował agent, co sprawdzili Państwo linijka po linijce. -->

## Czego nie zrobiono

Zasada review

Zmianę zatwierdza osoba, która jej nie pisała. Zasady dla agentów i CI zmieniają tylko ich właściciele, inaczej agent z czasem poluzuje własne bramki.

# .github/CODEOWNERS
*             @twoja-firma/zespol
/.claude/     @twoja-firma/wlasciciel-zasad
/.github/     @twoja-firma/wlasciciel-zasad
/AGENTS.md    @twoja-firma/wlasciciel-zasad

Chroniona gałąź

Wszystko powyżej działa tylko wtedy, gdy gałęzi głównej nie da się obejść. Jedna zbiorcza kontrola ci, obowiązkowy PR, zatwierdzenie przez właściciela kodu i zasady także dla administratorów.

gh api -X PUT repos/TWOJA-FIRMA/REPO/branches/main/protection \
  -F 'required_status_checks[strict]=true' -f 'required_status_checks[contexts][]=ci' \
  -F 'required_pull_request_reviews[required_approving_review_count]=1' \
  -F 'required_pull_request_reviews[require_code_owner_reviews]=true' \
  -F enforce_admins=true -F restrictions=null

Więcej narzędzi dla Państwa

Jak daleko są Państwo od AI-native SDLC? 12 pytań

12 pytań o zasady dla agentów AI, kontrole w CI i odpowiedzialność. Zobaczą Państwo, gdzie dziś jest zespół.

AI w SDLC w 30 dni: plan tydzień po tygodniu

Zasady w AGENTS.md, bramki CI i hooki, review i pomiar. Cztery tygodnie z przykładami z naszego publicznego repozytorium.

Najczęstsze pytania

Czym jest bramka CI?
Kontrolą w CI, która blokuje zmianę, a nie tylko ją zgłasza. Lint, test albo skan, który przy błędzie pada i bez którego PR nie da się scalić.
Czym jest test red-proof?
Sprawdzeniem, że zmieniony test pada na gałęzi głównej i przechodzi na Państwa. Test, który przechodzi także bez Państwa zmiany, niczego nie udowadnia. Dzięki temu agent nie napisze testu, który przechodzi zawsze.
Które bramki wprowadzić najpierw?
Chronioną gałąź, obowiązkowe testy i skan sekretów. Bez chronionej gałęzi wszystkie pozostałe da się obejść, bez testów CI niczego nie udowadnia, a wyciekły klucz zostaje w historii nawet po usunięciu.
Czy to działa poza GitHub Actions?
Tak. Przykłady są dla GitHub Actions i pnpm, ale każda bramka to zwykłe polecenie, które pada. Uruchomią je Państwo tak samo w GitLab CI, Bitbucket Pipelines albo na własnym serwerze.

Gdzie kod AI przechodzi bez kontroli?

Kolejny krok to AI w SDLC: bramki i zasady ustawimy razem z Państwa zespołem.