presseportale/.ai/rules/general.md
Kevin Adametz d1d2ab3de7 ops: Lokale Datenbank gegen fremde Testläufe absichern — DB_* nicht mehr als Container-Umgebung, Agenten-Regel, Testdatenbank-Pflicht im Baukasten
Am 07.10.2026 hat das RefreshDatabase eines frischen Demo-Projekts (Test der
Vorlagen aus dev/git-deploy-monitoring) die lokale Datenbank `pressekonto` auf
global-mysql vollständig geleert (Binärlog binlog.000009, Pos. 566161486).
Ursache: docker-compose.yml setzte DB_* als Container-Umgebungsvariablen, die
in Laravel Vorrang vor jeder .env haben; die phpunit.xml des Demo-Projekts
erzwang kein SQLite. Die eigene Suite war nicht beteiligt (force="true" und
Guard in tests/TestCase.php greifen; Gegenprobe mit MySQL-Variablen grün).

- docker-compose.yml: DB_* entfernt (Werte identisch in .env), wirksam nach
  Neuerstellen des Containers.
- Baukasten: „Testdatenbank absichern" (phpunit.xml mit force, Guard,
  Gegenprobe) als Pflicht vor RefreshDatabase.
- .ai/rules/general.md und CLAUDE.md: fremde/frische Laravel-Projekte nur mit
  SQLite :memory: testen; migrate hier erst nach migrate:status.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 16:09:25 +00:00

1.6 KiB

paths
**/*

General

Befehle direkt im Dev-Container ausführen

Die Arbeitsumgebung /var/www/html liegt bereits im DEV-Container. PHP-/Artisan-, Composer- und Node-Befehle dort direkt ausführen (z. B. php artisan test --compact), ohne vendor/bin/sail davor. Eine Sail-Meldung über nicht laufendes Docker ist in diesem Container kein Nachweis, dass Docker auf dem Host gestoppt ist. Diese ausdrückliche Benutzeranweisung ersetzt die allgemeine Sail-Prefix-Vorgabe für diese Umgebung.

Fremde oder frische Laravel-Projekte nie gegen die lokale Datenbank testen

Auf global-mysql liegen die Datenbanken mehrerer Projekte, und Container-Umgebungsvariablen haben in Laravel Vorrang vor .env und nicht erzwungenen phpunit.xml-Werten. Ein frisches Laravel-Projekt hat die SQLite-Zeilen in phpunit.xml nur auskommentiert — RefreshDatabase führt dann migrate:fresh auf der Datenbank aus, die die Umgebung vorgibt (07.10.2026: so wurde pressekonto vollständig geleert). Deshalb:

  • Tests, migrate, migrate:fresh, db:wipe oder Seeder eines anderen bzw. frisch angelegten Laravel-Projekts in diesem Container nur mit DB_CONNECTION=sqlite DB_DATABASE=:memory: DB_URL= davor ausführen, z. B. DB_CONNECTION=sqlite DB_DATABASE=:memory: DB_URL= php artisan test.
  • Vorher prüfen, dass phpunit.xml dort SQLite :memory: mit force="true" setzt (siehe dev/git-deploy-monitoring/02-fehlerprotokoll-glitchtip.md, „Testdatenbank absichern“).
  • php artisan migrate in diesem Projekt erst nach php artisan migrate:status: Stehen unerwartet viele Migrationen aus, ist die Datenbank nicht die erwartete — anhalten und nachfragen.