Schritt 9/9 setzte bisher nur eine Warnung ab und lief mit Exit-Code 0
weiter, obwohl die neue Version bereits live war. Jetzt zählt auch
tests/e2e/run.sh zum Gate (überspringt sich selbst mit Exit 0 ohne
Runner), ein Fehlschlag setzt UPDATE_FAILED=true und beendet das
Script mit Exit-Code 1. Kein automatischer Rollback – stattdessen ein
lauter Hinweis auf das Backup aus Schritt 3 und ./scripts/restore.sh.
--no-tests bleibt als Notausstieg bestehen.
Steuerkram an den e2e-runner angebunden (tests/e2e/, 44 Playwright-Tests).
Der erste Smoke-Lauf fand zwei Seiten mit HTTP 500: AccountController::create
las $_GET['from'] ungeprüft, assets/form.php nutzte $testMode und
$defaultKontoId außerhalb des Bearbeiten-Zweigs. Beides war bis zur
Fehler-Härtung (#142) nur eine stille Warning.
Test 67 räumt sein Belegverzeichnis jetzt mit ab - es blieb als root-eigenes
Verzeichnis liegen und blockierte spätere echte Uploads mit HTTP 500.
Test 77 (neu) sichert die Löschsperre von Beleg::delete() ab.
- FinTS-Abruf für Comdirect/DKB/Sparkassen via nemiah/php-fints (4.1)
inkl. photoTAN-Eingabe-Modal und Multi-Konto-Auswahl
- Neue Tabelle bank_sources (CSV/API/FinTS) ersetzt bank_import_formats
und bank_connections, Backfill in Migration 068
- Symmetrische Verschlüsselung sensibler Felder (PayPal-Signature,
FinTS-PIN) mit AES-256-GCM, APP_KEY in .env
- Routes /bank/fints* → /bank/direkt*; "+ Neue Bank…"-Dialog erlaubt
freie API/FinTS-Anbieter
- Scripts/encrypt_bank_secrets.php als idempotenter Migrations-Helfer
- Neue Tests 36 (Crypto) und 37 (BankSource)