Backlog: uebersprungenen Widget-Test und offene Punkte festhalten

Neu: BACKLOG.md. Haelt fest, was bewusst zurueckgestellt wurde, damit es
nicht stillschweigend liegen bleibt.

- song_detail_sheet_test.dart haengt und ist uebersprungen: inklusive der
  vier bereits widerlegten Verdachtsmomente (runWithClient erreicht das
  Sheet, drift unter testWidgets, einzelne Provider) und dem naechsten
  Schritt. Fachlich deckt metadaten_uebernahme_test.dart den Zweck ab.
- Kein Wiederherstellen einzeln geloeschter Titel (Papierkorb am Server
  waere denkbar, bewusst nicht gebaut).

Das TODO im Test verweist jetzt auf die Datei.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FpPu4nuKjKKeX1RpdDeX81
This commit is contained in:
Hermes (Server)
2026-08-21 10:06:12 +02:00
co-authored by Claude Opus 5
parent c7a7a7c458
commit 5c9bfe2001
3 changed files with 62 additions and 1 deletions
+54
View File
@@ -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.
+6
View File
@@ -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**
+2 -1
View File
@@ -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());