(a) public/O-CHAT.html nach BEISPIELE/ verschoben, Test 93 hält den Webroot sauber.
(b) bank/fints.php in Teil-Views + public/static/js/fints.js aufgeteilt.
(c) settings/bankimport.php in Teil-Views + public/static/js/bankimport.js aufgeteilt.
(d) src/Request.php angelegt, BankController als erster Controller umgestellt.
AssetController setzte INSERT INTO bookings bislang direkt ab und umging
damit die Sperre des Geschäftsjahres, den transaktionalen Schutz der
Nummernvergabe und ordnete Stornos dem falschen Geschäftsjahr zu.
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.
Invoice::find() selektierte c.ust_id nicht, invoices hat keine eigene
Spalte dafür - der Zweig addDocumentBuyerVATRegistrationNumber() lief
deshalb nie. Bei Kategorie S optional, bei Reverse Charge und
innergemeinschaftlichen Lieferungen aber Pflicht.
XML-Symbol neben dem PDF-Symbol lädt die Rechnung als reine XML-Datei
(Profil XRechnung 3.0, CIUS von EN 16931). Fehlende Stamm- oder
Rechnungsdaten verhindern den Download nicht, werden aber mit BT-Nummer
in der Detailansicht ausgewiesen. Die PDF-Einbettung bleibt bei
Factur-X EN16931.