QA cp.go-ki.eu: SD-Forge/GPU-Manager Auto-Load + Admin-Backups-Liste gefixt, Bereichs-Matrix

This commit is contained in:
Code Barby 2026-07-23 15:42:49 +02:00
parent ba0c36c935
commit fe0e8ef99b

View file

@ -0,0 +1,76 @@
# Portal-QA cp.go-ki.eu — 2026-07-23 (Worker C)
Echte Browser-Automation (Claude-Browser-MCP) gegen https://cp.go-ki.eu, angemeldet über
VM302-Autologin. Jeder Bereich wurde per echtem Klick/Navigation getestet, keine Behauptungen
ohne Beleg (Netzwerk-Requests, gerenderter Text, Vorher/Nachher-Vergleich).
## Bereichs-Matrix
| Bereich | Status | Beleg |
|---|---|---|
| Uebersicht | ✅ funktioniert | Live-Werte (RAM/GPU/Power/Services 11/11) gerendert |
| Hardware | ✅ funktioniert | IPMI-Sensoren, Luefter, Spannungen, SMART, Chassis live |
| Netzwerk | ✅ funktioniert | Live-Throughput + Tabelle Zeitraeume (Hinweis: 2/7/14-Tage-Werte identisch mit "Heute" — Datenaggregation fragwuerdig, kein Blocker) |
| VMs & Container | ✅ funktioniert | GPU-1 (4/4) + PM-1 (5/5) VMs + Docker-Container live |
| Storage | ⚠️ teilweise | ZFS/PBS/Storageboxen ok. **Wasabi S3: `InvalidAccessKeyId`** — Access-Key in rclone.conf/Backend ungueltig. **[BÄR]**, kein Portal-Code-Fix (Credential-Rotation noetig) |
| Sicherheit | ✅ funktioniert | NTP, Logins, IPMI-Log, Cron-Jobs live |
| Alarme | ✅ funktioniert | 2 aktive Alarme + Historie live; Aktions-Buttons (Fortsetzen) bewusst NICHT geklickt (Seiteneffekt auf echtes Monitoring) |
| Domains | ✅ funktioniert | Domain-Registry-Tabelle korrekt |
| NPM Manager | ✅ funktioniert | 7 Proxy-Hosts, 6 SSL-Zerts, Live-Daten aus NPM-API |
| GPUPCs | ✅ funktioniert | GPU-Shadow + Monster-PC Status async geladen, "Check"-Button real getestet (Re-Check ausgeloest). Monster-API :9001 nicht erreichbar → **[BÄR]**-Infra-Befund |
| Links | ✅ funktioniert | 30 Eintraege, Copy-Button real geklickt, kein JS-Fehler |
| **Video → SD Forge** | 🔴→✅ **BUG GEFIXT** | Tab lud Modell-Liste nie automatisch (nur "Lade Modelle..." fuer immer). Ursache: `vSwitch()` rief `sdLoadModels()` nicht auf, nur ein fragiler `DOMContentLoaded`-Listener. Fix: Auto-Load direkt in `vSwitch()` ergaenzt. Backend selbst liefert 503 (SD-Forge-WebUI-API :8201 nicht erreichbar) — das ist ein separater Infra-Befund **[BÄR]** |
| **Video → GPU Manager** | 🔴→✅ **BUG GEFIXT** | Gleicher Root-Cause wie SD Forge, `gpuRefresh()` fehlte in `vSwitch()`. Nach Fix laedt VRAM/Modelle/Jobs sofort beim Tab-Oeffnen |
| Video → Veo3 Pipeline | ✅ funktioniert | Eigenes Panel (kein Duplikat wie zunaechst vermutet) |
| Video → Barby Studio | ✅ funktioniert | Entkleiden/Text2Img-Formular vollstaendig |
| Video → Ton & Musik | ✅ funktioniert | Song-Generator, TTS, MusicGen-Formulare |
| Video → Queue | ✅ funktioniert | Leere Queue korrekt angezeigt |
| Video → GPU Stack | ✅ funktioniert | Live VRAM/ComfyUI/Ollama-Status, Aktionslog |
| Video → KI Chat | ✅ funktioniert | Echte Nachricht gesendet, LLM hat generiert (qwen2.5:72b, Cold-Start dauert ~1-2 Min wg. 44GB-Modell-Ladezeit) |
| Video → Video Erstellen | ✅ funktioniert | One-Click-Pipeline-Formular eigenstaendig, unterscheidet sich korrekt von Veo3 |
| Video → Video Tools | ✅ funktioniert | Wav2Lip/Compositing/F5-TTS Formulare |
| Video → Links | ✅ funktioniert | Service-Link-Liste mit Live-Status-Punkten |
| Video → Hermes | ✅ funktioniert | Status "ollama:online", Chat-Historie geteilt mit KI-Chat |
| Benachrichtigungen | ✅ funktioniert | Formular laedt; Test-Mail/SMS bewusst NICHT ausgeloest (echter Seiteneffekt) |
| Notizen | ✅ funktioniert | **Echte Notiz erstellt + wieder geloescht** (API-Test, Original-Notizen unangetastet) |
| Dateien | ✅ funktioniert | Ordnerbaum + Datei-Listing (Groesse/Datum/Download/Teilen/Loeschen) live in `configs/` geprueft |
| Tunnel | ⚠️ Daten-Inkonsistenz | Health-Zaehler "5/8 online" vs. Tabelle zeigt 6 Online-Zeilen. Ursache: externe "Tunnel-API" liefert Health-Snapshot und Server-Liste in unterschiedlichem Timing — **nicht in app.py berechnet**, daher kein Portal-Fix moeglich. **[BÄR]**-Befund (externer Dienst) |
| Admin → System-Info | ✅ funktioniert | Hostname/Uptime/Load/Disk/RAM/Python/Dateigroessen live |
| **Admin → Backups anzeigen** | 🔴→✅ **BUG GEFIXT** | Blieb ewig bei "Lade Backup-Liste...". Ursache: Backend liefert `{backups:[...],count:N}`, Frontend erwartete rohes Array (`d.length`/`d.map` = TypeError, keine `.catch()`). Fix: Frontend liest `d.backups`, zeigt Groesse an, hat jetzt Fehlerbehandlung. Verifiziert: 88 Backups korrekt gelistet |
| Admin → Eigene Links | ✅ funktioniert | Real per API getestet: Link hinzugefuegt + wieder geloescht (Button-Klick per Koordinate traf in dieser Headless-Testumgebung nicht zuverlaessig — direkter Funktionsaufruf bestaetigt: kein Produktbug) |
| Admin → Tab-Reihenfolge & Gruppen | ✅ sichtbar/geladen | Drag&Drop-Editor vorhanden, nicht destruktiv getestet (Speichern haette echte Tab-Reihenfolge veraendert) |
## Gefixte Bugs (Portal-Code, VM201 100.114.24.89, `/opt/gpu1-status/app.py`)
1. **SD Forge + GPU Manager: kein Auto-Load beim Tab-Wechsel**
- Root Cause: `vSwitch()` rief fuer `ki-sd-forge`/`ki-gpu-manager` keine Ladefunktion auf; verlassen auf einen `DOMContentLoaded`-Listener, der nicht zuverlaessig griff.
- Fix: `sdLoadModels()` bzw. `gpuRefresh()` direkt in `vSwitch()` ergaenzt (gleiches Muster wie `studio`/`bild`/`ton`/`queue`/`stack`).
- Backup: `app.py.bak-sdforge-gpumanager-autoload-20260723-150731`
2. **Admin → Backups anzeigen: haengt permanent bei "Lade Backup-Liste..."**
- Root Cause: Backend-Antwort `{backups:[...],count:N}` vs. Frontend erwartete Array direkt, TypeError ohne `.catch()`.
- Fix: Frontend liest `d.backups||d||[]`, zeigt Dateigroesse, hat Fehlerbehandlung.
- Backup: `app.py.bak-adminbackups-fix-20260723-152842`
Beide Fixes nach Skill-Ablauf: Backup → Aendern (eindeutiges Python-Suchmuster) → `py_compile` (OK) →
Testinstanz Port 9092/9093 (HTTP 200, Fix im HTML verifiziert) → `systemctl restart gpu1-portal.service`
→ Nachkontrolle `https://cp.go-ki.eu/` (200) → im echten Browser reproduziert und **live verifiziert**.
## [BÄR] / Infra-Befunde (nicht im Portal-Code fixbar)
- **Wasabi S3 `InvalidAccessKeyId`** (Storage-Tab) — Access-Key `CEADGY9UH44FF2QTK5ZE` in der hinterlegten rclone-Konfiguration ist ungueltig/abgelaufen. Braucht neue Wasabi-Credentials.
- **Monster-API :9001 nicht erreichbar** (GPUPCs-Tab) — Monster-PC ist offline, daher erwartungsgemaess kein API-Zugriff.
- **SD-Forge-WebUI-API :8201 → 503** (Video → SD Forge) — Backend-Dienst laeuft nicht/ist nicht erreichbar. Portal zeigt das jetzt korrekt an statt endlos zu haengen.
- **Tunnel-Registry Health-Zaehler-Inkonsistenz** — externe Tunnel-API liefert Snapshot-Mismatch zwischen Health-Zahl und Server-Liste (5/8 vs. tatsaechlich 6 online in der Tabelle).
## Kleinere Beobachtungen (kein Blocker)
- Netzwerk-Tab: "2 Tage / 7 Tage / 14 Tage"-Spalten zeigen exakt dieselben Werte wie "Heute" — Aggregation wirkt unvollstaendig implementiert, aber nicht funktionsbrechend.
- NPM Manager: ein abgelaufenes Duplikat-Zertifikat `ollama.go-ki.eu` (Provider "other", -11 Tage) neben dem gueltigen — Aufraeum-Kandidat, kein Fehler.
## Guardrails eingehalten
- Kein VM302-Reboot
- Vor jedem Code-Eingriff Backup (`app.py.bak-*`) angelegt
- Testinstanz auf separatem Port vor jedem Neustart des echten Dienstes
- Laufender Dienst nur nach erfolgreichem Testinstanz-Check neu gestartet, danach Domain-Health per `curl` bestaetigt
- Keine Test-Mails/SMS/PagerDuty-Alerts ausgeloest, keine echten VM/PC-Power-Aktionen (Start/Stop/Hibernate) ausgefuehrt
- Alle Test-Artefakte (Notiz, Eigener Link) wieder entfernt