Commander-Wünsche vom 02.09.2026 vor der Freigabe von 5.4.0 (die deshalb nie veröffentlicht wurde): Kern: kern/index.ts ist nur noch Bootstrap und Router; Dienste in kern/dienste/ (Einstellungen, Werkzeuge, Laufwerke, Erkennung, Vorgänge, Speicher, Benachrichtigung, Automatik), Kontext in kern/kontext.ts, Protokoll-Datei in gemeinsam/protokoll.ts, Platz-Rechnung in gemeinsam/platz.ts. Oberfläche: fenster/App.tsx ist nur noch der Rahmen; bausteine.tsx, dialoge/, uebersicht/ (LaufwerkKachel, KompressionsKarte, SpeicherKarte, VerlaufKarte), einstellungen/ (Karten je Funktion, SprachAuswahl), einrichtung/ (ErstEinrichtung, PosterHintergrund). Neu: Bibliothek weg, dafür Verlauf; Speicher-und-Bilanz-Karte (statfs); LED-Fußleiste; MakeMKV-Kopf in die Einstellungen; Sprach-Chips mit Dropdown statt Allgemeinem Preset; Karten Automatik/Benachrichtigung/Allgemein/Update; Durchsuchen bei Werkzeugen; Arbeitsordner lokal (Encode dort, dann in die Ablage); Platz-Prüfung vor dem Rip (Dialog und Kern); Automatik mit Countdown; Serien-Merker über Discs; Rettungs-Abbild mit Nullen nur nach gesehenen Lesefehlern (kern/rip/rettung.ts, Phase rettet, iso:-Quelle); Warteschlange pausieren; Discord/Telegram-Benachrichtigung; Protokoll-Datei je Tag; Fensterlage 80 % mittig, gemerkt; Erst-Einrichtung in acht Schritten vor dem Poster-Grid. Beweise: 413 Tests (neu: speicher, benachrichtigung, automatik, rettung, fensterlage, protokoll, kleinkram-550), drei Typprüfungen, Klick-Beweis mit 29 Schritten inklusive Erst-Einrichtung (zweiter Start mit RIPPY_START_BEREICH=einrichtung), Bilder beweise/klick/01…09. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
115 lines
6.4 KiB
Markdown
115 lines
6.4 KiB
Markdown
# 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=<pfad.png>` legt zusätzlich einen Screenshot ab. Läuft nur unter Windows (Electron-Binary + koffi). |
|
||
| `npm run klick` | **Der Klick-Beweis (5.4.0):** baut, startet das echte Programm mit eigenem Profil (`--profil=…`, `--klick-smoke`: ohne Tray, Updater, Toasts), einem nachgebauten Laufwerk (`RIPPY_FAKE_LAUFWERK=Q`) und nachgebauten Werkzeugen (`bau/klick/fake-*.cjs`, laufen über `kern/werkzeuge/aufruf.ts`) — und klickt per Playwright durch Speicher-Karte → Rippen → Dialog → Sprachen → Folgen → Platz-Prüfung → Rip → Warteschlange → Kompression → Arbeitsordner (Roh lokal, Zwischenordner geräumt) → Ablage → Verlauf → Bilanz → Roh-Dateien → Einstellungen (Sprach-Chips, Durchsuchen, Karten Automatik/Benachrichtigung/Allgemein/Update). Seit 5.5.0 mit getrenntem Arbeitsordner und Automatik aus (der Beweis klickt selbst). Bilder in `../beweise/klick/`, Code 0 oder 2. Grund: Beide Fehler vom 01.09.2026 waren Verkabelung, die kein Unit-Test sah. Playwright ist reines Bau-Werkzeug (MIT, `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1` beim Installieren — Electron braucht keinen Browser-Download). |
|
||
|
||
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-<version>.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`).
|