docs: SAVEPOINT — 5.5.0 gebaut und lokal installiert, NICHT veröffentlicht; Übergabe
Ampel / ampel (push) Successful in 1m21s

Prüfsumme, Klick-Beweis (29 Schritte), Tests (413), was 5.5.0 enthält, was am
Gerät noch zu messen ist (Rettungs-Abbild, Automatik, Benachrichtigung live),
der weiter ungeklärte Datenbank-Befund.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-02 17:52:17 +02:00
co-authored by Claude Fable 5.1
parent 3dc6798c79
commit 2ae79fceb4
+203 -1
View File
@@ -1,6 +1,208 @@
# SAVEPOINT — Rippy
## ÜBERGABE an die nächste Session (01.09.2026, spät — 5.4.0 gebaut und lokal installiert, NICHT veröffentlicht)
## ÜBERGABE an die nächste Session (02.09.2026 — 5.5.0 gebaut und lokal installiert, NICHT veröffentlicht)
### Wo die nächste Session startet
* **Arbeitsort:** `F:\Coding Stuff\rippy`, Branch `worktree-windows-electron`
(Spitze siehe `git log`). v5-Code in `rippy-windows/`; `main` ist reines
Docker-Rippy.
* **Bau:** wie in BAUEN.md — `npm install` + `node node_modules/electron/install.js`,
Playwright mit `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1`, `vendor/` aus
`%LOCALAPPDATA%\Rippy\tools`.
* **Die drei Läufe:** `npm test` (413 Tests in 42 Dateien),
`npm run smoke` (Gerüst), `npm run klick` (29 Klick-Schritte durch
das echte Programm, jetzt auch durch die Erst-Einrichtung; Bilder
`beweise/klick/01…09*.png`). Alle drei in dieser Session grün.
* **Release veröffentlichen — NUR nach dem Wort des Commanders
(„Update freigegeben"):** die VIER Dateien im Gitea-Tag `aktuell`
ERSETZEN (`RippySetup-5.5.0.exe`, `.blockmap`, `latest.yml`; `w0.yml`
bleibt liegen). Dateien liegen in `rippy-windows/dist-setup/` (Kopie)
und `rippy-windows/dist-setup-550/` (Original). Token:
`F:\Coding Stuff\Gittea Token\rippy.txt` (40 Hex; über das
PowerShell-Werkzeug lesen, nie ausgeben). Weg wie am 01.09.: LAN-Adresse
`http://192.168.178.153:3000/api/v1/…/releases/1`, `latest.yml` erst
löschen (204), dann hochladen (201), danach ANONYM über die externe
HTTPS-Adresse gegenmessen. **5.4.0 war nie im Kanal — 5.5.0 ersetzt sie
direkt; im Kanal liegt bis dahin 5.3.2.**
### Stand
**5.5.0 ist gebaut, am ausgepackten Paket bewiesen und auf DIESEM PC
installiert (17:50, Installer-Exit 0, Rippy lief dabei nicht), NICHT im Kanal.** Der Commander wollte 5.4.0 vor
der Freigabe noch umgebaut haben (Clean Code, UI/UX, Übersicht, FirstRun)
— das ist 5.5.0; 5.4.0 wurde dadurch nie veröffentlicht.
* Setup: `RippySetup-5.5.0.exe`, **131 560 997 Bytes**, SHA-256
`8E55C7797BC41C6A153B584CF58556104A4D67F8A2A2590D570079CA719A6181` (Bau in `dist-setup-550/`).
* Paket-Smoke: `SMOKE: OK — fenster=geladen kern=pid:23276,node:24.18.1 datenbank=ok leine=gesetzt pong=ok version=5.5.0`.
* **413 Tests** in 42 Dateien (5.4.0: 353), drei
Typprüfungen und Bau grün.
* Klick-Beweis: 29 Schritte grün, Ausgang 0 — Speicher-Karte
(Arbeitsordner und Ablage getrennt, Fußleiste FREI) → keine Bibliothek →
Rippen → Dialog → drei Titel → Sprach-Chips → jpn statt deu →
„Hauptinhalt + Extras" → Rollen auf Folge → Staffel 1, ab Folge 3 →
Vorschau → **Platz-Prüfung** → RIPPT → „Kompression eingereiht" →
Kompressions-Karte → „Komprimiert und abgelegt" → Dateien `S01E03/S01E04`
unter `Season 01` → **Roh lokal im Arbeitsordner, Zwischenordner
geräumt** → **Verlauf****Bilanz** → Roh-Dateien-Karte → Kompression
ohne „Allgemeines Preset", Chips Deutsch/Englisch → Werkzeuge mit
Durchsuchen, Karten Automatik/Benachrichtigung/Allgemein/Update → Roh
löschen → Ereignisse → **zweiter Start `RIPPY_START_BEREICH=einrichtung`:
Willkommen vor 7 Poster-Spalten → Prüfung → Ordner → Qualität → Titel →
Meldungen → Automatik → „Los geht's"**.
* Commits dieser Session: `3dc6798` (Kern, Oberfläche, Tests, Klick-Beweis, Aenderungsnotizen, Version 5.5.0 — 67 Dateien) und dieser SAVEPOINT.
### Was 5.5.0 enthält — die Wünsche des Commanders vom 02.09.2026
Seine Worte (gekürzt): „Bevor wir das Update freigeben … CleanCode:
Separation of Concerns / UI/UX: MakeMKV-Header weg aus der Übersicht,
„Bereit"-Parameter sinnvoll, Allgemeines Preset weg, Dropdowns für Ton
und Untertitel, Programm → Allgemein oder eigener Update-Block,
Durchsuchen bei Werkzeugen / Bibliothek: brauchen wir die wirklich? /
Übersicht ist zu leer: freier Speicher auf Server und Arbeitsordner /
alles auch in den FirstRun / angenehme Fenstergröße je Monitor / weitere
Ideen her." Seine Entscheide in den Rückfragen: **Bibliothek weg, dafür
Verlauf in der Übersicht; Arbeitsordner lokal, Ablage auf dem Server;
Fußleiste ersetzen; Oberfläche UND Kern aufteilen; Poster-Grid im
FirstRun; aus ARM übernommen: Automatik mit Countdown, Protokoll-Datei +
Ordner öffnen, Benachrichtigung aufs Handy, Statistik; Serien-Merker,
Platz-Prüfung, Warteschlange pausieren; Rettungs-Abbild mit Nullen — aber
NUR, wenn Rippy wirklich Fehler sieht.** Nicht gewählt: Zeitfenster,
Oberflächen-Test, Backup-Weg als eigener Modus.
1. **Kern aufgeteilt** (`kern/index.ts` 1244 → Bootstrap + Router):
`kern/kontext.ts` (KernKontext: db, anFenster, hinweis/fehler,
Protokoll), `kern/dienste/einstellungen.ts`, `werkzeuge.ts`,
`laufwerke.ts`, `erkennung.ts`, `vorgaenge.ts`, `speicher.ts`,
`benachrichtigung.ts`, `automatik.ts`.
2. **Oberfläche aufgeteilt** (`fenster/App.tsx` 2686 → Rahmen):
`bausteine.tsx` (Gemeinsames), `dialoge/` (AendernDialog,
TitelWahlDialog), `uebersicht/` (LaufwerkKachel, KompressionsKarte,
SpeicherKarte, VerlaufKarte, Uebersicht), `einstellungen/` (Karten.tsx
je Karte eine Funktion, SprachAuswahl, Einstellungen),
`einrichtung/` (ErstEinrichtung, PosterHintergrund).
3. **Übersicht:** MakeMKV-Kopf weg (→ Einstellungen → MakeMKV, plus LED
SCHLÜSSEL); Speicher-und-Bilanz-Karte (Arbeitsordner/Ablage mit
Füllbalken, Discs/gesichert/abgelegt/je Disc); Verlauf (letzte sechs
Vorgänge, Ordner öffnen, Sprung zu Roh-Dateien); Kompressions-Karte mit
**Pausieren/Weiter**; Fußleiste = sechs LEDs (KERN, DATENBANK,
WERKZEUGE, SCHLÜSSEL, FREI n GB, Version/UPDATE) statt PID und Ping.
4. **Einstellungen:** Ablage (+ Arbeitsordner, Auswurf), Kompression
(Presets je Typ, **SprachAuswahl** als Chips + Dropdown in
Wunschreihenfolge, kein Allgemeines Preset), Roh-Dateien, **Automatik**
(an/aus, Countdown), Metadaten, MakeMKV (Schlüssel-Stand, Neu prüfen,
Aktualisieren, eigener Key), Medienserver, **Benachrichtigung**
(Discord-Webhook, Telegram, Testnachricht), **Allgemein** (Autostart,
Protokoll öffnen, Ablage/Arbeitsordner im Explorer, Kern/DB/Protokoll-
Pfade), **Update** (eigene Karte), Werkzeuge (**Durchsuchen …** mit
exe-Dialog). Die Einstellungs-Schlüssel neu: `arbeitsordner`,
`automatik`, `automatikSekunden`, `benachrichtigungen`,
`discordWebhook`, `telegramToken`, `telegramChatId`; `transcodePreset`
ist aus der erlaubten Liste raus.
5. **Arbeitsordner** (`einstellungen.arbeitsordner()`, Roh unter
`<arbeit>\roh`): `ablegen.ts` encodiert nach `<arbeit>\fertig\<id>` und
zieht danach in die Ablage (`nachzuziehen`), räumt den Zwischenordner.
`speicher.ts` misst mit `fs.statfsSync` (geht hoch bis zum vorhandenen
Elternpfad), Takt jede Minute, LED-Warnung unter 60/20 GB.
6. **Platz-Prüfung** (`gemeinsam/platz.ts`, EINE Rechnung): Dialog zeigt
das Urteil vor dem Klick und sperrt den Knopf bei „hart"; der Kern
urteilt beim Start (`index.ts ripMitPlatz`, auch für die Automatik).
7. **Automatik** (`automatik.ts`): ab 90 % Erkennung, nicht schon
gerippt, Video-Disc → Titel lesen → Countdown (Vorgabe 30 s) → Rip mit
Vorschlag; Kachel mit Sekunden, „Jetzt", „Stopp"; wer selbst klickt
(Rippen, Ändern, Zuordnung), beendet den Countdown. Unsicher = nur der
Grund.
8. **Serien-Merker** (Einstellung `serienMerker` JSON je `tv:<id>`): nach
jedem Serien-Rip merkt sich Rippy Staffel und nächste Folge; die
nächste Disc derselben Serie bekommt „ab Folge n" vorbelegt (nur, wenn
Disc-Nr unbekannt oder > 1).
9. **Rettungs-Abbild** (`kern/rip/rettung.ts`, Pipeline-Phase `rettet`):
nur nach GESEHENEN Lesefehlern (`fehlerGesehen`: Defekt-Wächter,
Lesefehler, Titelfehler) erscheint „Rettungs-Abbild …"; Sektor-Leser
1 MiB → 64 KiB → 2048 B mit je zwei Versuchen, Nullen für den Rest,
Bericht `<roh>\rettung.iso.rettung.txt`; danach derselbe Rip aus
`iso:<pfad>`. Der Kern lehnt `rettung-start` ohne gesehene Fehler ab.
10. **Benachrichtigung** (`benachrichtigung.ts`): Discord-Webhook (POST
JSON `{content, username}`), Telegram (`bot<TOKEN>/sendMessage`,
`{chat_id, text}`); bei Rip fertig, Kompression fertig, Fehler,
Automatik-Start; Fehlschlag = Ereignis-Zeile, nie ein Abbruch.
11. **Protokoll-Datei** (`gemeinsam/protokoll.ts`): Haupt und Kern
schreiben `<userData>\logs\rippy-JJJJ-MM-TT.log` (14 Tage). Der Kern
schreibt beim Start „Datenbank geöffnet: <Pfad>" — die Zeile, die am
01.09. gefehlt hat.
12. **Fensterlage** (`haupt/fensterlage.ts`): 80 % des Arbeitsbereichs,
mittig, mindestens 1100 × 720; gemerkt in `<Profil>\fenster-lage.json`,
nur wiederhergestellt, wenn sie auf einem heutigen Bildschirm liegt.
13. **Erst-Einrichtung:** acht Schritte (Willkommen, Prüfung mit
Durchsuchen für makemkvcon, Ordner mit Ablage + Arbeitsordner + frei,
Qualität mit Encodern, Empfehlungen und Sprach-Chips, Titel, Meldungen,
Automatik/Auswurf/Roh-Regel, Fertig) vor dem **Poster-Grid**
(`PosterHintergrund`: 7 Spalten, CSS `poster-lauf`, Platzhalter bis
zum TMDb-Schlüssel, dann `tmdb.beliebtePoster` über `poster-laden`).
14. **Nachrichten** (`gemeinsam/nachrichten.ts`): neu `speicher`,
`automatik`, `poster-vorschau`; Fenster → Kern `kompression-pause`,
`automatik-stopp`, `automatik-jetzt`, `benachrichtigung-testen`,
`poster-laden`, `rettung-start`, `speicher-laden`; `bibliothek` und
`bibliothek-laden` sind weg; `vorgaenge` trägt `statistik` und
`kompression.pausiert`; `RipStatus` trägt `rettungMoeglich`/`rettung`.
Brücke neu: `dateiWaehlen`, `ordnerOeffnen`, `protokollOeffnen`.
### ⚠ Der Datenbank-Befund — weiter ungeklärt
Unverändert aus der 5.4.0-Übergabe: `%APPDATA%\Rippy\rippy.db` war bis
21:13 am 01.09. Schema 1 vom 30.08. ohne Einstellungen, obwohl 5.3.2 hier
lief. Seit 5.5.0 steht der Datenbank-Pfad unter Einstellungen → Allgemein
UND als erste Zeile in der Protokoll-Datei (`Protokoll öffnen`). **Beim
Commander-Test als Erstes:** Kommt die Erst-Einrichtung wieder? Dann ist
die Roaming-DB die lebende, einmal neu einrichten — die Protokoll-Datei
sagt, welche Datei Rippy wirklich öffnet.
### Was am Gerät noch zu messen ist (nichts davon war in dieser Session möglich)
* **Rettungs-Abbild an Spartacus Disc 2** (echter Defekt): Der Leser
öffnet `\\.\Q:` über `fs/promises.open` — am echten Laufwerk NICHT
gemessen (Unit-Test mit nachgebautem Gerät: 7 Fälle). Zu prüfen: Dauer,
ob Windows das Gerät direkt lesen lässt, ob MakeMKV das `iso:`-Abbild
ohne Hänger rippt. Braucht doppelten Platz im Arbeitsordner.
* **Automatik an einer echten, sicher erkannten Disc** (Klick-Beweis hat
sie aus): Countdown in der Kachel, Stopp/Jetzt, Start mit Vorschlag.
* **Benachrichtigung live**: Discord/Telegram nach Doku gebaut, NICHT
live gemessen — der Testknopf unter Einstellungen → Benachrichtigung ist
dafür da.
* **Poster-Grid mit echtem TMDb-Schlüssel** (`movie/popular`, 2 Seiten):
im Klick-Beweis nur Platzhalter.
* **Ablage auf `\\192.168.178.62\rippy` mit lokalem Arbeitsordner** im
echten Betrieb (statfs auf UNC ist am 01.09. gemessen: 2216 GB frei).
* Weiter offen aus 5.4.0: MakeMKV-Key läuft Ende September ab (Rippy holt
neu); BU40N am USB.
### Messungen dieser Session (Regel D)
* `fs.statfsSync` (Node 24): Laufwerke, Ordner und UNC liefern
bavail/bsize/blocks; nicht vorhandener Pfad wirft ENOENT →
`vorhandenerPfad` geht hoch (siehe Kopf `kern/dienste/speicher.ts`).
* Discord „Execute Webhook": JSON `content` ≤ 2000 Zeichen; Telegram
`sendMessage`: JSON `chat_id`, `text` — beides Doku, nicht live.
* makemkvcon: `iso:<Pfad>` als Quelle (Manpage) — `parser.ts quelle()`
liefert es für `.iso`.
* Playwright: `_electron.launch` ein zweites Mal im selben Skript mit
anderem `env` funktioniert (Erst-Einrichtung im Klick-Beweis).
### Bekannte Schwächen, bewusst in Kauf genommen
* Die Platz-Schätzung rechnet pauschal 25 % für die Kompression — bei
„NICHT komprimieren" nur Roh + 2 GB Luft.
* Der Serien-Merker merkt sich je Serie EINEN Stand (die zuletzt gerippte
Disc) — zwei Staffeln durcheinander gerippt, gewinnt die letzte.
* Die Automatik startet nur mit Rippys Vorschlag (Rollen, Sprachen aus
der Einstellung) — wer je Titel anders will, klickt selbst.
* Das Rettungs-Abbild liest über Node, nicht über MakeMKVs Backup-Modus:
langsamer bei heilen Bereichen, dafür unter Rippys Kontrolle.
* `kern/dienste/vorgaenge.ts` und `erkennung.ts` sind noch groß; ein
weiterer Schnitt lohnt erst, wenn sich dort etwas ändert.
## Übergabe vom 01.09.2026 spät (5.4.0 — gebaut, nie veröffentlicht; überholt durch 5.5.0)
### Wo die nächste Session startet