Commit Graph

75 Commits

Author SHA1 Message Date
Hitonabi eee3a83d0e Compose: Laufwerk als devices: statt Bind-Mount, Ausgabe aufs media-Volume
Bind-Mounts unter volumes: geben dem Container den Geräteknoten, aber keine
Device-Cgroup-Erlaubnis — jedes open() scheiterte mit EPERM. Totes
disc:-Volume raus (kein udevd legt dort je Symlinks an), depends_on wartet
jetzt auf healthy, Worker-read_only bis zur Härtung ausgesetzt (MakeMKV
braucht HOME).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 15:02:13 +02:00
Hitonabi 28a12b2e06 API: Die Job-Kette existiert jetzt — POST /jobs, Watcher, Postgres, /logs
Vorher gab es KEINEN Code-Pfad, der je einen Rip ausgelöst hat: kein
POST /jobs, kein udev-Daemon (udev_daemon.py existierte nirgends), GET /jobs
gab hart [] zurück, Postgres lag komplett brach, der SSE-Stream konnte
strukturell nie senden (sse_connections wurde nie befüllt), udevadm lieferte
ohne udevd nichts.

- POST /jobs: legt Job-Zeile an, schickt worker.tasks.rip_disc via Celery
- GET /jobs aus Postgres (running→processing fürs UI)
- Disc-Watcher: 3s-ioctl-Poll statt udev, protokolliert Einwurf/Auswurf
- /devices über /sys (vendor/model) + ioctl-Status — ehrlich statt leer
- /logs + /settings (Settings-Seite sprach vorher gegen 404)
- SSE-Fix, udev aus dem API-Image entfernt, Import-Smoke-Test

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 15:02:13 +02:00
Hitonabi 780d114fe4 Etappe 10: Worker rippt wirklich — MakeMKV 1.18.4 + ioctl-Disc-Erkennung
Vorher: Dockerfile unbaubar (makepkg ist ein Arch-Paket, existiert in Debian
nicht) und KEIN einziges Ripping-Tool im Image — jeder Rip endete sofort.
Disc-Erkennung via `file -L` konnte auf Block-Devices strukturell nie etwas
erkennen; ihr Test mockte sich die Ausgabe passend.

- makemkv-oss/bin 1.18.4 multi-stage (bookworm-gepinnt), EULA via
  tmp/eula_accepted, Beta-Key aus MAKEMKV_APP_KEY (entrypoint.sh)
- makemkvcon-Aufruf + PRGV-Parsing laut makemkv.com/developers/usage.txt
  (AGENTS Regel D), HandBrake raus aus dem Ripp-Pfad (KONZEPT: lossless=Muss)
- detection.py: CDROM_DISC_STATUS + BLKGETSIZE64 (cd/dvd/bluray), pure
  classify() mit ehrlichen Tests
