fix(v5): kein stilles Scheitern mehr — Rip-Start meldet unerreichbare Ablage, Kern-Neustart verdrahtet das Fenster neu, eine Wache-Kette je Laufwerk, Rettungs-Abbild überlebt, Titel-Auftrag schlägt „unbekannt"
WAS: - pipeline.starten fängt jede Ausnahme und meldet sie als Fehler des Laufwerks; vor dem Start eine Schreibprobe am Zielordner mit Klartext („nicht erreichbar … NAS verbunden?"). Vorher warf mkdirSync bei toter Ablage aus starten() heraus, der Aufrufer schluckte es: kein Fehler im Fenster, keine Protokollzeile, der Dialog ging zu (Sonde 10). - kern/index.ts: unbehandelte Promise-Ablehnungen landen im Protokoll und im Fenster (gemessen: ein Electron-utilityProcess stirbt daran nicht, er schweigt); echte Ausnahmen werden protokolliert, der Kern endet kontrolliert, der Haupt startet ihn neu. Die Einlege-Kette hat ein Fangnetz. - kernstart.ts spannt nach einem Kern-Neustart den Fenster-Port neu auf; das Fenster schließt den toten Port und meldet den Neustart als Zeile. Vorher blieb es taub, bis Rippy komplett neu gestartet wurde. - wache.runde() löscht den geplanten Timer, bevor es einen neuen setzt — jeder Auswurf legte sonst eine weitere 3-s-Kette an (Sonde 3). - beenden() räumt den leeren Roh-Ordner, verschont aber rettung.iso und den Bericht (RETTUNG_DATEIEN). - Typ „unbekannt" heißt nur ohne Titel-Auftrag ISO; mit Auftrag rippt makemkvcon, der Typ folgt der Größe (Blu-ray/DVD) für Preset und Ordner. WARUM: Durchsicht 12.09.2026, Funde F2, F4, F6, F8, F10 — jeder mit Test. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
12b9720386
commit
8c4456d005
@@ -87,6 +87,21 @@ const kontext: KernKontext = {
|
||||
},
|
||||
}
|
||||
|
||||
// 5.7.0 (Durchsicht 12.09.2026, F2): Ein Fehler, den niemand fängt, darf
|
||||
// nicht still verschwinden. Gemessen in Electron 44: Ein utilityProcess
|
||||
// STIRBT NICHT an einer unbehandelten Promise-Ablehnung — er schweigt nur,
|
||||
// und die Konsole eines Tray-Programms sieht niemand. Deshalb landet jede
|
||||
// solche Ablehnung im Protokoll und im Fenster (R4). Eine echte Ausnahme
|
||||
// wird protokolliert und beendet den Kern kontrolliert — der Haupt startet
|
||||
// ihn neu und verdrahtet das Fenster wieder (kernstart.ts).
|
||||
process.on('unhandledRejection', (grund: unknown) => {
|
||||
kontext.fehler(`Unbehandelte Ablehnung im Kern: ${String(grund instanceof Error ? (grund.stack ?? grund.message) : grund).slice(0, 600)}`)
|
||||
})
|
||||
process.on('uncaughtException', (fehler: Error) => {
|
||||
kontext.fehler(`Absturz im Kern: ${String(fehler.stack ?? fehler.message).slice(0, 600)} — der Kern beendet sich, der Haupt startet ihn neu.`)
|
||||
setTimeout(() => process.exit(1), 200)
|
||||
})
|
||||
|
||||
// ── Dienste verdrahten ──────────────────────────────────────────────────
|
||||
const einstellungen = new EinstellungsDienst(kontext)
|
||||
const werkzeuge = new WerkzeugDienst(kontext, einstellungen)
|
||||
@@ -101,10 +116,13 @@ const laufwerke = new LaufwerkDienst(
|
||||
kontext,
|
||||
{
|
||||
discEingelegt: (geraet) => {
|
||||
void erkennung.discErmitteln(geraet).then((zuordnung) => {
|
||||
automatik.zuordnungMerken(geraet.id, zuordnung)
|
||||
return automatik.pruefen(geraet, zuordnung, erkennung.schonGerippt(geraet.id))
|
||||
})
|
||||
void erkennung
|
||||
.discErmitteln(geraet)
|
||||
.then((zuordnung) => {
|
||||
automatik.zuordnungMerken(geraet.id, zuordnung)
|
||||
return automatik.pruefen(geraet, zuordnung, erkennung.schonGerippt(geraet.id))
|
||||
})
|
||||
.catch((fehler: unknown) => kontext.fehler(`Nach dem Einlegen in ${geraet.id}: ${String(fehler)}`))
|
||||
},
|
||||
discEntnommen: (geraet) => {
|
||||
erkennung.discVergessen(geraet.id)
|
||||
|
||||
Reference in New Issue
Block a user