From 995339959e1a24215a1ca03a71687f603d1216ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hartmut=20N=C3=B6renberg?= Date: Fri, 6 Mar 2026 15:52:35 +0100 Subject: [PATCH] docs: Phase A abgeschlossen, Learnings und PLAN.md aktualisiert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PLAN.md: Phase A alle Tasks als ✅ markiert, Status IN UMSETZUNG - LEARNINGS.md: 2 neue Learnings - .gitignore 'core' Regel trifft Verzeichnisse (Root-relative Fix) - Blender HTTP-Service vs. direkter Subprocess (render-worker Pattern) Co-Authored-By: Claude Sonnet 4.6 --- LEARNINGS.md | 15 +++++++++++++++ PLAN.md | 12 ++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/LEARNINGS.md b/LEARNINGS.md index e0d03f6..686888e 100644 --- a/LEARNINGS.md +++ b/LEARNINGS.md @@ -109,6 +109,21 @@ --- +### 2026-03-06 | Refactor | .gitignore `core` trifft Verzeichnisse +**Problem:** `.gitignore` enthielt `core` als Regel (für core dump files) — Git ignorierte damit auch `backend/app/core/` Verzeichnis +**Lösung:** Regel zu `/core` umbenannt (Root-relative Regel trifft nur `/core` Datei, nicht verschachtelte `core/`-Verzeichnisse) +**Für künftige Projekte:** Immer Root-relative Pfade (`/core`) für Dateien im Root-Verzeichnis nutzen + +--- + +### 2026-03-06 | Architektur | Blender-HTTP-Service vs. direkter Subprocess +**Problem:** `blender-renderer` als Flask/FastAPI HTTP-Microservice war ein Single-Point-of-Failure (max. 1 concurrent Request), kein Scaling möglich, HTTP-Overhead bei jedem Render +**Lösung:** Render-Worker als Celery-Container (`render-worker/`) — Blender direkt via `subprocess.run` ohne HTTP. `is_blender_available()` prüft `BLENDER_BIN` env var für Kontext-Detection +**Wichtig:** `step_processor.py` erkennt über `BLENDER_BIN`-Env ob Blender im aktuellen Container verfügbar ist — Backend-Container fallen auf Pillow zurück +**Für künftige Projekte:** Subprocess-basierter Renderer > HTTP-Microservice für blocking compute tasks + +--- + ## Offene Fragen - [ ] Azure AI Credentials für Phase 4 (Bildvalidierung) noch nicht konfiguriert - [ ] Flamenco GPU-Support nur mit NVIDIA — AMD/CPU-Fallback fehlt diff --git a/PLAN.md b/PLAN.md index be7b4c3..ef1043a 100644 --- a/PLAN.md +++ b/PLAN.md @@ -940,16 +940,16 @@ chain( ## 7. Phasenplan mit Tasks -### Phase A: Infrastruktur-Cleanup + MinIO (Woche 1-2) +### Phase A: Infrastruktur-Cleanup + MinIO ✅ ABGESCHLOSSEN (2026-03-06) -**A1: Flamenco entfernen** +**A1: Flamenco entfernen** ✅ - `docker-compose.yml` → flamenco-manager, flamenco-worker entfernen - `flamenco_client.py`, `flamenco_tasks.py` löschen - `render_dispatcher.py` → vereinfachen (nur Celery-Pfad) - Migration 032: laufende Flamenco-Jobs auf `cancelled` setzen - Akzeptanzkriterium: `docker compose up` startet ohne flamenco, alle bestehenden Renders laufen via Celery -**A2: blender-renderer → render-worker Celery-Container (ADR-06 umsetzen)** +**A2: blender-renderer → render-worker Celery-Container (ADR-06 umsetzen)** ✅ - `render-worker/Dockerfile` (neu): Ubuntu + Blender (>= 5.0.1, via `BLENDER_VERSION` Build-Arg) + cadquery + Python-Deps - `check_version.py` läuft beim Container-Start: prüft Blender >= 5.0.1, Exit 1 wenn nicht erfüllt - `blender-renderer/blender_render.py` → `render-worker/scripts/blender_render.py` @@ -959,13 +959,13 @@ chain( - `.env.example`: `BLENDER_VERSION=5.0.1` dokumentieren - Akzeptanzkriterium: Thumbnail via Celery-Task, kein HTTP-Call zu :8100, Version-Check besteht -**A3: threejs-renderer entfernen** +**A3: threejs-renderer entfernen** ✅ - Service entfernen, threejs-Pfad in step_processor.py entfernen - Batch-Regenerierung aller threejs-Thumbnails (Admin-Funktion) - ThreeDViewer.tsx (Frontend) bleibt - Akzeptanzkriterium: Alle Thumbnails Blender-gerendert -**A4: MinIO hinzufügen + Storage-Abstraction** +**A4: MinIO hinzufügen + Storage-Abstraction** ✅ - MinIO Service in `docker-compose.yml` - `core/storage.py`: `MinIOStorage` + `LocalStorage` (für Dev-Fallback) - Bestehende Upload-Endpoints: Dateien nach MinIO statt in lokales `/uploads` @@ -974,7 +974,7 @@ chain( - `docker-compose.worker.yml` (neu): render-worker für externe Maschinen - Akzeptanzkriterium: File-Upload → MinIO, Worker-Container läuft auf Maschine B und rendert Jobs -**A5: system_settings → app_config** +**A5: system_settings → app_config** ✅ - Migration 033: `app_config` Tabelle (JSONB-Spalten: render, storage, notifications, worker, billing) - `core/config_service.py` (neu), `system_settings` Tabelle deprecated - Migrate bestehende Settings