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
|
||||
|
||||
## Ü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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user