From 11a18eb1a6ed48646b186cb8391ece431dc346d6 Mon Sep 17 00:00:00 2001 From: E98Developer Date: Mon, 17 Aug 2026 12:22:18 +0200 Subject: [PATCH] =?UTF-8?q?ADD=20CLAUDE.md=20a=20fejleszt=C5=91i=20munkafo?= =?UTF-8?q?lyamat=20r=C3=B6gz=C3=ADt=C3=A9s=C3=A9re?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A teszt-optimalizálás során több olyan szabály és csapda derült ki, ami a kódból nem olvasható ki, és amit egy új session vagy a jövőbeli önmagunk könnyen elrontana: - A teljes suite --parallel-lel fut, EGY tesztre viszont ne: ott a hat processz bootja tiszta veszteség. - A tests/TestCase.php DB-név mintáját nem szabad str_starts_with($db, 'd2d')-re lazítani, mert az átengedné az éles adatbázist. - A ParallelTesting::callSetUpTestCaseCallbacks() hívás nem felesleges: enélkül a processzenkénti adatbázis sosem jön létre. - A mysql kliens PATH-on léte nélkül az egész suite elszáll, nem csak lassabb. - A bootstrap/cache/blade-icons.php adja a boot idejének a felét. - Új migráció után schema:dump kell, --prune viszont soha. - A deployment tesztek fájljai ne nőjenek 35 mp fölé. A deploy szakasz azért került bele, mert a kézi fájlmásolás egyszer valódi éles incidenst okozott, és a queue worker újraindításának sorrendje sem magától értetődő. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..156a2a1 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,105 @@ +# CLAUDE.md + +Laravel 12 (PHP 8.4) + Filament 4 + Livewire 3, Pest 3 tesztekkel, MariaDB adatbázison. +Fejlesztés Windowson, egyetlen gépen — nincs csapat és nincs CI. + +## Tesztek futtatása + +Teljes suite (~77 mp, 6 processzen): + +```bash +php artisan test --parallel +``` + +Egy tesztre vagy egy fájlra **`--parallel` nélkül** — ott a hat processz bootja tiszta +veszteség, a párhuzamos futás lassabb: + +```bash +php artisan test --filter="részlet" +``` + +Hasznos még: `--retry` (előbb a bukott teszteket futtatja, első hibánál megáll) és +`--profile` (a 10 leglassabb teszt). A Pest 3.8-ban **nincs** `--dirty` kapcsoló. + +A `tests/Feature/ExampleTest.php` (`GET /` → 302) **régóta bukik**, függetlenül minden +más munkától. Egy bukó teszt a teljes suite-on ez, nem regresszió. + +### Adatbázis-védelem + +A `tests/TestCase.php` `setUp()`-ja a `RefreshDatabase` **előtt** ellenőrzi a +konfigurált adatbázisnevet, mert a `RefreshDatabase` feltétel nélkül eldobja a +táblákat. Az éles `d2d` név azonnali `exit(1)`-et vált ki. + +Elfogadott név: `/^d2dtest(_test_\d+)?$/`. A `_test_N` alak a `--parallel` +processzenkénti adatbázisa (a nevet a Laravel `TestDatabases::testDatabase()` adja). +**Ezt a mintát ne lazítsd `str_starts_with($db, 'd2d')`-re** — az átengedné az éles +adatbázist is. + +A `setUp()` szándékosan hívja meg maga a `ParallelTesting::callSetUpTestCaseCallbacks()`-ot: +a Laravel ezt csak akkor futtatná, ha ő hozta létre az alkalmazást, mi viszont előbb +bootolunk az ellenőrzés miatt. Enélkül a processzenkénti adatbázis sosem jönne létre, +és minden processz ugyanazt az adatbázist migrálná. + +## Gépfüggő beállítások + +**A `mysql` kliensnek a PATH-on kell lennie**, különben az egész teszt-suite elszáll +(`MySqlSchemaState.php`). Binárisok: `C:\www\envkit\services\mysql\11.8.2\bin`. + +**`bootstrap/cache/blade-icons.php`** — ez adja az app boot idejének a felét +(nélküle 8,2 mp, vele 3,8 mp minden `php artisan` hívás). Gitignore-olt, tehát +gépenként kell egyszer: + +```bash +php artisan icons:cache +``` + +Új ikonkészlet vagy ikonokat szállító csomag után újra kell generálni. A +`php artisan filament:optimize` **nem** hoz további nyereséget (mérve), viszont +elrejtené az újonnan létrehozott Filament resource-okat — ne használd fejlesztés közben. + +## Migrációk és séma dump + +`database/schema/mysql-schema.sql` váltja ki a 103 migráció lefuttatását a teszteknél. +**Minden új migráció után újra kell generálni:** + +```bash +php artisan schema:dump +``` + +Ha elmarad, az nem törik el semmit — a Laravel betölti a dumpot, majd a dump utáni +migrációkat egyenként lefuttatja rá. + +A dumpot a Laravel csak akkor tölti be, ha a `migrations` tábla **üres**. Az e2e/d2d +környezetek, ahol már vannak lefutott migrációk, változatlanul inkrementálisan +migrálnak. A `--prune` kapcsolót **ne** használd: az törölné a migrációs fájlokat. + +## A deployment tesztek szerkezete + +`tests/Feature/Deployment/` hat fájlból áll, mert a paratest **fájlonként** osztja szét +a munkát — egyetlen nagy fájlból nem tud párhuzamosítani. A felosztás mért időkre van +kalibrálva, a leghosszabb fájl ~35 mp. + +Ha új tesztet írsz, a téma szerinti fájlba tedd — de **ha az a fájl 35 mp fölé nőne, +bontsd tovább**: a párhuzamos futás faliórája a leghosszabb fájlhoz van kötve. + +A közös segédfüggvények a `DeploymentTestHelpers.php`-ban vannak (nem `*Test.php`, ezért +a phpunit nem szedi fel). A temp git repó **processzenként egyszer** épül fel, a tesztek +`File::copyDirectory`-val kapnak róla saját másolatot. A takarítás +`register_shutdown_function`-ben van, **nem `afterAll()`-ban**: az fájlonként futna le, és +a következő teszt-fájl alól húzná ki a mintát. + +## Deploy + +A deploy **kézi fájlmásolással** történik, nem gittel. Emiatt egy „benne van-e már élesben +ez a javítás" kérdés **nem válaszolható meg a git állapotából** — a deployolt fájl +tartalmát kell megnézni. + +Queue-alapú funkcióknál a fájlmásolás önmagában nem elég: a `queue:work` hosszan futó +folyamat, a memóriájában tartja a régi kódot. A sorrend: + +```bash +php artisan config:clear && php artisan cache:clear +``` + +majd a workert futtató service force-restartja (d2d-n `d2d-environment_queue`). A restart +a cache ürítés **után** jön, különben a frissen induló worker a régi konfigot töltené be.