- tasks.py: rip_disc als einziger Celery-Task, schreibt Status/Fortschritt
  nach Postgres (db.py), Ausgabe auf /app/media (Volume) statt totem /output

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 15:02:13 +02:00
Hitonabi b80b7681c5 fix: install udev in API container for udevadm device detection
Ampel / ampel (push) Successful in 30s
2026-07-23 13:41:06 +02:00
Hitonabi 977da015fb fix: remove read_only for API container to allow device mounts
Ampel / ampel (push) Successful in 30s
2026-07-23 13:37:51 +02:00
Hitonabi 0ae9378fca fix: add device mounts to API container for /devices endpoint
Ampel / ampel (push) Successful in 35s
2026-07-23 13:36:44 +02:00
Hitonabi 68094f8b43 fix(api): detect direct devices /dev/sr0, /dev/cdrom
Ampel / ampel (push) Successful in 32s
- Get devices from /dev/disc/ (udev symlinks)
- Also check direct devices: /dev/sr0, /dev/cdrom, /dev/dvd
- Use udevadm to detect device type (cd/dvd/bluray)
- Extract model and serial for better identification
2026-07-23 12:59:09 +02:00
Hitonabi ca3139289c docs: Laufwerk an Proxmox VM durchreichen
Ampel / ampel (push) Failing after 13m17s
- VM-Konfiguration prüfen: Laufwerk ist am Host sichtbar
- Anleitung für Proxmox Web-UI und CLI hinzugefügt
- Skript proxmox-add-drive.sh für automatische Konfiguration
2026-07-23 12:56:03 +02:00
Hitonabi e9652a428c feat(ui): implement Discovery, Logs, and Live Log
Ampel / ampel (push) Successful in 29s
- DeviceDiscovery: auto device detection with type and status
- LogsPage: comprehensive logs view with filters and stats
- RipTargetModal: target directory selection wizard
- ConfirmDialog: generic confirmation dialog component
- LiveLogSection: real-time job progress and logs
- Update App.tsx to include new pages
2026-07-23 12:38:16 +02:00
Hitonabi 3e88c328db fix(worker): remove pyudev (needs libudev-dev, not in slim image)
Ampel / ampel (push) Successful in 30s
2026-07-23 12:27:21 +02:00
Hitonabi a456e8587c fix(worker): remove invalid udev package, use syslinux-utils for isoinfo
Ampel / ampel (push) Failing after 28s
2026-07-23 12:24:31 +02:00
Hitonabi 524d2e570e fix(docker-compose): simplify device mounts, remove redundant volumes
Ampel / ampel (push) Failing after 29s
- Remove cdrom/dvd anonymous volumes (not needed with direct mounts)
- Remove redundant devices/cap_add (mounts are sufficient)
2026-07-23 12:20:56 +02:00
Hitonabi 61af353559 fix(worker): mount host devices for disc detection
Ampel / ampel (push) Failing after 30s
- Add direct device mounts (cdrom, dvd, sr0) to worker
- Add SYS_ADMIN capability for udev access
- Install isoinfo and udev in worker container
- Add pyudev for device monitoring
- Update udev rules with correct paths
2026-07-23 12:15:55 +02:00
Hitonabi 9c010d2dc5 Notfall-Deploy: eigener Klon (~/notfall-rippy, stable) statt Arcane-Verzeichnis
Ampel / ampel (push) Successful in 33s
22.07. gelernt: git-Klon im Arcane-Projektverzeichnis kollidiert mit
dessen Promote (read-only .git-Objekte). Arcane gehoert ~/projects/rippy
jetzt allein; .env wird nur gelesen.
2026-07-22 22:54:59 +02:00
Hitonabi 0b93276302 Gruen-Gate: Ampel gruen auf main -> automatische Befoerderung auf stable
Ampel / ampel (push) Successful in 31s
Arcane-GitSync deployt kuenftig von stable (rot deployt NIE).
deploy.sh wird zum Notfall-Hebel. MakeMKV-Entscheid: Konzept gilt,
lossless als Etappe 10 in der ROADMAP verankert.
2026-07-22 22:45:46 +02:00
Hitonabi 419ba42c38 CI: Beweis-Lauf nach Runner-Upgrade auf 0.6.1 (Status-Bug-Fix)
Ampel / ampel (push) Successful in 28s
2026-07-22 22:26:51 +02:00
Hitonabi ad48276fdd Fix: Fortschritts-Regex toleriert Leerzeichen vor % (Testfund)
Ampel / ampel (push) Failing after 14m47s
Echtes HandBrake schreibt "45.50 %" mit Leerzeichen - die alte Regex
hat aus echter Ausgabe NIE einen Fortschritt geparst. Der neue Test
mit realistischer Zeile hat es sofort gefangen.
2026-07-22 19:39:35 +02:00
Hitonabi 0ea5f10b31 Fix-Runde nach Review: alle Befunde behoben + echte Tests
Ampel / ampel (push) Failing after 12m31s
- Metadaten-Preview WIEDERHERGESTELLT (Stub ueberschattete echte
  prescan-Implementierung), tote Altmodule geloescht
- Celery update_state statt Phantom-Task/erfundener API
- abcde-Kommando korrigiert (CD-Ripping war nie funktionsfaehig)
- JWT: fester Schluessel Pflicht, echtes Logout, Cleanup nur Abgelaufene
- main.py: crashende Endpoints (Path/secrets/api_keys), year-Bug,
  Admin-Login aus .env
- Ruff gruen (29 Funde), Tests: auth/cache_keys/ripping_helpers,
  Placebo-test_health raus
