Files
rippy/SAVEPOINT.md
T
Hitonabi cf2f65c567
Ampel / ampel (push) Failing after 29s
Doku: 15 Troubleshooting-Leichen raus, SAVEPOINT v3.0 + ROADMAP Etappe 11
ARCAN-*.md, Setup-/Fix-Skripte (u.a. install-rippy.sh fuer ein nie
existentes "LXC 106"), proxmox-add-drive.sh (scsi-Passthrough war der
falsche Weg — richtig ist USB-Passthrough per Vendor-ID, siehe SAVEPOINT)
und die udev-Rules (referenzierten ein nie gebautes udev_daemon.py).
SAVEPOINT dokumentiert Kernumbau + Hardware-Kette + Firmware-Befund (BU40N
1.05 kann kein UHD — Crossflash 1.03-MK ist der dokumentierte Weg).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 15:02:39 +02:00

135 lines
6.1 KiB
Markdown

# SAVEPOINT — Rippy
## Aktueller Stand: v3.0 — Kernumbau (23.07.2026, Claude)
**Der Zweck existiert jetzt wirklich.** Komplett-Audit ergab: „Disc rein →
gerippt raus" hatte nie einen Code-Pfad (Details in ROADMAP Etappe 11).
Kernpunkte des Umbaus:
- **Rip-Kette komplett neu**: POST /jobs → Celery → Worker (MakeMKV 1.18.4
verlustfrei, Etappe 10) → Postgres-Job-Status → UI. CD weiter via abcde.
- **Disc-Erkennung** über Kernel-ioctls (CDROM_DISC_STATUS + Größe), Watcher
pollt statt udev (im Container gibt es kein udev).
- **UI**: echter Vite-Build hinter nginx mit /api-Proxy — vorher Dev-Server
und hartkodiertes localhost:8000 (deshalb waren nie Laufwerke zu sehen).
- **Compose**: Laufwerk als devices: (Bind-Mounts gaben EPERM), Ausgabe auf
media-Volume (vorher /output → nicht gemountet + read-only-Falle).
- **Placebos entfernt**: Mock-Logs, toter SSE-Stream, udevadm-Discovery,
14 Troubleshooting-Altdateien (ARCAN-*.md, Setup-Skripte, udev-Rules).
**Hardware-Kette (23.07.):** Laufwerk (Verbatim 4K BD RW, BU40N 1.05) hängt am
Proxmox-Host; LPM-Quirk `usbcore.quirks=18a5:0428:k` gefixt die Serien-Disconnects
(reboot-fest in GRUB). VM 106 bekommt es per USB-Passthrough `host=18a5:0428`.
⚠️ Firmware 1.05 kann KEIN UHD-Ripping (verschlüsselt) — Crossflash auf 1.03-MK
ist der dokumentierte Weg, separater Faden. DVD/BD normal geht.
**Offen:** E2E mit echter Disc · Jellyfin-Post-Processing an Worker anbinden ·
Auth vor schreibende Endpoints · MAKEMKV_APP_KEY in Arcane-Env pflegen (monatlich).
---
## Vorheriger Stand
**v1.10 — Complete Dark Mode Implementation (22.07.2026)**
Rippy läuft auf Arcane VM (192.168.178.162):
- ✅ Arcane WebUI: http://192.168.178.162:3552
- ✅ Rippy UI: http://192.168.178.162:80
- ✅ Rippy API: http://192.168.178.162:8000
- ✅ Theme Context ausgelagert (App.tsx → ThemeContext.tsx + useDarkMode.ts)
- ✅ Config Validation mit TMDB-API-Key Pflicht
- ✅ Cache Key Centralization (cache/keys.py)
- ✅ Dark Mode mit Theme-Toggle und localStorage persistence (UI-Only)
-**Alle UI-Komponenten komplett auf Dark Mode aktualisiert:**
- `App.tsx`, `Dashboard.tsx`, `Settings.tsx`, `MetadataPreview.tsx`
- ✅ Sidebar Navigation mit Dark Mode Support
- ✅ Einstellungen-Page mit Tab-Struktur
- ✅ Doppelte Arcane-Einträge behoben (`rippy` statt `Rippy`)
- ✅ Import-Fixes (relative → absolute Imports)
- ✅ Git Sync in Arcane konfiguriert
- ✅ Commit: `d2fb281` — Complete Dark Mode Implementation
### Docker-Container
| Container | Port | Status |
|-----------|------|--------|
| rippy-api | 8000 | Healthy |
| rippy-worker | - | Running |
| rippy-ui | 80 | Running |
| rippy-postgres | 5432 | Healthy |
| rippy-redis | 6379 | Healthy |
### Features
-**Etappe 3**: SQLite-Cache, TMDB/MusicBrainz/TheTVDB Clients, Pre-Scan, Metadaten-Preview
-**Etappe 4**: Jellyfin-Formatierung (NFO-Generator, Image-Downloader)
-**Etappe 5**: JWT-Auth (15min/7T), Rate-Limiting (100/min), API-Key-Management
-**Etappe 6**: Docker read_only, tmpfs, healthchecks, minimale Images
-**Etappe 7**: API UI Modernisiert, Import-Fixes, Doppelte Einträge behoben
-**Etappe 8**: Dark Mode mit Theme-Toggle, Separation of Concerns
-**Etappe 9**: Complete Dark Mode Implementation (alle UI-Komponenten)
-**Dokumentation**: README, KONZEPT.md, ROADMAP.md, SAVEPOINT.md
### Nächste Schritte
- Job-Verlauf UI (aktuell nur leere Listen)
- TMDB API Schlüssel in Arcane Environment konfigurieren
- Proxmox LXC Template
- Ansible Playbooks
### SoC Refactoring — Abgeschlossen (Etappe 9)
-**Theme-Context**: Theme-Logik aus App.tsx ausgelagert
-**Dark Mode Utility**: useDarkMode Hook implementiert
-**Component-Struktur**: Dark Mode props von inneren Komponenten versteckt
-**Config Validation**: TMDB-API-Key ist Pflicht
-**Cache Key Centralization**: cache/keys.py erstellt
-**CD-Ripping**: abcde-Integration implementiert
### Git-Log
```
d2fb281 - fix: complete dark mode implementation with all UI components
43dfce5 - feat(ui): implement dark mode with theme toggle
rippy-ui-modern - UI Modernisiert & Import-Fixes
3d87c8c - Dokumentation aktualisiert
bdb9f8d - SAVEPOINT v1.5: Sicherheit abgeschlossen
efa642e - Etappe 6: Sicherheit
```
---
## v2.0 — Fix-Runde nach externem Code-Review (22.07.2026, Claude)
**Alle Befunde des Reviews behoben, echte Tests eingeführt, Ampel-CI aktiv.**
Gefixt:
- **Metadaten-Preview WIEDERHERGESTELLT**: Beim SoC-Refactoring hatte ein Stub-Paket
die echte prescan-Implementierung überschattet — die Preview lieferte immer
„Unknown Disc". Echte Logik liegt jetzt im Paket, tote Altmodule (cache.py,
prescan.py flach) gelöscht.
- Fortschrittsmeldung: Celery `update_state` statt Aufrufe eines nie existierenden
Tasks; `self.send_task` (erfundene API) entfernt.
- abcde-Kommando korrigiert (`-o` war doppelt → CD-Ripping war nie funktionsfähig);
Zielverzeichnis jetzt via OUTPUTDIR-Config; Kommando-Bau als testbare Funktion.
- JWT: fester Schlüssel PFLICHT (kein Zufalls-Fallback pro Prozess mehr);
Logout blacklistet wirklich; Cleanup löscht nur Abgelaufene (vorher: alles).
- main.py: crashende Endpoints repariert (fehlende Imports Path/secrets,
nicht existentes api_keys-Dict → ratelimit-Store), Audio-`year`-Bug,
Admin-Zugang aus .env statt hartkodiert.
- Ruff komplett grün (29 Funde), package-lock.json committet.
- Tests: test_auth, test_cache_keys, test_ripping_helpers (der giftige
test_health-Placebo ist raus).
## ✅ ENTSCHIEDEN (22.07. abends): Das KONZEPT gilt — MakeMKV kommt
**MakeMKV lossless (Muss-Feature) wird umgesetzt — als eigene Etappe 10 in der
ROADMAP** (Worker-Container + makemkvcon + Beta-Key, in Zed zu bauen, E2E mit
echter Disc). Bis dahin bleibt HandBrake als SICHTBARER Übergang aktiv — jede*r
weiß: aktuell wird transkodiert, nicht verlustfrei gesichert.
## Deploy-Weg seit 22.07. abends: GRÜN-GATE (vollautomatisch)
Push auf `main` → Ampel prüft → grün → CI befördert auf Branch `stable`
**Arcane-GitSync zieht `stable` und deployt**. Rot deployt NIE. `./deploy.sh`
ist nur noch der Notfall-Hebel; SSH zur VM bleibt als Fallback erlaubt.