fix(v5): Das Update installierte nie — die eigene Leine erschlug den Installer
Ampel / ampel (push) Successful in 1m41s

Commander: "Rippy wird zwar sauber beendet aber startet NICHT neu in der
neuen version."

Ursache, auf drei Beinen belegt:

1. Bibliothek: electron-updater startet den Installer per
   spawn(..., { detached: true }) (BaseUpdater.js, an der installierten
   Fassung nachgelesen). `detached` setzt unter Windows KEIN Breakaway.
2. Leine: leine.ts setzt KILL_ON_JOB_CLOSE, und Kinder erben die
   Mitgliedschaft. Der Installer war damit Mitglied der Arbeitsgruppe.
3. Platte: pending\RippySetup-5.1.3.exe lag geladen da (18:11:47),
   installiert war weiter 5.1.2. Der Download klappte, nur die
   Installation nicht.

Der Installer starb also in genau der Sekunde, in der Rippy sich
beendete, um ihm Platz zu machen.

Fix — die Leine bleibt, der Installer klinkt sich aus:

* leine.ts setzt zusaetzlich JOB_OBJECT_LIMIT_BREAKAWAY_OK. Das aendert
  fuer sich genommen NICHTS: Kinder erben weiter, ausser sie verlangen
  das Ausklinken selbst. Kern, makemkvcon und HandBrakeCLI bleiben
  angeleint, die rc10-Waisen-Falle (Paragraph 3.3) ist unveraendert zu.
* Neu: ausserhalbDerLeineStarten() startet EIN Programm per CreateProcessW
  mit CREATE_BREAKAWAY_FROM_JOB. Liegt in leine.ts, weil dort die
  Arbeitsgruppe verwaltet wird — und weil Waechter R1 koffi nur dort und
  in kern/laufwerk/win32.ts erlaubt.
* update.ts installiert jetzt SELBST: autoInstallOnAppQuit ist aus, der
  Installerpfad kommt aus downloadUpdate() (laut AppUpdater.d.ts "Paths to
  downloaded files"), die Argumente sind die von electron-updater
  gemessenen (--updated /S --force-run). Gestartet wird beim Beenden
  (will-quit) und ueber den Knopf.
* Neu kommandozeile.ts (pur, ohne koffi/Electron): CreateProcessW nimmt
  EINE Zeichenkette. Ohne die Regeln von CommandLineToArgvW zerfiele ein
  Pfad wie "C:\Users\Tobi Neu\..." in zwei Argumente.

BEWIESEN, nicht behauptet — neu: beweise/leine-breakaway.js

  OHNE Ausklinken (so macht es electron-updater)
    lebt nach dem Tod des Elternprozesses: NEIN  -> WIE ERWARTET
  MIT Ausklinken (so macht es Rippy ab 5.1.4)
    lebt nach dem Tod des Elternprozesses: JA    -> WIE ERWARTET

Der erste Messlauf zeigte ein falsches Negativ: Der Enkel starb an der
sterbenden KONSOLE des Elternprozesses, nicht an der Arbeitsgruppe. Erst
mit CREATE_NO_WINDOW (eigene Konsole) misst der Versuch, was er messen
soll. Diese Lehre steht als Kommentar im Code und der Flag ist auch im
echten Aufruf gesetzt.

237 Tests gruen (vorher 230), Typpruefung sauber. Version 5.1.4.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-01 18:27:36 +02:00
co-authored by Claude Opus 5
parent 1d53e8526f
commit 051cab3afa
9 changed files with 385 additions and 31 deletions
+18 -16
View File
@@ -1,25 +1,27 @@
Version 5.1.3
Version 5.1.4
Das Fenster gehört jetzt Rippy.
Der graue Windows-Rahmen ist weg. Minimieren, Maximieren und Schließen
sitzen oben rechts im Programm selbst, gezogen wird an der Kopfzeile —
Doppelklick darauf maximiert. Die Kanten lassen sich weiter ziehen wie
gewohnt. Schließen versteckt Rippy weiterhin nur im Infobereich, ein
laufender Rip merkt davon nichts.
Das Update installiert sich jetzt wirklich.
Bisher wurde Rippy beim Update sauber beendet — und dann passierte nichts.
Der Grund: Rippy hält alle seine Programme an einer Leine, damit beim
Absturz nichts hängenbleibt und die Disc festhält. Der Update-Installer
hing versehentlich an derselben Leine und wurde in dem Moment
mitgerissen, in dem Rippy sich für ihn beendete. Er startet jetzt
ausdrücklich neben der Leine; alles andere bleibt angeleint wie vorher.
Nichts klebt mehr links.
Die Seite ist jetzt mittig und wächst mit dem Fenster mit, statt auf
halber Breite abzubrechen. Im schmalen Fenster rutschen die Kacheln
untereinander, statt sich zu quetschen; die Einstellungen legen ihre
Abschnittswahl dann als Zeile über die Karten.
Aus 5.1.3: Das Fenster gehört Rippy.
Kein grauer Windows-Rahmen mehr. Minimieren, Maximieren und Schließen
sitzen oben rechts im Programm, gezogen wird an der Kopfzeile.
Aus 5.1.3: Nichts klebt mehr links.
Die Seite ist mittig und wächst mit dem Fenster mit. Im schmalen Fenster
rutschen die Kacheln untereinander, statt sich zu quetschen.
Aus 5.1.2: Rippy sagt Bescheid, wenn ein Update da ist.
Diese Karte hier ist der Beweis — mit Versionsnummer und dieser Liste.
In den Einstellungen gibt es den Knopf "Jetzt auf Updates prüfen".
Diese Karte hier ist der Beweis. In den Einstellungen gibt es dazu den
Knopf "Jetzt auf Updates prüfen".
Aus 5.1.1: Serien-Discs werden richtig erkannt.
Disc 2 von "Spartacus: Gods of the Arena" galt als der Film "Spartacus"
von 1960. Rippy fragt jetzt die Disc selbst: Ihr Inhaltsverzeichnis
nennt die Folgen. Disc-Nummer und Folgenzahl stehen neben dem Titel.
von 1960. Rippy fragt jetzt die Disc selbst.
Unverändert: Updates warten immer, bis kein Rip mehr läuft.