diff --git a/SAVEPOINT.md b/SAVEPOINT.md index 5923fcb..76878ed 100644 --- a/SAVEPOINT.md +++ b/SAVEPOINT.md @@ -1,6 +1,88 @@ # SAVEPOINT — Rippy -## Aktueller Stand: v4.0-rc11 — der Schalter, den es nicht gibt (30.08.2026) +## Aktueller Stand: Rippy v5 — Etappe W-0, das Gerüst steht (30.08.2026) + +> **Rippy v5 hat sein Fundament.** Auf dem Branch `worktree-windows-electron` +> steht jetzt neben dem Konzept das erste lauffähige Programm: Electron 44, +> durchgehend TypeScript, drei Prozesse, eine Datenbank, die Prozess-Leine. +> Kein Python, kein Docker-Code, kein HTTP-Server — genau wie +> `KONZEPT-WINDOWS.md` es festlegt. 18/18 Tests grün, Smoke-Beweis grün. + +### Was gebaut wurde (`rippy-windows/`) + +* **Drei Prozesse, wie im Konzept § 4.1:** Das Haupt (`src/haupt/`) verwaltet + Fenster und Kern; der Kern (`src/kern/`, ein Electron-utilityProcess) macht + die Arbeit; das Fenster (`src/fenster/`, React) zeigt nur an. Fenster und + Kern reden über einen **direkten MessagePort** — kein localhost, kein Port, + kein Polling. +* **Die Datenbank läuft** — `node:sqlite`, wie in `beweise/` gemessen, und + sie hat genau **einen** Zugriffsort (`kern/speicher/db.ts`, § 6.7). Der + Kern schreibt beim Start eine Einstellung und liest sie zurück; „geöffnet" + allein gilt nicht als Beweis. +* **Die Prozess-Leine ist scharf:** Das Haupt legt die Windows-Arbeitsgruppe + aus `beweise/leine.js` an und hängt sich selbst hinein — alles, was Rippy + je startet, stirbt mit ihm. Eine bewusste, im Code begründete Abweichung + von der Ordnerliste § 4.2: Die Leine liegt in `haupt/leine.ts`, nicht im + Kern — das Job-Handle muss bei dem Prozess liegen, dessen Tod alles + mitreißen soll (§ 4.1: „ALLES stirbt mit ihm"). +* **Wächter-Tests nach § 4.3** — mechanisch, wie versprochen: koffi nur an + den zwei benannten Orten (R1) · kein leerer catch, kein catch, das leere + Listen erfindet (R2/R4) · kein HTTP-Server (§ 4.1) · `node:sqlite` nur in + `db.ts` (§ 6.7). Dazu Tests für Datenbank und Nachrichten-Schema. +* **Sicherheitsrahmen:** contextIsolation, Sandbox, kein Node im Fenster, + strikte CSP im gebauten HTML, Einzelinstanz-Sperre, Kern-Neustart-Wache + (stirbt der Kern, startet ihn das Haupt neu — höchstens dreimal je Minute, + danach steht der Fehler sichtbar im Fenster). + +### Der Beweis + +`npm run smoke` startet das ECHTE Programm und prüft alle fünf Punkte +maschinell — Ausgabe vom 30.08.2026 auf dem Commander-PC: + +``` +SMOKE: OK — fenster=geladen kern=pid:13676,node:24.18.1 datenbank=ok leine=gesetzt pong=ok version=5.0.0-w0 +``` + +Dazu nachgemessen, nicht geglaubt: `taskkill /F` auf den Haupt-Prozess +(ohne `/T` — der Absturz-Fall, der in rc10 verwaiste makemkvcon +hinterließ) → **der Kern ist danach tot.** Der Wirkungs-Test mit einem +echten Werkzeug-Kind folgt in W-2, wenn es erstmals eines gibt. + +Das W-0-Fertigkriterium aus § 12 — „Ein Fenster geht auf, der Kern läuft, +ein Testlauf ist grün" — ist damit erfüllt. + +### Die Ampel prüft v5 mit + +`ci.yml` läuft jetzt fest auf **Node 24** (vorher: Zufalls-Node des +Runners; `docker/ui` unter Node 24 vorher lokal nachgemessen). Die Ampel +baut und testet `rippy-windows/` auf Linux mit — nur der Smoke bleibt ein +Windows-Beweis und steht deshalb hier mit Ausgabe. + +### Stolperdrähte, dokumentiert in `rippy-windows/BAUEN.md` + +npm 11 blockt Electrons Install-Skript — nach `npm install` fehlt die +`electron.exe`, `node node_modules/electron/install.js` holt sie nach +(§ 3.5, beim Bau erneut bestätigt) · `@vitejs/plugin-react` 6 verlangt +Vite 8, deshalb die 5er-Linie · TypeScript fest auf 5.9.3 gepinnt (die +neue Go-Fassung 7.x ist eine bewusste Entscheidung für später). + +### Was W-0 absichtlich NICHT kann + +Kein Tray, kein Autostart, kein Update, keine Laufwerks-Erkennung — das +sind W-1 bis W-6. Bis das Tray kommt (W-5), gilt: Fenster zu = Rippy zu. + +### Nächste Schritte + +1. **W-1 — Laufwerk:** `kern/laufwerk/win32.ts` aus dem § 3.2-Beweis, + Wache im 3-Sekunden-Takt, Disc-Typ, Auswerfen mit Nachsehen. +2. **Parallel, eigener Branch von `main`:** das Aufräumen nach § 11 + (A → C, Remote-Worker bleibt) — noch nicht begonnen. +3. **Termin im Blick (§ 9.1):** MakeMKVs Beta-Key läuft **Ende September + 2026** ab. + +--- + +## v4.0-rc11 — der Schalter, den es nicht gibt (30.08.2026) > **Ein falscher Kommandozeilen-Schalter kostete einen fertigen 16,5-GB-Rip — > und HandBrake meldete es als Erfolg.** Dazu vierzehn weitere Funde aus