# Backlog Bekannte offene Punkte, die bewusst zurückgestellt wurden. Nichts hier ist vergessen — es ist entschieden, es später zu machen. Erledigtes wandert raus (die Geschichte steht im CHANGELOG). --- ## 🧪 Widget-Test `song_detail_sheet_test.dart` hängt (übersprungen) **Stand:** 2026-08-21 · **Auswirkung:** nur Tests, die App ist nicht betroffen Der Test `Übernahme eines Online-Vorschlags setzt metadataEdited` bleibt beim Aufbau des Widget-Baums hängen und kommt **nie** zurück — auch nach 13+ Minuten kein Abbruch. Da `flutter test` alle Dateien in einem Lauf abarbeitet, blockierte er den **gesamten** Testlauf. Er ist deshalb mit `skip: true` und einem TODO im Code markiert; der Lauf ist damit wieder in ~20 Sekunden durch. **Fachlich ist nichts ungeprüft:** Was der Test absichern sollte, prüft `test/library/metadaten_uebernahme_test.dart` ohne Widgets — inklusive der Regel, dass eine übernommene Online-Korrektur `metadataEdited` setzt und den nächsten Bibliotheks-Scan damit überlebt. **Was schon eingegrenzt ist:** | Verdacht | Ergebnis | |---|---| | `http.runWithClient` erreicht den State im Modal-Sheet nicht | ❌ widerlegt — eigene Sonde zeigt `MockClient` auch im Sheet | | drift unter `testWidgets` blockiert (fehlendes `runAsync`) | ❌ widerlegt — `upsertSongs` + `watchSongs().first` laufen durch | | Einer der Provider blockiert `pumpWidget` | ❌ widerlegt — `MeloDb`, `CategoryService`, `AppSettings` einzeln geprüft | | `db.close()` im Teardown (der Hänger aus `hauptmenue_test.dart`) | ❌ widerlegt — Entfernen ändert nichts, siehe unten | | Zusammenspiel `showModalBottomSheet` + Providerbaum | ⏳ offen — der Hänger tritt zwischen `pumpWidget` und dem ersten `tap` auf | **Nicht die Ursache (2026-08-21 geprüft):** In `hauptmenue_test.dart` trat ein Hänger mit derselben Signatur auf. Dort war die Ursache `await db.close()` nach einem `tester.tap` — drift plant beim Schließen eine Aufräum-Aufgabe ein, die der Test-Rahmen nicht mehr abarbeitet. Das Rezept dagegen: Dienste per `.value` bereitstellen (der Baum darf sie nicht schließen), am Testende `pumpWidget(SizedBox())` + `pump(Duration(milliseconds: 1))`, und auf `db.close()` verzichten. **Bei `song_detail_sheet_test.dart` hilft genau das nicht** — dort wurde es angewandt und der Test hängt weiter. Die beiden Hänger haben also unterschiedliche Ursachen. **Neu geprüft (2026-08-24):** `addTearDown(db.close)` **entfernt** und den Test entsperrt — er hängt unverändert. `db.close()` ist hier also ausgeschlossen, nicht nur „hilft nicht". **Neue Spur aus einem anderen Hänger (2026-08-24).** `auswahl_modus_test.dart` zeigte dieselbe Signatur: `pumpAndSettle` kam nie zurück, auch nicht mit gesetzter Zeitgrenze. Ursache dort war, dass **Datenbank und Dienste in `setUp` entstanden**. `setUp` läuft außerhalb der Testzone: die Ströme von drift liefen in echter Zeit, während `pumpAndSettle` in Testzeit auf sie wartete. Aufbau in den Testkörper verschoben → alle fünf Tests laufen in einer Sekunde durch. Auf `song_detail_sheet_test.dart` trifft das nicht unmittelbar zu (dort steht schon alles im Testkörper) — aber `http.runWithClient` legt eine eigene Zone um den Aufbau. Ob das dieselbe Trennung zwischen echter und Testzeit erzeugt, ist der nächste lohnende Versuch: den Widget-Baum **vor** `runWithClient` aufbauen und nur den Netz-Aufruf darin laufen lassen. **Nächster Schritt:** Den Testkörper schrittweise abspecken (Providerbaum minimieren, Sheet durch eine normale Route ersetzen) bis der Hänger verschwindet — die letzte entfernte Zutat ist die Ursache. Ein `tester.pumpWidget(const SizedBox())` mit anschließendem `pump()` am Testende hat bei `online_screen_test.dart` einen verwandten Aufräum-Timer von drift gelöst und ist einen Versuch wert. --- ## 📥 Kein Wiederherstellen gelöschter Titel **Stand:** 2026-08-21 · **Auswirkung:** Datenverlust im Fehlerfall möglich Löschungen wirken über den Geräte-Abgleich in beide Richtungen. Gegen versehentliche Massenlöschung schützt die Sicherheitsbremse (`loeschBremseGreift`), aber eine **einzelne** irrtümliche Löschung ist endgültig: Datei und Navidrome-Verknüpfung sind weg, sobald kein Konto den Titel mehr aktiv hat. Denkbar wäre ein Papierkorb am Server (Datei erst nach X Tagen wirklich löschen). Bewusst nicht gebaut — erst beobachten, ob es in der Praxis gebraucht wird.