diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index c6206ec..6670e41 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -71,3 +71,14 @@ jobs: echo "❌ AMPEL ROT — nichts heißt ‚fertig', solange das rot ist." fi exit $rot + + - name: Grün-Gate — grünen Stand auf 'stable' befördern (Arcane deployt von dort) + if: success() + shell: bash + run: | + if [ "${GITHUB_REF_NAME:-}" = "main" ]; then + git push origin +HEAD:refs/heads/stable + echo "✅ main → stable befördert. Arcane-GitSync zieht 'stable' und deployt." + else + echo "Kein main-Push — keine Beförderung." + fi diff --git a/AGENTS.md b/AGENTS.md index f85cc94..7222fe7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -17,9 +17,11 @@ abschwächen). Keine Tests = rot = nicht fertig. Der Commander liest die Ampel, gestrichenes Muss-Feature → erst den Commander fragen, NIE still ersetzen. (Vorgefallen: Muss-Feature „MakeMKV lossless" wurde still durch lossy HandBrake ersetzt.) -**C. Deployment NUR über `./deploy.sh`.** Idempotent, EIN fester Compose-Projektname -(`rippy`), EIN Pfad (`~/projects/rippy`). Nie freihändig per SSH auf der VM bauen. -(Vorgefallen: Doppel-Anlage `Rippy` + `rippy` auf der arcane-VM.) +**C. Deployment läuft AUTOMATISCH über das Grün-Gate.** Ampel grün auf `main` → +CI befördert den Stand auf Branch `stable` → Arcane-GitSync zieht `stable` und +deployt. Du deployst also durch PUSHEN, nicht durch Kommandos. `./deploy.sh` ist +NUR der Notfall-Hebel (Arcane down o. ä.); nie freihändig per SSH auf der VM bauen. +(Vorgefallen: Doppel-Anlage `Rippy` + `rippy` auf der VM durch Freihand-Deploys.) **D. Externe Schnittstellen NIE aus dem Kopf.** Vor Nutzung fremder CLI-Flags oder Bibliotheks-APIs: `--help`/Doku prüfen und die Fundstelle im Commit nennen. diff --git a/ROADMAP.md b/ROADMAP.md index 13524bf..7e2e42f 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -217,3 +217,15 @@ | TMDB-Bildrechte | Etappe 4 | Gelöst: TMDB API-ToS erlaubt private Nutzung | | Hybrid-Discs | Etappe 1 | MVP erkennt nur Standard; als "Kann" notiert | | Redis Single-Instance | Etappe 1 | MVP reicht; Cluster als "Später" | + +## Etappe 10: MakeMKV-Umstellung — das Muss-Feature „lossless" einlösen +**Ziel:** DVD/Blu-ray-Ripping auf `makemkvcon` umstellen (verlustfrei), wie im +KONZEPT als Muss definiert. HandBrake fliegt aus dem Ripp-Pfad (bleibt ggf. als +optionaler Transcode-Schritt NACH dem verlustfreien Rip). +- [ ] Worker-Dockerfile: makemkv-oss/makemkv-bin bauen + Beta-Key-Handling (Env/Cron) +- [ ] ripping.py: rip_dvd/rip_bluray auf `makemkvcon --all --progress mkv` umstellen + (Fortschritts-Parsing anpassen, Tests zuerst!) +- [ ] E2E mit echter Disc verifizieren (Commander, Laufwerk nötig) +**Fertig wenn:** eine echte DVD landet verlustfrei als MKV im Output, Ampel grün. +**Entstanden aus:** Review 22.07. — HandBrake-lossy war eine stille Abweichung vom +Konzept; Entscheid 22.07. abends: Konzept gilt, Umbau als eigene Etappe. diff --git a/SAVEPOINT.md b/SAVEPOINT.md index c974bf1..bde0b77 100644 --- a/SAVEPOINT.md +++ b/SAVEPOINT.md @@ -93,12 +93,14 @@ Gefixt: - Tests: test_auth, test_cache_keys, test_ripping_helpers (der giftige test_health-Placebo ist raus). -## ⚠️ OFFENE ENTSCHEIDUNG FÜR DEN COMMANDER (Regel B — keine stille Abweichung) +## ✅ ENTSCHIEDEN (22.07. abends): Das KONZEPT gilt — MakeMKV kommt -**KONZEPT sagt: MakeMKV, verlustfrei (Muss-Feature). Gebaut wurde: HandBrake mit -Lossy-Preset „Fast 1080p30".** Deine DVDs/Blu-rays werden aktuell TRANSKODIERT, -nicht verlustfrei gesichert. Optionen: -1. Auf MakeMKV umbauen (wie geplant — makemkvcon ist im Prescan schon im Einsatz, - braucht Beta-Key-Handling im Worker-Container), ODER -2. Konzept bewusst ändern („lossy reicht mir") und KONZEPT.md anpassen. -Bis zur Entscheidung bleibt HandBrake aktiv — aber jetzt SICHTBAR statt still. +**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. diff --git a/deploy.sh b/deploy.sh index 183afe1..498c02b 100644 --- a/deploy.sh +++ b/deploy.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash -# EINZIGER Deploy-Weg für Rippy (Regel C in AGENTS.md, seit 22.07.2026). +# NOTFALL-Deploy für Rippy (seit Grün-Gate 22.07.2026 NICHT mehr der Normalweg!). +# Normalweg: push → Ampel grün → CI befördert auf 'stable' → Arcane-GitSync deployt. +# Dieses Skript nur nutzen, wenn der Automat klemmt (Arcane down o. ä.). # Idempotent: EIN Compose-Projektname (rippy), EIN Pfad auf der VM. -# Nie freihändig per SSH bauen — genau daraus entstand die Doppel-Anlage -# Rippy/rippy am 21.07. set -euo pipefail VM="arcane@192.168.178.162"