Fix: Tonspur-Remux konnte bei Windows-Datei-Lock Original UND Remux verlieren
Der atomare Ersetzen-Schritt loeschte das Original bevor der Ersatz bestaetigt war; schlug das anschliessende Rename fehl (z.B. AV/Indexer-Lock), raeumte der aeussere catch zusaetzlich die Temp-Datei weg -> null Kopien auf der Platte. - Atomares Replace-over (MoveFileEx REPLACE_EXISTING / rename(2)) statt rm-dann-rename: filePath haelt zu jedem Zeitpunkt entweder das volle Original oder den vollen Remux. - renameWithRetry: transiente Locks (EBUSY/EACCES/EPERM/EEXIST) mit Backoff (200/500/1000ms) statt sofort abzubrechen. - Eindeutiger Temp-Name (~rd<pid><rand>) statt fixem ~rdtmp -> keine Kollision zwischen parallelen Paketen/Retries. - 3 neue Tests (Recovery bei Replace-Fehler, Retry-Pfad EBUSY/EXDEV).
This commit is contained in:
+47
-4
@@ -1,8 +1,51 @@
|
||||
# Real-Debrid-Downloader — Tasks (Stand 2026-06-07)
|
||||
# Real-Debrid-Downloader — Tasks (Stand 2026-06-08)
|
||||
|
||||
**Status:** Alle zugesagten Features erledigt+released (Archiv unten). EIN Bug analysiert
|
||||
+ geparkt (Mega-Web Account-3-Rotation, siehe direkt unten — wartet auf 1 Log-Zahl vom User).
|
||||
Rest ist freiwilliger Backlog.
|
||||
**Status:** Alle zugesagten Features erledigt+released (Archiv unten). Aktuell läuft ein
|
||||
**intensiver Bug-Audit** (User-Goal 2026-06-08, "schaue intensiv nach weiteren Bugs") —
|
||||
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.
|
||||
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)
|
||||
- [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<pid><rand>`, 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).
|
||||
|
||||
### Release 2 — Medium/Low (v1.7.190), ein Commit pro Fix
|
||||
- [ ] **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:**
|
||||
`AbortSignal.any([ac.signal, AbortSignal.timeout(x)]).reason?.name==='TimeoutError'` in DIESEM
|
||||
Electron-Build; konservativen Fallback behalten, alte Guard nicht blind löschen.
|
||||
- [ ] **F** Mega-Web empty-streak Concurrency (streak permanent-park unreachable-to-clear vorher
|
||||
re-verifizieren bevor Maschinerie).
|
||||
- [ ] **G** download-manager `dropItemContribution` subtrahiert Session-Totals nicht.
|
||||
- [ ] **H** logger.ts `flushAsync` snapshot-by-slice korrumpiert bei 1MB-Cap-Trim während await
|
||||
→ move-snapshot (`linesSnapshot = pendingLines; pendingLines = []`).
|
||||
- [ ] **I** → mit B zusammen (app-controller live-usage-Counter).
|
||||
- [ ] **J** download-manager `abortPackagePostProcessing` löscht Task-Handle ohne Identity-Guard.
|
||||
- [ ] **L** `isGermanStream` Title-Regex False-Positive.
|
||||
- [ ] **M** `looksLikeGermanRelease` 'dubbed' zu breit.
|
||||
- [ ] **N** `stripDualLangFromFileName` Kollision.
|
||||
- [ ] **O** classifyAccountFailure abort-Branch jetzt tot (nach v1.7.187-Fix).
|
||||
- [ ] **P** extractor.ts nested-Resume-Keys (`nested:<name>`) bei jedem extractPackageArchives
|
||||
gepurged (prune-Whitelist nur top-level) → `startsWith("nested:")` in prune skippen.
|
||||
- [ ] **Q** (NEU, aus A-Review) `collectFilesByExtensions` filtert `~rd`-Temp-Präfix NICHT →
|
||||
crash-verwaiste Teil-Remuxe könnten in Library gesammelt werden. Vorbestehend (alter fixer
|
||||
`~rdtmp` wurde überschrieben, neuer unique akkumuliert) → `~`-Präfix in collect skippen.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user