Preskočiť na obsah

Test s ukážkami na skopírovanie

Koľko z 10 brán zastaví zlý AI kód vo vašom CI?

Zlý kód od AI agenta zastaví v CI desať brán: lint, typová kontrola, povinné testy, zakázané vzory, sken tajomstiev, strážca migrácií, kontrola závislostí, šablóna PR so sekciou o AI, pravidlo pre review a chránená vetva. Zaškrtnite, ktoré máte, a hneď uvidíte skóre a chýbajúce brány od najväčšieho rizika. Pod zoznamom je ku každej bráne ukážka pre GitHub Actions.

Čo vyplníte a zaškrtnete, ostáva len v tomto okne prehliadača. Nič neodosielame, kým si sami nenecháte poslať vyhodnotenie e-mailom. Po zatvorení stránky to zmizne, preto si výsledok vytlačte.

Pre CTO a tech leadov, ktorých tím už píše kód s Claude Code, Codex alebo Cursor. Pravidlo v AGENTS.md agent môže obísť. Bránu v CI nie. Ukážky sú pre GitHub Actions a pnpm. V GitLab CI je každá brána ten istý príkaz v script:.

AI dnes píše všetok náš kód a za výsledok zodpovedá senior. Väčšina ukážok pochádza z nášho verejného repozitára claude-code-production-starter, kde ich nájdete celé.

1. Ktoré brány už máte?

Zaškrtnite len to, čo naozaj zablokuje zlúčenie. Brána, ktorá iba hlási, sa nepočíta.

2. Desať brán s ukážkami

Lint blokuje zlúčenie

Lint, ktorý len varuje, agent ignoruje. Spúšťajte ho v CI a nechajte ho zlyhať. Keď zavádzate nové prísne pravidlo do starého kódu, dnešné porušenia zaznamenajte a CI nech zlyhá, keď ich pribudne.

- run: pnpm lint --max-warnings 0

Typová kontrola v strict režime

Agent rád prepíše typ na any, aby kód prešiel. Strict režim a samostatný krok v CI to zastavia.

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

Testy sú povinné a niečo dokazujú

Test, ktorý prejde aj na hlavnej vetve, nedokazuje nič. Zmenený zdrojový kód potrebuje zmenený test a ten musí na hlavnej vetve zlyhať a na vašej prejsť. Výnimku (čistý refaktoring) schvaľuje človek štítkom, nie agent.

- name: Zmenené testy zlyhajú na base a prejdú tu
  if: "!contains(github.event.pull_request.labels.*.name, 'skip-red-proof')"
  run: bash scripts/gate.sh red-proof "origin/${{ github.base_ref }}"

Zakázané vzory

Niektoré skratky agentov sa dajú nájsť obyčajným hľadaním: .only v teste, vypnutá typová kontrola, vypnutý lint. Nechajte ich zlyhať v CI.

- name: Zakázané vzory
  run: "! git grep -nE '(it|test|describe)\\.only\\(|@ts-ignore|eslint-disable' -- src tests"

Sken tajomstiev

Kľúč v commite je problém aj po jeho zmazaní, ostáva v histórii. Skenujte pred commitom (hook) aj v CI.

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

Strážca migrácií

Migrácia databázy sa nedá vrátiť tak ľahko ako kód. PR, ktorý mení migrácie, prejde len so štítkom od človeka. Spustenie produkčnej migrácie v nastaveniach agenta vyžaduje potvrdenie.

- name: Migrácie len so štítkom
  if: "!contains(github.event.pull_request.labels.*.name, 'migration-ok')"
  run: "! git diff --name-only origin/${{ github.base_ref }}... | grep -E '(^|/)migrations/'"

Kontrola závislostí

Agent pridá balík, keď ho úloha potrebuje. Overte, že nemá známu vážnu zraniteľnosť, a nechajte závislosti pravidelne aktualizovať.

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

Šablóna PR so sekciou o AI

PR musí povedať, ako bola zmena overená a čo autor neurobil. Reviewer potom vie, kam sa pozrieť.

## Ako to bolo overené
- [ ] gate je zelený vrátane red-proof
- [ ] žiadny test nebol oslabený, preskočený ani zmazaný

## Čo písal agent a čo autor skontroloval
<!-- Ktoré časti generoval agent, čo ste prešli riadok po riadku. -->

## Čo nie je hotové

Pravidlo pre review

Zmenu schvaľuje človek, ktorý ju nepísal. Pravidlá pre agentov a CI menia len ich vlastníci, inak si agent časom uvoľní vlastné brány.

# .github/CODEOWNERS
*             @vasa-firma/tim
/.claude/     @vasa-firma/vlastnik-pravidiel
/.github/     @vasa-firma/vlastnik-pravidiel
/AGENTS.md    @vasa-firma/vlastnik-pravidiel

Chránená vetva

Všetko vyššie platí, len ak sa hlavná vetva nedá obísť. Jedna súhrnná kontrola ci, povinný PR, schválenie od vlastníka kódu a pravidlá aj pre administrátorov.

gh api -X PUT repos/VASA-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

Ďalšie nástroje pre vás

Ako ďaleko ste od AI-native SDLC? 12 otázok

12 otázok o pravidlách pre AI agentov, kontrolách v CI a zodpovednosti. Uvidíte, kde je váš tím dnes.

AI v SDLC za 30 dní: plán po týždňoch

Pravidlá v AGENTS.md, brány v CI a hooky, review a meranie. Štyri týždne s ukážkami z nášho verejného repozitára.

Časté otázky

Čo je CI brána?
Kontrola v CI, ktorá zmenu zablokuje, nie len nahlási. Lint, test alebo sken, ktorý pri chybe zlyhá a bez ktorého sa PR nedá zlúčiť.
Čo je red-proof test?
Kontrola, že zmenený test zlyhá na hlavnej vetve a prejde na vašej. Test, ktorý prejde aj bez vašej zmeny, nedokazuje nič. Agent tak nemôže napísať test, ktorý prejde vždy.
Ktoré brány zaviesť ako prvé?
Chránenú vetvu, povinné testy a sken tajomstiev. Bez chránenej vetvy sa dajú všetky ostatné obísť, bez testov CI nič nedokazuje a uniknutý kľúč ostáva v histórii aj po zmazaní.
Platí to aj mimo GitHub Actions?
Áno. Ukážky sú pre GitHub Actions a pnpm, ale každá brána je obyčajný príkaz, ktorý zlyhá. Rovnako ho spustíte v GitLab CI, Bitbucket Pipelines alebo na vlastnom serveri.

Kde vám AI kód prejde bez kontroly?

Ďalší krok je AI v SDLC: brány a pravidlá nastavíme spolu s vaším tímom.