docs: SAVEPOINT — 5.4.0 gebaut und lokal installiert, NICHT veroeffentlicht; Uebergabe
Ampel / ampel (push) Successful in 1m54s
Ampel / ampel (push) Successful in 1m54s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
c46a280b1f
commit
6555562a4c
+187
-1
@@ -1,6 +1,192 @@
|
|||||||
# SAVEPOINT — Rippy
|
# SAVEPOINT — Rippy
|
||||||
|
|
||||||
## ÜBERGABE an die nächste Session (01.09.2026, Sessionende)
|
## ÜBERGABE an die nächste Session (01.09.2026, spät — 5.4.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:** `npm install` + `node node_modules/electron/install.js` (npm 11
|
||||||
|
blockt Electrons Install-Skript). **Playwright ist seit 5.4.0 devDependency**
|
||||||
|
(Commander-Ja nach Regel B; MIT; beim Installieren
|
||||||
|
`PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1` setzen — Electron braucht keinen
|
||||||
|
Browser-Download). `vendor/` aus `%LOCALAPPDATA%\Rippy\tools` befüllen.
|
||||||
|
* **Die drei Läufe:** `npm test` (351 Tests), `npm run smoke` (Gerüst),
|
||||||
|
**`npm run klick`** (NEU: der Klick-Beweis durch das echte Programm mit
|
||||||
|
nachgebauten Werkzeugen, Bilder in `beweise/klick/`). Alle drei sind
|
||||||
|
in dieser Session grün gewesen.
|
||||||
|
* **Release veröffentlichen — NUR nach dem Wort des Commanders
|
||||||
|
(„Update freigegeben"):** die VIER Dateien im Gitea-Tag `aktuell`
|
||||||
|
ERSETZEN (`RippySetup-5.4.0.exe`, `.blockmap`, `latest.yml`; `w0.yml`
|
||||||
|
bleibt liegen). Dateien liegen in `rippy-windows/dist-setup/` (Kopie)
|
||||||
|
und `rippy-windows/dist-setup-540/` (Original). Token:
|
||||||
|
`F:\Coding Stuff\Gittea Token\rippy.txt` (40 Hex; über das
|
||||||
|
PowerShell-Werkzeug lesen). 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.
|
||||||
|
|
||||||
|
### Stand
|
||||||
|
|
||||||
|
**5.4.0 ist gebaut, am ausgepackten Paket bewiesen und auf DIESEM PC
|
||||||
|
installiert (22:23), NICHT im Kanal.** Der Commander wollte es ausdrücklich
|
||||||
|
so: erst lokal, dann testen, dann veröffentlichen.
|
||||||
|
|
||||||
|
* Setup: `RippySetup-5.4.0.exe`, **131 546 293 Bytes**, SHA-256
|
||||||
|
`18A7BE8F6197D0933BF9AC8FA18C463474D99EE5B259DF960EC277CD135346C1`.
|
||||||
|
* Paket-Smoke: `SMOKE: OK — fenster=geladen kern=pid:10740,node:24.18.1
|
||||||
|
datenbank=ok leine=gesetzt pong=ok version=5.4.0`.
|
||||||
|
* **351 Tests** in 34 Dateien (vorher 261), Typprüfung und Bau grün.
|
||||||
|
* Klick-Beweis: 15 Schritte grün, Ausgang 0 — Rippen → Dialog → drei
|
||||||
|
Titel → Sprach-Chips → jpn statt deu → „Hauptinhalt + Extras" → Rollen
|
||||||
|
auf Folge → Staffel 1, ab Folge 3 → Vorschau `Serien\…\Season 01` →
|
||||||
|
RIPPT → „Kompression eingereiht, das Laufwerk ist frei" → Kompressions-
|
||||||
|
Karte → „Komprimiert und abgelegt" → Dateien `… S01E03.mkv` und
|
||||||
|
`… S01E04.mkv` unter `Season 01` → Roh-Dateien-Karte → Roh löschen →
|
||||||
|
Ereignisse. Bilder: `beweise/klick/01…05*.png`.
|
||||||
|
* Commits dieser Session: `3f7f962` (Kern), `e3ce822` (Oberfläche),
|
||||||
|
`6dd1b0b` (Klick-Beweis), `c46a280` (Version 5.4.0), dazu der SAVEPOINT.
|
||||||
|
|
||||||
|
### Was 5.4.0 enthält — alle zwölf Punkte der vorigen Übergabe
|
||||||
|
|
||||||
|
Der Commander hat gefragt „Traust du dir alles auf einmal zu?" und die
|
||||||
|
Fassung als EINE gewollt. Seine Entscheidungen: Roh-Dateien **nach 7 Tagen,
|
||||||
|
nur bei gelungener Kompression**; Untertitel bei fremdem Ton **als Spur,
|
||||||
|
beim Abspielen vorgewählt**; Warteschlange = **nächste Disc rippen, während
|
||||||
|
die vorige komprimiert**; **Playwright ja**.
|
||||||
|
|
||||||
|
1. **Roh-Dateien aufräumen** — `kern/ablage/rohaufraeumen.ts`: Regel
|
||||||
|
(`rohAufbewahrung`: sofort / 7 / 14 / 30 Tage / behalten), Frist ab
|
||||||
|
Ende der Kompression, gelöscht wird NUR bei Phase fertig + komprimiert
|
||||||
|
+ jede fertige Datei vorhanden und nicht leer. Ordner unter `roh\`, die
|
||||||
|
kein Vorgang kennt (alles aus der Zeit vor 5.4.0!), werden nur gezeigt.
|
||||||
|
Belegung in Einstellungen → Roh-Dateien. Takt: 60 s nach Start, täglich,
|
||||||
|
und nach jeder gelungenen Kompression.
|
||||||
|
2. **Staffel und Folge von Hand** — Felder im Dialog, sobald eine Rolle
|
||||||
|
„Folge" ist; `ersteFolge` zählt fortlaufend in Disc-Reihenfolge, TMDb
|
||||||
|
warnt nur noch (`folgenPlausibel`).
|
||||||
|
3. **Wiederholen ab Kompression** — jeder Rip ist ein Datensatz
|
||||||
|
(Tabelle `vorgaenge`, Schema 4, Auftrag als JSON). „Neu komprimieren"
|
||||||
|
mit Preset-Wahl reiht den alten Auftrag wieder ein, die neue Fassung
|
||||||
|
ersetzt die alte im selben Zielordner.
|
||||||
|
4. + 12. **Sprachen je Titel** — SINFO-Sprachen reisen je Titel in den
|
||||||
|
Dialog (Chips, vorbelegt aus der Einstellung, sonst alles Vorhandene),
|
||||||
|
von dort in `RipAuftragTitel.audioSprachen/untertitelSprachen`, in den
|
||||||
|
Kompressions-Auftrag und in HandBrake. `sprachwahl()`: erste Tonspur
|
||||||
|
nicht in der Wunschsprache → Untertitel der Wunschsprache nach vorn und
|
||||||
|
`--subtitle-default=1`. Vor der Kompression prüft ein HandBrake-Scan
|
||||||
|
(`komprimieren/scan.ts`) die Roh-Datei; MakeMKVs Auswahlregel wird
|
||||||
|
gesetzt, wenn keine steht (`werkzeuge/spurauswahl.ts`).
|
||||||
|
5. **Vorschau** — `gemeinsam/ablagepfad.ts`, zwei Zeilen im Dialog.
|
||||||
|
6. **Warteschlange** — `kern/ablauf/warteschlange.ts` + `ablegen.ts`:
|
||||||
|
Rip endet mit den Roh-Dateien, Laufwerk frei, Auswurf (Einstellung
|
||||||
|
`autoAuswurf`, Vorgabe an), Kompression eine zur Zeit im Hintergrund,
|
||||||
|
Karte in der Übersicht, Abbruch je Auftrag, Wiederaufnahme nach Neustart.
|
||||||
|
Unkomprimierte Rips (4K, kein HandBrake) werden in den Zielordner
|
||||||
|
VERSCHOBEN — vorher blieben sie unter `roh\` liegen, ohne NFO, Poster,
|
||||||
|
Bibliothek.
|
||||||
|
7. **Klick-Beweis** — `npm run klick` (siehe oben), Naht
|
||||||
|
`kern/werkzeuge/aufruf.ts`, Fakes `bau/klick/`.
|
||||||
|
8. **Laufwerks-Gesundheit** — `kern/laufwerk/ereignisse.ts` liest
|
||||||
|
`wevtutil qe System /q:<XPath> /f:xml` (cdrom/disk, 24 h), Urteil
|
||||||
|
Disc/Hardware/ruhig; automatisch nach einem gescheiterten Rip, sonst
|
||||||
|
Knopf „Laufwerk prüfen".
|
||||||
|
9. **Durchgehender Fortschritt** — `gewichteterFortschritt()` nach
|
||||||
|
Titel-/Dateigröße, Rip und Kompression.
|
||||||
|
10. **Aufräumen nach Abbruch** — halbe Dateien eines abgebrochenen ODER
|
||||||
|
gescheiterten Titels werden entfernt; ein Roh-Ordner ohne eine einzige
|
||||||
|
brauchbare Datei auch.
|
||||||
|
11. **Erkennung v2 + Kino-Banner v2** — `zuordnung.nachpruefen()` nach dem
|
||||||
|
Info-Lauf (Laufzeit ±6 % bestätigt → 0,95; ≥ 25 % daneben → Vorschlag),
|
||||||
|
`strukturHinweis()` (≥ 3 gleich lange Titel = Serie), Stubs zählen nicht
|
||||||
|
(`istStub`), `bdmt_deu` als zweite Titel-Variante. TMDb-Details holen
|
||||||
|
per `append_to_response` Logo, Tagline, Bewertung, FSK (DE), Besetzung.
|
||||||
|
Kachel zeigt Logo statt Text, Meta-Zeile, Darsteller-Streifen, Hinweise.
|
||||||
|
|
||||||
|
Dazu aus der Liste „auch noch offen": Dialog-Zustand aus der Kachel
|
||||||
|
herausgehoben (Dialoge leben im App-Zustand), `7c489f8` ist mit drin,
|
||||||
|
Datenbank-Pfad steht unter Einstellungen → Programm, CSP `font-src data:`
|
||||||
|
(eingebettete Schrift-Teile waren blockiert — Konsolenfehler, unsichtbar).
|
||||||
|
|
||||||
|
### ⚠ Der Datenbank-Befund — ungeklärt, bitte als Erstes prüfen
|
||||||
|
|
||||||
|
Auf diesem PC (Konto TobisPC, einziges Konto) lag unter
|
||||||
|
`%APPDATA%\Rippy\rippy.db` bis 21:13 eine Datenbank von **Schema 1 vom
|
||||||
|
30.08. 16:50** ohne eine einzige Einstellung — obwohl 5.3.2 hier
|
||||||
|
installiert war, der Updater am 01.09. 20:01/20:27 Dateien lud und der
|
||||||
|
Commander Einrichtung, Erkennung und Rips bestätigt hat. Ein 10-s-Start
|
||||||
|
des installierten Rippy durch mich schrieb genau in diese Datei (Schema 3,
|
||||||
|
`letzter_start`). Kein anderes `rippy.db` auf C:/D:/E:/F: ist seit dem
|
||||||
|
30.08. geschrieben worden. Der Commander sagt: „Ja, alles bleibt
|
||||||
|
erhalten" (Einstellungen überleben den Neustart, Datenbank-LED grün).
|
||||||
|
Beides zusammen geht nicht auf — ich konnte es nicht auflösen.
|
||||||
|
|
||||||
|
**Was beim Commander-Test zu beobachten ist:** Erscheint beim Start von
|
||||||
|
5.4.0 die Erst-Einrichtung, dann IST die Roaming-Datenbank die lebende und
|
||||||
|
sie war leer — einmal neu einrichten (TMDb-Key liegt in
|
||||||
|
`F:\Coding Stuff\Gittea Token\tmdb.txt`), danach bleibt es. Erscheint sie
|
||||||
|
nicht, steht unter Einstellungen → Programm jetzt der echte Pfad
|
||||||
|
(„Datenbank: …") — den bitte notieren. Die Roh-Dateien-Karte zeigt
|
||||||
|
außerdem seine wirkliche Ablage und Belegung.
|
||||||
|
|
||||||
|
### Was am Gerät noch zu messen ist
|
||||||
|
|
||||||
|
* **MakeMKV-Spurauswahl an einer echten Disc:** nach dem nächsten Rip
|
||||||
|
`RIPPY_MESSUNG_MKV="<roh-datei>" npx vitest run test/messung.spuren.test.ts
|
||||||
|
--reporter=verbose` — zeigt, welche Sprachen wirklich in der Roh-Datei
|
||||||
|
sind. Die Regel `app_DefaultSelectionString` setzt Rippy beim Start
|
||||||
|
(Ereignis-Zeile „MakeMKV-Auswahlregel gesetzt"), wenn keine da war.
|
||||||
|
* Warteschlange mit zwei Discs hintereinander; Auswurf nach dem Rip.
|
||||||
|
* „Laufwerk prüfen" am BU40N (das Protokoll hat 338 × cdrom 7 und
|
||||||
|
8 × cdrom 11 in 30 Tagen — es wird etwas zeigen).
|
||||||
|
* Hero-Banner mit TMDb-Key (Logo, FSK, Besetzung) — im Klick-Beweis ohne
|
||||||
|
Key nicht sichtbar. Vorsicht bei „Spartacus: Gods of the Arena": TMDb
|
||||||
|
führt es als Extras-Staffel (S0) von „Spartacus" (46296); die direkten
|
||||||
|
Treffer sind leere Stubs und zählen seit 5.4.0 nicht mehr.
|
||||||
|
* Roh-Aufräumen nach 7 Tagen ist frühestens ab dem 08.09. beobachtbar;
|
||||||
|
die Regel „sofort" lässt sich sofort prüfen.
|
||||||
|
* Weiter offen wie zuvor: `extras/`-Ordner in Jellyfin bestätigen,
|
||||||
|
DVD-/Audio-CD-Durchlauf, main-Merge.
|
||||||
|
|
||||||
|
### Messungen dieser Session (Regel D)
|
||||||
|
|
||||||
|
* **HandBrake 1.11** (ffmpeg-Testdatei jpn/deu/deu/eng + deu/eng-Untertitel,
|
||||||
|
Ausgabe per ffprobe): `--audio-lang-list deu,eng` = je Sprache die
|
||||||
|
erste Spur; `--first-audio` dasselbe; `--all-audio` alle passenden;
|
||||||
|
Untertitel-Ausgabe in LISTEN-Reihenfolge; `--subtitle-default=1` setzt
|
||||||
|
default UND forced; `-N deu` allein fügt keine Spur hinzu.
|
||||||
|
`--scan --json` schreibt „JSON Title Set:" + Objekt + weiteren Text.
|
||||||
|
* **TMDb** (v4-Token): `movie/149?append_to_response=images,credits,
|
||||||
|
release_dates&include_image_language=de,en,null` liefert tagline,
|
||||||
|
runtime, vote_average, images.logos (iso_639_1 de/en/null, .png/.svg),
|
||||||
|
credits.cast (name, character, profile_path, order), release_dates DE
|
||||||
|
certification „16" (type 3 Kino, 5 Heimvideo, 6 TV). `tv/46296`:
|
||||||
|
episode_run_time [53], content_ratings DE „18", seasons. Logo-Größen
|
||||||
|
w45…w500, Profil w45/w185/h632.
|
||||||
|
* **wevtutil** (`/q:` XPath, `/f:xml`, `/rd:true`): cdrom 7 = fehlerhafter
|
||||||
|
Block, 11 = Controllerfehler, 51 = E/A-Fehler; TimeCreated UTC. Über Git
|
||||||
|
Bash zerlegt der Pfad-Konverter das `/q:`-Argument — im Kern geht es
|
||||||
|
ohne Shell (spawn), das ist der Grund.
|
||||||
|
* **makemkvcon** nimmt `--minlength=<s>` (nicht in der Kurzhilfe).
|
||||||
|
* **MakeMKV-Auswahlregel** (forum.makemkv.com, Thema 4386): Standard
|
||||||
|
`-sel:all,+sel:(favlang|nolang),-sel:(havemulti|havecore),=100:all,-10:favlang`;
|
||||||
|
favlang „always matches if no favorite language is set".
|
||||||
|
|
||||||
|
### Bekannte Schwächen, bewusst in Kauf genommen
|
||||||
|
|
||||||
|
* `--subtitle-default=1` markiert die Spur auch als forced (so schreibt es
|
||||||
|
HandBrakes Muxer). Jellyfin zeigt sie damit; wer sie abschaltet, kann das.
|
||||||
|
* Die Stub-Regel ist eng: nur Einträge OHNE Beschreibung, Backdrop UND
|
||||||
|
Bewertung zählen als leer. Als letzter Vorschlag zählt auch ein Stub.
|
||||||
|
* Die Belegung wird bei jedem Vorgänge-Stand durch einen Ordner-Walk
|
||||||
|
gemessen — bei sehr vielen Roh-Ordnern dauert das Sekunden.
|
||||||
|
* Der Klick-Beweis läuft nur unter Windows (Electron + koffi) und nicht in
|
||||||
|
der Linux-Ampel — wie der Smoke.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Übergabe vom 01.09.2026 (Sessionende, VOR 5.4.0 — die zwölf Punkte sind seit 5.4.0 umgesetzt)
|
||||||
|
|
||||||
### Wo die nächste Session startet
|
### Wo die nächste Session startet
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user