From 45402e887ed1f6332606e4594991b5699fbd9a40 Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Tue, 1 Sep 2026 18:30:43 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20SAVEPOINT=20=E2=80=94=205.1.4=20im=20Ka?= =?UTF-8?q?nal,=20Leine-Fix=20gemessen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Update-Kette hat ab 5.1.2 nie installiert; bewiesen war immer nur der Kanal, nie der letzte Meter. Ursache, Fix und die dreifache Messung festgehalten — inklusive des ersten, falsch negativen Messlaufs. Notiert: Der Sprung AUF 5.1.4 ist einmalig Handarbeit. Co-Authored-By: Claude Opus 5 --- SAVEPOINT.md | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/SAVEPOINT.md b/SAVEPOINT.md index 6d50c8a..4beb411 100644 --- a/SAVEPOINT.md +++ b/SAVEPOINT.md @@ -1,5 +1,86 @@ # SAVEPOINT — Rippy +## Die eigene Leine erschlug den Update-Installer — Version 5.1.4 (01.09.2026, nachts) + +> Commander: *„Das Update auf Version 5.1.3 geht nicht. Rippy wird zwar +> sauber beendet aber startet NICHT neu in der neuen version."* +> +> **Die Update-Kette hat ab 5.1.2 nie funktioniert.** Bewiesen war immer +> nur der KANAL (Download, Prüfsummen, Changelog) — der letzte Meter, das +> INSTALLIEREN, war nie gemessen. Genau die Sorte Annahme, vor der +> AGENTS.md warnt. + +### Die 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 Installer starb also in genau der Sekunde, in der Rippy sich +beendete, um ihm Platz zu machen. + +### Der Fix — die Leine bleibt, der Installer klinkt sich aus + +* `leine.ts` setzt zusätzlich `JOB_OBJECT_LIMIT_BREAKAWAY_OK`. Das ändert + für sich genommen NICHTS (siehe Messung, Fall 2). +* Neu `ausserhalbDerLeineStarten()` — `CreateProcessW` mit + `CREATE_BREAKAWAY_FROM_JOB | CREATE_NO_WINDOW`. Liegt in `leine.ts`, + weil dort die Arbeitsgruppe verwaltet wird und Wächter R1 koffi nur + dort und in `kern/laufwerk/win32.ts` erlaubt. +* `update.ts` installiert jetzt SELBST: `autoInstallOnAppQuit` ist AUS, + der Pfad kommt aus `downloadUpdate()` (AppUpdater.d.ts: „Paths to + downloaded files"), die Argumente sind die gemessenen + (`--updated /S --force-run`). Gestartet bei `will-quit` und per 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. +* **Warum nicht `shell.openPath` wie bei MakeMKV (§ 9)?** Der entkommt der + Leine nur, WEIL er Adminrechte verlangt und über den AppInfo-Dienst + startet. Rippys Installer ist bewusst benutzerlokal + (`isAdminRightsRequired: false`) — er liefe wieder als Kind. + +### Die Messung: `beweise/leine-breakaway.js` + +``` +1) Leine wie bisher, Kind normal -> stirbt WIE ERWARTET +2) Leine erlaubt Ausklinken, Kind normal -> stirbt WIE ERWARTET +3) Leine erlaubt Ausklinken, Kind klinkt sich aus -> lebt WIE ERWARTET +``` + +**Fall 2 ist der wichtige:** Das bloße Erlauben weicht § 3.3 NICHT auf — +Kern, makemkvcon und HandBrakeCLI bleiben angeleint, die rc10-Waisen- +Falle ist unverändert zu. + +**Der erste Messlauf zeigte ein falsches Negativ** („Ausklinken wirkt +nicht"). Grund: Der Enkel teilte sich die KONSOLE des Elternprozesses und +starb mit ihr, nicht mit der Arbeitsgruppe. Erst `CREATE_NO_WINDOW` misst, +was gemessen werden soll. **Lehre: Auch der Versuchsaufbau kann die +falsche Sache messen** — der Flag steht deshalb auch im echten Aufruf. + +### Setup 5.1.4 und Release + +* `dist-setup-514/RippySetup-5.1.4.exe`, **131 528 605 Bytes**, SHA-256 + `2933CA098421A3C5C5807E32BB718B18C4A7FB9F1AB6D70C9B1D164A15F21B84` +* Paket-Smoke GRÜN: `leine=gesetzt … version=5.1.4` — die Leine steht + auch mit dem neuen Recht. +* Im Release `aktuell`, anonym von außen gegengeprüft: Content-Length = + `latest.yml` = lokale Datei; `releaseNotes` durchgereicht. +* 237 Tests, Ampel GRÜN (`051cab3`). + +### ⚠ Der Sprung AUF 5.1.4 ist einmalig Handarbeit + +Eine installierte 5.1.0–5.1.3 kann sich nicht selbst aktualisieren — der +Fehler steckt in IHR. `RippySetup-5.1.4.exe` einmal von Hand ausführen. +**Ab 5.1.4 läuft die Kette von allein**; das ist dann der erste echte +Selbst-Update-Beweis und steht noch aus (z. B. mit einer kleinen 5.1.5). + +--- + ## Eigenes Fenster + Layout, das mitwächst — Version 5.1.3 (01.09.2026, abends) ### Zuerst: „hier zieht garnichts hoch" — doch, es zog