cf2f65c567
Ampel / ampel (push) Failing after 29s
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>
135 lines
6.1 KiB
Markdown
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.
|