docs: SAVEPOINT — 5.5.0 gebaut und lokal installiert, NICHT veröffentlicht; Übergabe
Ampel / ampel (push) Successful in 1m21s
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:
co-authored by
Claude Fable 5.1
parent
3dc6798c79
commit
2ae79fceb4
+203
-1
@@ -1,6 +1,208 @@
|
|||||||
# SAVEPOINT — Rippy
|
# 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
|
### Wo die nächste Session startet
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user