diff --git a/BACKLOG.md b/BACKLOG.md new file mode 100644 index 0000000..4ecb723 --- /dev/null +++ b/BACKLOG.md @@ -0,0 +1,54 @@ +# 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 | +| Zusammenspiel `showModalBottomSheet` + Providerbaum | ⏳ offen — der Hänger tritt zwischen `pumpWidget` und dem ersten `tap` auf | + +**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. diff --git a/CHANGELOG.md b/CHANGELOG.md index 63d2461..4287128 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.0.0/). ## [Unreleased] +### 📋 Backlog-Datei angelegt (2026-08-21) +- Neu: `BACKLOG.md` — bewusst zurückgestellte Punkte an einer Stelle, damit + nichts stillschweigend liegen bleibt. Drin stehen aktuell der übersprungene + Widget-Test `song_detail_sheet_test.dart` (mit dem Stand der Eingrenzung und + dem nächsten Schritt) und die fehlende Wiederherstellung gelöschter Titel. + ### 🗂️ Alben sind jetzt Kategorien — neue Bibliotheks-Reiter (2026-08-21) - 🏷️ **Album = Kategorie.** Wer seine Sammlung über das **Album-Feld** diff --git a/test/library/song_detail_sheet_test.dart b/test/library/song_detail_sheet_test.dart index 655d394..41defc7 100644 --- a/test/library/song_detail_sheet_test.dart +++ b/test/library/song_detail_sheet_test.dart @@ -34,7 +34,8 @@ void main() { // Ursache liegt im Zusammenspiel von showModalBottomSheet und den // Providern im Test, nicht im geprüften Verhalten. Was er absichern // sollte, prüft jetzt metadaten_uebernahme_test.dart ohne Widgets. - // TODO(melo): Widget-Test wieder zum Laufen bringen. + // TODO(melo): Widget-Test wieder zum Laufen bringen — Stand der + // Eingrenzung und nächster Schritt stehen in BACKLOG.md. testWidgets('Übernahme eines Online-Vorschlags setzt metadataEdited', skip: true, (tester) async { final db = MeloDb(NativeDatabase.memory());