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