- SAVEPOINT: offene MakeMKV-Entscheidung SICHTBAR gemacht (Regel B)
2026-07-22 19:31:48 +02:00
Hitonabi 728f650bf8 Ampel v3: bash -e des Runners abschalten - vollstaendiges Urteil statt Abbruch
Ampel / ampel (push) Failing after 15m5s
Lauf 5 urteilte korrekt ROT (Ruff-Funde + giftiger Placebo-Test),
aber -e schnitt Node-Teil und Klartext-Fazit ab.
2026-07-22 19:19:15 +02:00
Hitonabi 13c0c4b066 Ampel v2: universelle Vorlage (Fix: checkout braucht Node im Container)
Ampel / ampel (push) Failing after 12m54s
+ package-lock.json (fehlte komplett - Builds waren nie reproduzierbar)
2026-07-22 19:11:27 +02:00
Hitonabi 57bda55af4 Harte Regeln (Ampel-Pflicht, Spec-Stopp, deploy.sh-only, keine
CI / ui (push) Failing after 13m34s
CI / api-und-worker (push) Failing after 14m28s
erfundenen APIs) + idempotentes deploy.sh

Lehren aus dem Review 22.07.: stille MakeMKV->HandBrake-Abweichung,
Doppel-Anlage auf der VM, halluzinierte Celery/abcde-Schnittstellen.
2026-07-22 18:59:53 +02:00
Hitonabi be7f615a4b CI-Ampel: Gitea Actions Workflow (Linter, Deps, Imports, Pytest, UI-Build)
CI / ui (push) Failing after 11m51s
CI / api-und-worker (push) Failing after 12m54s
Rot ist ein Ergebnis: ohne echte Tests bleibt die Ampel rot.
Teil der Wasserdicht-Runde 22.07.
2026-07-22 18:56:28 +02:00
Hitonabi 12c67aee27 fix: use dark class instead of data-theme for Tailwind 2026-07-22 17:12:32 +02:00
Hitonabi 85e072a7dd fix: use Tailwind dark: prefix instead of conditional classes 2026-07-22 17:11:02 +02:00
Hitonabi 886cf4398e fix: Dashboard.tsx useEffect syntax error 2026-07-22 17:04:18 +02:00
Hitonabi 24326e49b7 docs: update SAVEPOINT.md with v1.10 and complete dark mode 2026-07-22 17:02:08 +02:00
Hitonabi d2fb281342 fix: complete dark mode implementation with all UI components 2026-07-22 17:00:49 +02:00
Hitonabi 95c1f9b105 feat(ui): SoC Refactoring & Config Validation
- Theme Context ausgelagert (ThemeContext.tsx + useDarkMode.ts)
- Config Validation mit TMDB-API-Key Pflicht (config_validation.py)
- Cache Key Centralization (cache/keys.py)
- CD-Ripping mit abcde implementiert (Worker)
- Docker Compose mit Healthchecks & LOG_LEVEL
- ROADMAP.md & SAVEPOINT.md aktualisiert
2026-07-22 16:38:19 +02:00
Hitonabi e710151c91 docs: aktualisiere alle MD-Dateien auf v1.8
- README.md: Etappe 7/8 hinzugefügt, Roadmap aktualisiert
- KONZEPT.md: Feature-Status aktualisiert
- ROADMAP.md: Etappe 7 (Dark Mode) und 8 (SoC) hinzugefügt
- SAVEPOINT.md: v1.8 mit Dark Mode und SoC-Planung
- ARCANE-VM-SETUP.md: Rippy Features hinzugefügt
- ARCAN-FIX.md: Status 21.07.2026 aktualisiert
- ARCAN-PROJECTS-DIR.md: Status hinzugefügt
- ARCANE-DOCKER-COMPOSE-FIX.md: Status aktualisiert
- ARCAN-INTEGRATION.md: Status hinzugefügt
- AGENTS.md: Aktueller Stand und nächste Etappe
- Commit: 9be0592
2026-07-21 22:24:21 +02:00
Hitonabi 9be0592942 docs: SAVEPOINT v1.8 — Dark Mode & SoC 2026-07-21 22:19:32 +02:00
Hitonabi 43dfce5233 feat(ui): implement dark mode with theme toggle
- Add global theme state in App.tsx with localStorage persistence
- Implement dark mode CSS variables in index.css
- Add theme toggle button in sidebar navigation
- Update Dashboard with dark mode support for stats cards and badges
- Update Settings page with dark mode for main layout and toggles

