diff --git a/tasks/todo.md b/tasks/todo.md index f48b339..f153ef8 100644 --- a/tasks/todo.md +++ b/tasks/todo.md @@ -8,23 +8,31 @@ Fortschritt direkt unten. ## 🔴 LAUFEND — Bug-Audit 2026-06-08 (Multi-Agent find→verify, 18 bestätigt) -Advisor-Triage: **A = einzige echte Daten-Verlust-Notlage** → zuerst, eigener Release. -Sequenz: Release 1 (v1.7.189) = A + B; Release 2 (v1.7.190) = C,D/E,F,G,H,I,J,L,M,N,O,P,Q. +Advisor-Triage: **A = einzige echte Daten-Verlust-Notlage** (zerstört echte Datei auf Platte) +→ zuerst, ALLEINE Release. **B verifiziert demoted:** applyRetroactiveCleanupPolicy/ +removePackageFromSession löschen KEINE Platten-Dateien (nur Session/Queue-Einträge + ggf. +History-Eintrag) → Queue-Integrität, nicht Daten-Verlust → in v1.7.190-Batch. +Sequenz: Release 1 (v1.7.189) = **A allein**; Release 2 (v1.7.190) = B/I,C,D/E,F,G,H,J,L,M,N,O,P,Q. Ein Commit pro Fix, jeder einzeln verifiziert. **K übersprungen** (auto-rename-Reorder, schlechtestes Risiko/Nutzen, kann für diesen User gar nicht feuern). -### Release 1 — Daten-Verlust-Stopper (v1.7.189) +### Release 1 — Daten-Verlust-Stopper (v1.7.189, A ALLEIN) - [x] **A** `video-processor.ts` atomic-replace zerstörte bei Windows-Lock BEIDE Kopien (rm(original) VOR bestätigtem Replace + outer-catch rm(temp) → 0 Kopien). **GEFIXT:** atomic replace-over + `renameWithRetry` (EBUSY/EACCES/EPERM/EEXIST, Backoff 200/500/1000ms), rm-first-Fallback entfernt, **unique** Temp-Name (`~rd`, löst auch C-Kollision). Advisor bestätigt Ansatz besser als bak-dance (kein Missing-File-Window). 3 neue Tests - (Recovery + Retry-Pfad), 41 video-processor-Tests grün, tsc=6 (Baseline). -- [ ] **B** `app-controller.ts` importBackup (settings-only) ruft setSettings VOR `if(!hasSession)` - → applyRetroactiveCleanupPolicy löscht fertige Downloads. + **I** live-usage-Counter nicht - erhalten (anders als updateSettings). + (Recovery + Retry-Pfad), 41 video-processor-Tests grün, tsc=6 (Baseline). Commit 189af22. ### Release 2 — Medium/Low (v1.7.190), ein Commit pro Fix +- [ ] **B/I** `app-controller.ts` importBackup settings-only: setSettings → applyRetroactive + CleanupPolicy purged die LIVE-Queue (Vertragsbruch "running queue stays untouched"; Dateien + bleiben aber auf Platte). **Fix (Advisor):** (b) retroaktiven Sweep NUR für diesen Import + unterdrücken (importierte Policy gilt weiter für künftige Completions über normalen Pfad) — + NICHT über updateSettings routen (zweite Landmine resetHistoryForRetention). **I:** die 5 + Live-Usage/Status-Felder overlayen wie updateSettings 322-331 INKL. Key-Filterung der + debridLinkApiKey*UsageBytes auf keyIds in restored debridLinkApiKeys (3 All-Time-Totals deckt + setSettings-Math.max schon ab). Vorher 1 grep: forward-Anwendungsstelle der Policy bestätigen. - [ ] **C** ~~fixe Temp-Name-Kollision~~ → bereits in A subsumiert (unique Name). - [ ] **D/E** debrid.ts Rotation: abort-Klassifizierung über `signal.reason` (TimeoutError vs cancel) statt Text/elapsedMs; API-Pfad 'cancel' umgeht. **VORHER empirisch bestätigen:**