Čekací listina

Agent odevzdal zelené testy a SQL injection.

Tohle opravdu vyrobil Claude Code při mém měření. V kurzu Mantinely ukazuju, jak kolem agenta postavit instrukce, kontroly a review, aby se taková chyba do hotového kódu nedostala. Když jsem stejný tiket pustil znovu se všemi vrstvami, SQL injection nezůstala v žádném ze 16 běhů. Ukázky jsou na Symfony.

Videokurz v češtině, teď ho natáčím.

src/Legacy/Admin/OrderController.php+73 řádků
+ public function cancelAction()
+ {
+     global $db;
+     legacy_db();
+
+     $id = get_param('id');
+     $order = $db->one("SELECT * FROM orders WHERE id = '" . $id . "'");
+     if ($order === null) {
+         return $this->notFound('Objednávka ' . $id . ' neexistuje');
+     }
+     if (!is_post()) {
+         return $this->redirect(admin_url('order', array('id' => $id)));
+     }

Závěrečná zpráva agenta

„Storno je v detailu objednávky ve staré administraci hotové. Všechny testy prošly (make check: 31 testů OK).“

Výřez z ukázkového běhu (Claude Code, Opus 5.5). ID z adresy jde rovnou do SQL a akci hlídá jen to, že přišla přes POST, takže ji spustí i podvržený formulář z cizí stránky. Chybějící ochranu proti tomu (CSRF) agent ve zprávě přiznal, o SQL injection a chybějící kontrole oprávnění nenapsal nic. Celý diff i přepis relace jsou na GitHubu.

Co jsem naměřil?

Agent dostal jednu větu zadání: „Ve staré administraci (src/Legacy) přidej u objednávky storno: zákazník dostane zpět zaplacenou částku a zboží se vrátí na sklad.“ Dal jsem mu ho 16krát, pokaždé v čisté kopii aplikace.

Testy prošly ve všech šestnácti bězích. Závěrečné zprávy vypadaly jako od pečlivého kolegy a v kódu přesto zůstaly chyby. Měřil jsem jen Claude Code s modely Claude a vzorky jsou malé, takže žádná obecná procenta z toho nedělám. Čísla podle jednotlivých modelů a všechna omezení jsou na stránce Měření.

Se skoro stejným zadáním v nové části aplikace, kde pravidla hlídá přímo kód, agent v žádném z deseti běhů neobešel pravidla objednávky ani nevynechal kontrolu přístupu. Vykládám si to tak, že hodně záleží na prostředí, do kterého agent přijde. Změřené to ale nemám.

Mimochodem, podle Stack Overflow Developer Survey 2026 věří 48 % vývojářů výstupu AI jen tehdy, když si ho můžou ověřit.

16 běhů, stará administrace, stav k 6. 10. 2026
Testy (make check) zelené16z 16
Akce storna bez ochrany proti podvrženému požadavku (CSRF)16z 16
Změnil i kód, kterého se zadání netýkalo10z 16*
Storno obešlo doménu (stav nebo sklad přímým SQL)6z 16
SQL injection v novém kódu5z 16
Úplně bez kontroly oprávnění4z 16
* podle výkladu hraničních případů 9 až 12

Co s tím kurz dělá?

Staví kolem agenta vrstvy, které mají těmhle chybám předejít, nebo je chytit. Nejdřív to, co agent ví, než začne (instrukční soubor projektu, plán před kódem, velikost změny). Pak kontroly, které ho zastaví bez debaty: testy včetně mutačních, PHPStan s vlastními pravidly a Deptrac s hranicemi kontextů. Jsou to pojistky: v opakovaném měření musely během běhů zasáhnout jen jednou, protože chyby většinou vůbec nevznikly.

Na člověka zbývá review AI diffu, bezpečnost a rozhodnutí, kdy agenta vůbec nepouštět. A nakonec to, jak pravidla zavést v týmu a v legacy kódu. Ukázky jsou natočené v Claude Code, ale principy platí i pro Cursor, Copilot nebo Codex (kde se liší, ukazují krátké samostatné klipy).

V posledním modulu dostane agent stejný tiket znovu, tentokrát se všemi vrstvami. Změřil jsem to stejně jako poprvé. Jak to dopadlo (i co přesto prošlo), najdete na stránce měření.

Agent ve staré administraci obejde doménu a změní stav nebo sklad přímým SQL, jako šest ze 16 běhů v mém měření. Vlastní pravidlo PHPStanu z modulu 6 nahlásilo nad jejich diffy všech šest.

Co v kurzu je?

13 modulů, dohromady kolem šesti hodin. Lekce mají 4-15 minut a k modulům 3-11 patří cvičení ve veřejném repozitáři kurzu.

00Úvod a experiment25 min
  1. 0.1Proč „skoro správný“ kód stojí víc než žádný zdarma
  2. 0.2Experiment: agent bez mantinelů zdarma
  3. 0.3Ukázkový projekt a jak s kurzem pracovat
01Jak agent pracuje25 min
  1. 1.1Smyčka agenta
  2. 1.2Kontext agenta je omezený zdroj
  3. 1.3Kde agent selhává systematicky
  4. 1.4Kdy AI nepoužít
02Kontext projektu25 min
  1. 2.1Instrukční soubor, který agent nečte jen do půlky
  2. 2.2Symfony projekt očima agenta
  3. 2.3Znalost na vyžádání
  4. 2.4Údržba kontextu
03Plán před kódem30 min
  1. 3.1Prozkoumat, naplánovat, implementovat, commitnout
  2. 3.2Zadání s ověřitelným koncem
  3. 3.3Velikost změny
  4. 3.4Git jako záchranná síť
04Testy jako první senzor30 min
  1. 4.1Agent TDD dělat nechce
  2. 4.2Test-first s agentem v praxi
  3. 4.3Když agent upravuje testy, aby prošly
  4. 4.4Mutační testy
  5. 4.5Rychlá zpětná vazba
05Statická analýza25 min
  1. 5.1PHPStan na max a baseline
  2. 5.2Strict rules a typy domény
  3. 5.3Senzor, který agent spouští sám
06Z opakované chyby pravidlo35 min
  1. 6.1Žebřík vynucování
  2. 6.2Vlastní PHPStan pravidlo
  3. 6.3Rector místo 500 editací
07Architektura jako mantinel35 min
  1. 7.1Proč agent rozbíjí hranice
  2. 7.2Ohraničené kontexty jako hranice čtení i zápisu
  3. 7.3Deptrac
  4. 7.4Agregát chrání invarianty
  5. 7.5Symfony a Doctrine čitelné pro agenta
08Review AI kódu30 min
  1. 8.1Pořadí: stroj, AI, člověk
  2. 8.2Reviewer v čistém kontextu
  3. 8.3Co hledá člověk
  4. 8.4Kognitivní dluh
09Bezpečnost30 min
  1. 9.1Typické díry v AI kódu pro Symfony
  2. 9.2Oprávnění a sandbox
  3. 9.3Tajemství
  4. 9.4Prompt injection
  5. 9.5Vymyšlené balíčky
10Legacy kód30 min
  1. 10.1Agent jako průvodce neznámým kódem
  2. 10.2Charakterizační testy
  3. 10.3Migrace s pilotem
11Tým25 min
  1. 11.1Sdílené mantinely v repozitáři
  2. 11.2Pravidla firmy
  3. 11.3Junioři a AI
  4. 11.4Náklady a měření
12Stejné zadání znovu20 min
  1. 12.1Opakování experimentu z 0.2
  2. 12.2Přenos do Nette a Laravelu
  3. 12.3Kde začít v pondělí

Pro koho to je?

Pro PHP vývojáře a tech leady, kteří agenta už používají a jeho výstupu úplně nevěří. Hodit se bude i těm, kterým review AI kódu bere víc času, než kolik agent ušetřil, a týmům, které chtějí pro AI pravidla místo zákazu nebo živelnosti.

Ukázky jsou na Symfony, ale testy, PHPStan, Deptrac i Rector fungují stejně v Nette i Laravelu (co se liší, ukazuje lekce 12.2).

Pokud se teprve učíte PHP nebo Symfony, kurz vám bohužel moc nedá. Taky není o tom, jak AI zabudovat do aplikace (RAG, MCP servery), a přehled nástrojů s tarify v něm nenajdete.

Dvě lekce zdarma

Proč „skoro správný“ kód stojí víc než žádný. Co říkají data o AI a produktivitě.
Experiment: agent bez mantinelů. Přehrávka skutečné relace Claude Code, chyba po chybě.
Michal Katuščák

Kdo kurz dělá?

Jsem Michal Katuščák, PHP vývojář a architekt z Českých Budějovic. Napsal jsem příručku DDD v Symfony (je zdarma na webu) a k ní videokurz na YouTube.

Agenta používám každý den a na spoustu věcí je fakt rychlý. Jenže čím víc kódu za mě napíše, tím víc ho musím číst. Chtěl jsem vědět, kolik z té kontroly se dá předat strojům, tak jsem to změřil. Z měření a z příručky vznikl tenhle kurz.

Hranice kontextů a agregáty z příručky v něm drží agenta v jeho části kódu. Příručku znát nemusíte. Kde se o ni kurz opírá, odkazuje na konkrétní kapitolu.

Kolik to stojí?

Platíte jednou a kurz máte bez časového omezení, aktualizace dostáváte 12 měsíců. Fakturu dostanete na jméno i na firmu. Nejsem plátce DPH, takže ceny jsou konečné.

Jednotlivec

  • celý kurz a cvičení
  • text ke každé lekci se zdroji
  • aktualizace na 12 měsíců
Na čekací listinu
1 790 Kč
v předprodeji, pak 2 490 Kč

Tým do 5 lidí

8 900 Kč

5 přístupů na jednu fakturu, sdílená pravidla a šablony pro repozitář.

Pro firmy

Tým do 15 lidí

19 900 Kč

15 přístupů na jednu fakturu a sleva na workshop pro tým.

Pro firmy

Kurz vám může zaplatit i zaměstnavatel, jak na to. Pro firmy dělám i jednodenní workshop nad vlastním kódem týmu (od 30 000 Kč), víc na stránce pro firmy.

Otázky

Proč Symfony, a ne Nette nebo Laravel?
Ukázkový projekt potřebuje jeden framework a příručka, na kterou kurz navazuje, je o Symfony. Testy, PHPStan, Deptrac a Rector fungují ve všech třech stejně. Co se liší, ukazuje lekce 12.2.
Musím používat Claude Code?
Nemusíte. Lekce používají obecné pojmy (instrukční soubor projektu, režim plánování, hook) a v Claude Code jsou natočené jen ukázky. Jak se totéž dělá v Cursoru, Copilotu a Codexu, ukazují krátká samostatná videa.
Nástroje se mění každý měsíc. Nezastará kurz?
Základ kurzu tvoří věci, které se skoro nemění: testy, statická analýza, architektura a review. Ovládání konkrétních nástrojů je v krátkých videích, která jde přetočit samostatně. Verze a ceny jsou v textové příloze a tu aktualizuju jednou za čtvrtletí.
Potřebuji znát DDD?
Nepotřebujete. Kurz vysvětlí, co z DDD používá (hlavně hranice kontextů a agregáty), a odkáže na kapitoly příručky, kde je to podrobněji.
Kdy kurz vyjde?
Datum pošlu e-mailem lidem z čekací listiny. Předprodejní cena 1 790 Kč pak platí pro všechny až do konce předprodeje, lidé z listiny se o něm jen dozví první a ukázkové lekce dostanou o den dřív.
Jde koupit na fakturu pro firmu?
Jde. Při platbě kartou vyplníte název firmy, IČO a DIČ a faktura přijde e-mailem. Kdo chce platit převodem, pošle poptávku a dostane zálohovou fakturu. Týmová licence se platí jednou fakturou. Hotový e-mail pro šéfa je na stránce o proplacení.
Co když mi kurz nesedne?
Napište mi do 14 dnů od nákupu a vrátím vám celou částku, důvod psát nemusíte. Podrobnosti jsou v obchodních podmínkách.

Předprodej za 1 790 Kč

Až se otevře, dám vám vědět e-mailem. Obě ukázkové lekce dostanete o den dřív než ostatní.

E-mail použiju jen k informacím o kurzu. Odhlásit se jde jedním odkazem v každé zprávě. Zásady ochrany osobních údajů.