# Änderungen ## E2E-Datenbestand wird vor jedem Lauf aufgeräumt (04.09.2026) Die Browser-Tests legten ihre Konten, Kategorien und Buchungen bei jedem Lauf neu an, weggeräumt hat sie niemand: Zuletzt standen über dreitausend Zeilen Testdaten in der Datenbank – vierzig „E2E Bankprovision …“ hintereinander im Kategoriefilter des Kontoblatts, und kein Bildschirmfoto eines fehlgeschlagenen Tests war mehr zu gebrauchen. `scripts/e2e-aufraeumen.php` räumt den Bestand weg; `tests/e2e/run.sh` ruft es vor jedem Lauf auf. Vor dem Lauf und nicht danach, weil ein abgebrochener Lauf sonst einen Bestand hinterlässt, an den niemand mehr denkt – und weil die Daten des letzten Laufs so bis zum nächsten für die Fehlersuche stehen bleiben. `E2E_KEIN_AUFRAEUMEN=1` lässt sie liegen, `--probe` zählt nur, was wegfiele. Gelöscht wird, was am Testnutzer hängt – nicht, was nach Testdaten aussieht. Ein Namensmuster übersähe die Buchung „Supermarkt“ und träfe irgendwann etwas Echtes; die Fremdschlüssel dagegen sagen genau, was zu diesem Nutzer gehört, und nehmen über ihre Kaskaden auch die Zeilen ohne eigene `benutzer_id` mit (Splitzeilen, Budgetpositionen, Bankkonten, Kurse). Der Nutzer selbst bleibt stehen, sonst käme der nächste Lauf nicht durch die Anmeldung. Als Schranke gegen den Fehlgriff muss er den Anzeigenamen tragen, den `scripts/e2e-benutzer.php` setzt: Wer `E2E_USER` versehentlich auf seinen eigenen Zugang stellt, bekommt einen Abbruch statt eines leeren Datenbestands. Das Aufräumen deckte auf, dass sieben Tests auf den Resten früherer Läufe standen: Die Auswertungen prüfen, dass ein Bericht eine Tabelle statt eines Platzhalters zeigt, das Cockpit, dass „Übrige Konten“ eine Ebene tiefer führt – Daten dafür legte keiner von ihnen an. Auf einer frisch aufgeräumten Instanz fielen sie aus; vorher hing ihr Ergebnis davon ab, wer zuletzt was hatte laufen lassen. `scripts/e2e-grundbestand.php` stellt deshalb nach dem Aufräumen einen festgelegten Bestand her, dessen Zuschnitte an genau diesen Tests hängen: mehr Konten als `Vermoegensentwicklung::SERIEN`, Buchungen in jedem Monat des laufenden Jahres, ein Vorjahr für den Vergleichsbericht, ein Depot mit Wertpapiergeschäft. Die Suite prüft damit dasselbe wie vorher, aber auf einem Bestand, den sie kennt. ## E2E-Tests an den Typeahead im Kontoblatt angepasst (04.09.2026) Zwölf E2E-Tests standen seit dem Typeahead-Umbau (Fix #41) auf Rot – nicht, weil die Anwendung etwas falsch machte, sondern weil die Specs den alten Stand prüften. Vier Ursachen lagen darunter: - **Die Kombobox versteckt ihr `` in ein Eingabefeld mit gefilterter Liste um, ohne dass App- oder Formular-Code etwas davon merken – Wert und Ändern-Ereignis bleiben identisch. Geprüft wurde außerdem, dass „Empfänger ins Adressbuch übernehmen“ beim Erfassen einer Überweisung tatsächlich eine Adresse anlegt (`ZahlungsverkehrController::anlegen()` → `Adresse::anlegen()`). ## Zahlungsverkehr: automatische Bankauswahl (31.08.2026) Beim Erfassen einer Überweisung musste bisher neben dem Auftragskonto auch die Bankverbindung von Hand gewählt werden – obwohl sich diese meist schon aus dem Konto ergibt (Feature #50). Das Formular fragt jetzt nur noch das Auftragskonto ab; die passende Bank ermittelt `Bankzugang::zugangJeKonto()` anhand der Kontenzuordnung (`bank_konten.konto_id`) und trägt sie beim Speichern automatisch in `zahlungsauftraege.zugang_id` ein. Konten ohne konfigurierte Bankverbindung stehen als Auftragskonto gar nicht erst zur Auswahl – ohne Bank ließe sich ohnehin nichts senden. Ein bereits erfasster Auftrag behält sein Auftragskonto auch dann, wenn dessen Bank nachträglich entfernt wurde: Es bleibt in der Auswahl, statt beim nächsten Speichern unbemerkt zu wechseln. ## Einstellungen: Reiter "Profil" zum Ändern des eigenen Passworts (20.08.2026) Bislang ließ sich das eigene Passwort nur direkt über den Datenbestand ändern (Feature #46). Der Einstellungsdialog bekommt dafür einen neuen Reiter `Profil`, der den angemeldeten Benutzernamen anzeigt und ein eigenes Formular für die Passwortänderung enthält – getrennt vom generischen Speichern-Formular der übrigen Reiter, weil hier kein Einstellungswert, sondern der Anmeldedatensatz geschrieben wird. `EinstellungenController::passwortAendern()` (Route `POST /einstellungen/passwort`) verlangt das aktuelle Passwort (geprüft über `Benutzer::pruefeAnmeldung()`), ein neues mit mindestens 10 Zeichen – dieselbe Grenze wie bei der Ersteinrichtung – und dessen Wiederholung. Bei Erfolg schreibt `Benutzer::passwortSetzen()` den neuen Hash; ein Eintrag landet wie bei An- und Abmeldung im Debug-Log. ## CONTRIBUTE.md und Setup-Skript für Mitwirkende (19.08.2026) `CONTRIBUTE.md` beschreibt, wie Beiträge ankommen (Issue, PR, E-Mail), welche Unterstützung gesucht wird und die drei bindenden Leitlinien des Projekts: FOSS, Datensparsamkeit und Security mit direktem Kontakt an fds2610@sonnengetrock.net für Sicherheitslücken. Vorangestellt ist ein Disclaimer, dass VIBE Coding ausdrücklich erlaubt ist – das Projekt selbst ist mit intensivem LLM-Einsatz entstanden (Feature #43). Neu ist außerdem `dev-setup.sh` im Repo-Root: richtet Docker (optional), Checkout mit Fork- und Upstream-Remote, lokale Container und optional die E2E-Testinfrastruktur ein. Zielverzeichnis, E2E-Setup und Docker-Installation lassen sich über Flags oder Umgebungsvariablen abweichend vom Default setzen. ## Kontoblatt: Typeahead für die Kategorie (19.08.2026) Die Kategorie ließ sich im Kontoblatt nur über eine lange Auswahlliste finden – bei vielen Kategorien ein langes Blättern (Feature #41). Ein neues `kombobox.js` baut ein markiertes `` bleibt unsichtbar im Formular stehen, damit Wert, Name und das Ändern-Ereignis für vorhandenen Code unverändert bleiben. Betroffen sind der Kategorie-Filter oben im Kontoblatt und die Schnellzuordnung je Buchung (`kontoblatt.js` öffnet dort die Kombobox statt `showPicker()`, sobald ein `` – ihre Liste ist kurz. Ohne JavaScript bleibt es überall beim normalen `