This implements the core dark mode functionality with separation of
concerns - theme state is managed globally in App.tsx and passed down
to child components as props.
2026-07-21 22:18:59 +02:00
Hitonabi ba2429612a rippy-ui-modern: API UI Modernisiert & Import-Fixes
- Doppelte Arcane-Einträge behoben (rippy statt Rippy) - Import-Fixes: relative → absolute imports in main.py, cache/__init__.py, prescan/__init__.py, clients/__init__.py - Neue Dateien: cache.py, prescan.py, Settings.tsx - API-Port 8000 in docker-compose.yml gemappt - UI mit Sidebar, Dark Mode, Einstellungen-Tabs

Fixes: #2978 (doppelte Einträge), #2888 (Import-Fehler)
2026-07-21 22:08:03 +02:00
Hitonabi e37aff2678 fix: jwt_secret_key hinzufügen 2026-07-21 17:53:59 +02:00
Hitonabi 7a61440d22 chore: worker .dockerignore for __pycache__ 2026-07-21 17:51:41 +02:00
Hitonabi 969a863835 fix: pydantic-settings import für v2 2026-07-21 17:49:16 +02:00
Hitonabi 08a985b989 fix: Package-Struktur für API-Container (app/) 2026-07-21 17:48:09 +02:00
Hitonabi 50f747d1e0 Dockerfiles: Korrektur für Arcane Build 2026-07-21 17:33:57 +02:00
Hitonabi d42a7e92a3 .dockerignore: Docker-Verzeichnisse nicht ausschließen 2026-07-21 17:33:09 +02:00
Hitonabi d629c22295 .dockerignore: UI-Verzeichnis nicht ausschließen 2026-07-21 17:32:48 +02:00
Hitonabi 66d0600146 SAVEPOINT v1.6: Komplett! 2026-07-21 17:29:20 +02:00
Hitonabi 3d87c8caa7 Dokumentation aktualisiert 2026-07-21 17:28:59 +02:00
Hitonabi bdb9f8d405 SAVEPOINT v1.5: Sicherheit abgeschlossen
- Docker read_only + tmpfs
- Healthchecks für Postgres/Redis
- requirements.txt optimiert
- .dockerignore für __pycache__
2026-07-21 17:26:20 +02:00
Hitonabi efa642e676 Etappe 6: Sicherheit
- docker-compose.yml mit read_only: true, tmpfs, healthchecks
- API- und Worker-Dockerfiles mit minimalem Image
- requirements.txt für Python-Abhängigkeiten
2026-07-21 17:26:01 +02:00
Hitonabi b8cd4d9e0b .dockerignore: __pycache__ und .pyc ausschließen 2026-07-21 17:24:29 +02:00
Hitonabi 343eccb543 SAVEPOINT v1.4: Komplett!
- Metadaten-Lookup (TMDB, MusicBrainz, TheTVDB)
- Pre-Scan-Modul
- Jellyfin-Formatierung (NFO + Images)
- JWT-Auth + Rate-Limiting
- API-Key-Management
- Dokumentation (README, KONZEPT, ROADMAP)
2026-07-21 17:23:24 +02:00
Hitonabi 6fe2fd74c1 Dokumentation: README, KONZEPT, ROADMAP, SAVEPOINT 2026-07-21 17:23:01 +02:00
Hitonabi 5464d8acc7 SAVEPOINT v1.3: Etappe 3-5 abgeschlossen
- Metadaten-Lookup (TMDB, MusicBrainz, TheTVDB)
- Pre-Scan-Modul
- Jellyfin-Formatierung (NFO + Images)
- JWT-Auth + Rate-Limiting
- API-Key-Management
2026-07-21 17:19:52 +02:00
Hitonabi 3e921fc0c9 Etappe 5: Auth + Rate-Limiting
- JWT-Auth (Access 15min/Refresh 7 Tage)
- Rate-Limiting (100/min pro Client/API-Key)
- API Key Management
- OAuth2 Password Scheme
2026-07-21 17:19:34 +02:00
Hitonabi 518155051f Etappe 3: Metadaten-Lookup + Pre-Scan
- SQLite-Cache für API-Rate-Limits (LRU, 10k Einträge)
- TMDB/MusicBrainz/TheTVDB Clients
- Pre-Scan-Modul für TOC-Lesung ohne Ripping
- Metadaten-Preview UI
- Jellyfin-Formatierung (NFO + Images)
- API Endpoints für Lookup, Confirm, Format
2026-07-21 17:17:35 +02:00
Hitonabi 0cf5413ac0 Merge remote-tracking branch 'origin/main' 2026-07-21 17:10:48 +02:00