# Rippy v5 bauen — Anleitung > Gilt für den Ordner `rippy-windows/`. Grundlage: `KONZEPT-WINDOWS.md`, > die Messungen dazu liegen in `beweise/`. ## Voraussetzungen | Werkzeug | Version | Anmerkung | |----------|---------|-----------| | Node | 24 (LTS) | dieselbe Linie wie Electrons eingebautes Node (24.18) | | npm | 11 | kommt mit Node 24 | | Windows | 10 (ab 1809) / 11, x64 | zum Entwickeln und für den Smoke-Beweis; Bau/Tests laufen auch auf Linux (CI) | ## Einrichten — zwei Schritte, nicht einer ``` npm install node node_modules/electron/install.js ``` **Die zweite Zeile ist kein Versehen** (gemessen 30.08.2026, siehe `beweise/README.md` und KONZEPT § 3.5): npm 11 blockiert Install-Skripte fremder Pakete. `koffi` übersteht das, weil es vorgebaute Binärdateien mitbringt — **Electron nicht**: Sein Install-Skript lädt die eigentliche Programmdatei herunter. Wird es geblockt, liegt nach `npm install` ein Paket **ohne `dist/electron.exe`** da, und nichts startet. Der Nachholer ist auch als npm-Skript hinterlegt: `npm run werkzeug:electron`. ## Die Läufe | Befehl | Was er tut | |--------|------------| | `npm run dev` | Entwicklung: baut, startet Electron, lädt das Fenster vom Vite-Server | | `npm run build` | Typprüfung (beide tsconfig) + Bau nach `out/` | | `npm test` | Vitest: Wächter-Tests (§ 4.3), Datenbank, Nachrichten-Schema | | `npm run smoke` | **Der W-0-Beweis:** baut, startet das echte Programm mit `--smoke`, prüft Fenster + Kern + Datenbank + Leine + Ping/Pong über den MessagePort und endet mit Code 0 (grün) oder 2. `RIPPY_SMOKE_BILD=` legt zusätzlich einen Screenshot ab. Läuft nur unter Windows (Electron-Binary + koffi). | Der Smoke-Lauf benutzt ein Wegwerf-Profil unter `%TEMP%\rippy-smoke` — er fasst die echten Einstellungen nicht an. ## Was die CI-Ampel prüft (`.gitea/workflows/ci.yml`) Die Ampel läuft auf Linux und führt hier `npm ci`, `npm run build` und `npm test` aus. Deshalb gilt für Tests: **nichts importieren, was koffi, Win32 oder das Electron-Binary braucht.** Die Wächter-Tests LESEN Quelltext nur; die Datenbank-Tests laufen, weil `node:sqlite` im System-Node genauso vorhanden ist wie in Electrons Node (§ 3.4). Was zwingend Windows braucht (Smoke, später die Laufwerks-Messungen), wird lokal ausgeführt und im `SAVEPOINT.md` mit Ausgabe belegt. ## Das Setup bauen (W-6) ``` npm run paket ``` erzeugt `dist-setup/RippySetup-.exe` (NSIS, pro Benutzer, ohne Adminrechte) plus `latest.yml` und `.blockmap` — **alle drei Dateien gehören zum Release** (§ 6.8: `latest.yml` ist die Update-Auskunft, die `.blockmap` macht aus dem Voll-Download einen Differenz-Download). ⚠ **Die `win-unpacked`-Sperre (30./31.08.2026 gemessen):** Nachdem der Paket-Smoke (`win-unpacked\Rippy.exe --smoke`) gelaufen ist, hält ein Filter-Treiber (Virenscanner/Indexer — KEIN Prozess mit sichtbarem Pfad) `resources\app.asar` mitunter STUNDENLANG fest. Der nächste Bau in denselben Ordner scheitert dann mit `EBUSY … unlink app.asar`, und zwar mit **Exit-Code 0** (electron-builder!) — nicht vom Log-Ende täuschen lassen, die ⨯-Zeile zählt. Ausweg: in ein frisches Verzeichnis bauen (`npx electron-builder --win --config electron-builder.yml -c.directories.output=dist-setup-neu`), die fertige Setup-EXE nach `dist-setup/` KOPIEREN (eine Kopie ist eine neue Datei ohne Sperre) und den gesperrten Ordner löschen, sobald er wieder frei ist. Vorher einmalig `vendor/` befüllen (die MITGELIEFERTEN Werkzeuge, § 9 — liegen nicht im Git, 74 MB): ``` vendor/handbrake/HandBrakeCLI.exe (GPL-2 — Lizenztext liegt bei) vendor/flac/flac.exe + libFLAC.dll (Xiph — OHNE die DLL endet jeder Aufruf ohne eine Zeile Ausgabe) ``` Quelle auf dieser Maschine: `%LOCALAPPDATA%\Rippy\tools\` (die rc11- Beschaffung hat sie dort abgelegt); Original-Quellen und Lizenzen stehen in `bau/lizenzen/QUELLEN.md`. **Release veröffentlichen (Entscheid 6):** Die drei Dateien in ein Gitea-Release mit dem festen Tag `aktuell` hochladen (Dateien dort ERSETZEN) — `electron-updater` prüft `…/releases/download/aktuell/latest.yml`. Ob Gitea 1.27 zusätzlich das GitHub-Muster `releases/latest/download/…` bedient, ist am ersten echten Release zu messen (§ 3.6 ⚠); das feste Tag ist die Rückfallebene. **SmartScreen (Entscheid 5):** Die EXE ist unsigniert. Beim ersten Start eines Downloads: „Weitere Informationen → Trotzdem ausführen". Beim Release Größe und SHA-256 mit angeben, damit Bekannte die echte Datei erkennen. ## Festgelegte Versionen und warum - **Electron 44.0.0** — exakt die am 30.08.2026 gemessene Version (KONZEPT § 3.1/§ 3.4). Sprünge nach der Pflege-Regel § 6.8: bei jedem Release prüfen, ob eine neue Linie ansteht. - **TypeScript 5.9.3, fest gepinnt** — bewusst NICHT die neue Go-Implementierung (7.x, „tsgo", seit 2026 `latest` auf npm): Für die Ampel zählt ein Typprüfer, dessen Verhalten die restliche Werkzeugkette (Vitest 4, electron-vite 5) breit getestet hat. Der Umstieg auf 7.x ist eine bewusste Entscheidung für später, kein Nebeneffekt eines `npm update`. - **Vite 7** — der gemeinsame Nenner von electron-vite 5 (verträgt 5–7) und Vitest 4 (verträgt 6–8), am 30.08.2026 per `npm view` ermittelt. - **koffi** ist die einzige Laufzeit-Abhängigkeit (`dependencies`) — sie wird nicht gebündelt, sondern zur Laufzeit aus `node_modules` geladen (natives Modul). Alles andere ist Bauzeit (`devDependencies`).