Přeskočit na obsah

Test s ukázkami ke zkopírování

Kolik z 10 bran zastaví špatný AI kód ve vašem CI?

Špatný kód od AI agenta zastaví v CI deset bran: lint, typová kontrola, povinné testy, zakázané vzory, sken tajemství, strážce migrací, kontrola závislostí, šablona PR se sekcí o AI, pravidlo pro review a chráněná větev. Zaškrtněte, které máte, a hned uvidíte skóre a chybějící brány od největšího rizika. Pod seznamem je ke každé bráně ukázka pro GitHub Actions.

Co vyplníte a zaškrtnete, zůstává jen v tomto okně prohlížeče. Nic neodesíláme, dokud si sami nenecháte poslat vyhodnocení e-mailem. Po zavření stránky to zmizí, proto si výsledek vytiskněte.

Pro CTO a tech leady, jejichž tým už píše kód s Claude Code, Codex nebo Cursor. Pravidlo v AGENTS.md agent může obejít. Bránu v CI ne. Ukázky jsou pro GitHub Actions a pnpm. V GitLab CI je každá brána stejný příkaz ve script:.

AI dnes píše veškerý náš kód a za výsledek odpovídá senior. Většina ukázek pochází z našeho veřejného repozitáře claude-code-production-starter, kde je najdete celé.

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

Zaškrtněte jen to, co opravdu zablokuje sloučení. Brána, která jen hlásí, se nepočítá.

2. Deset bran s ukázkami

Lint blokuje sloučení

Lint, který jen varuje, agent ignoruje. Spouštějte ho v CI a nechte ho selhat. Když zavádíte nové přísné pravidlo do starého kódu, dnešní porušení zaznamenejte a CI ať selže, když jich přibude.

- run: pnpm lint --max-warnings 0

Typová kontrola ve strict režimu

Agent rád přepíše typ na any, aby kód prošel. Strict režim a samostatný krok v CI to zastaví.

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

Testy jsou povinné a něco dokazují

Test, který projde i na hlavní větvi, nedokazuje nic. Změněný zdrojový kód potřebuje změněný test a ten musí na hlavní větvi selhat a na vaší projít. Výjimku (čistý refaktoring) schvaluje člověk štítkem, ne agent.

- name: Změněné testy selžou na base a projdou tady
  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

Některé zkratky agentů se dají najít obyčejným hledáním: .only v testu, vypnutá typová kontrola, vypnutý lint. Nechte je selhat v CI.

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

Sken tajemství

Klíč v commitu je problém i po jeho smazání, zůstává v historii. Skenujte před commitem (hook) i 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ážce migrací

Migraci databáze nejde vrátit tak snadno jako kód. PR, který mění migrace, projde jen se štítkem od člověka. Spuštění produkční migrace v nastavení agenta vyžaduje potvrzení.

- name: Migrace jen se štítkem
  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 přidá balíček, když ho úkol potřebuje. Ověřte, že nemá známou vážnou zranitelnost, a nechte závislosti pravidelně aktualizovat.

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

Šablona PR se sekcí o AI

PR musí říct, jak byla změna ověřena a co autor neudělal. Reviewer pak ví, kam se podívat.

## Jak to bylo ověřeno
- [ ] gate je zelený včetně red-proof
- [ ] žádný test nebyl oslaben, přeskočen ani smazán

## Co psal agent a co autor zkontroloval
<!-- Které části generoval agent, co jste prošli řádek po řádku. -->

## Co není hotové

Pravidlo pro review

Změnu schvaluje člověk, který ji nepsal. Pravidla pro agenty a CI mění jen jejich vlastníci, jinak si agent časem uvolní vlastní brány.

# .github/CODEOWNERS
*             @vase-firma/tym
/.claude/     @vase-firma/vlastnik-pravidel
/.github/     @vase-firma/vlastnik-pravidel
/AGENTS.md    @vase-firma/vlastnik-pravidel

Chráněná větev

Všechno výše platí, jen pokud hlavní větev nejde obejít. Jedna souhrnná kontrola ci, povinný PR, schválení od vlastníka kódu a pravidla i pro administrátory.

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

Další nástroje pro vás

Jak daleko jste od AI-native SDLC? 12 otázek

12 otázek o pravidlech pro AI agenty, kontrolách v CI a odpovědnosti. Uvidíte, kde je váš tým dnes.

AI v SDLC za 30 dnů: plán po týdnech

Pravidla v AGENTS.md, brány v CI a hooky, review a měření. Čtyři týdny s ukázkami z našeho veřejného repozitáře.

Časté otázky

Co je CI brána?
Kontrola v CI, která změnu zablokuje, ne jen nahlásí. Lint, test nebo sken, který při chybě selže a bez kterého PR nejde sloučit.
Co je red-proof test?
Kontrola, že změněný test selže na hlavní větvi a projde na vaší. Test, který projde i bez vaší změny, nedokazuje nic. Agent tak nemůže napsat test, který projde vždy.
Které brány zavést jako první?
Chráněnou větev, povinné testy a sken tajemství. Bez chráněné větve jde všechny ostatní obejít, bez testů CI nic nedokazuje a uniklý klíč zůstává v historii i po smazání.
Platí to i mimo GitHub Actions?
Ano. Ukázky jsou pro GitHub Actions a pnpm, ale každá brána je obyčejný příkaz, který selže. Stejně ho spustíte v GitLab CI, Bitbucket Pipelines nebo na vlastním serveru.

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

Další krok je AI v SDLC: brány a pravidla nastavíme společně s vaším týmem.