Files
AI-Profile-Router/docs/DISASTER_RECOVERY.md
T

166 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Disaster Recovery und Abnahme
## Definition „vollständig wiederhergestellt“
Eine Installation gilt erst dann als wiederhergestellt, wenn nicht nur Prozesse
laufen, sondern alle fachlichen Funktionen geprüft wurden.
## Phase A – Basissystem
- [ ] Betriebssystem und Kernel dokumentierter Stand
- [ ] Uhrzeit, Zeitzone und NTP korrekt
- [ ] Netzwerk nach Neustart automatisch verfügbar
- [ ] NVIDIA-Treiber geladen
- [ ] RTX und kompletter VRAM sichtbar
- [ ] System- und Modelllaufwerk korrekt gemountet
- [ ] mindestens 15 Prozent frei auf dem Systemlaufwerk
- [ ] Docker und Compose funktionieren
- [ ] keine RX- oder Benchmark-Altlast aktiviert
## Phase B – Textmodell
- [ ] llama.cpp entspricht dem festgelegten Commit
- [ ] Modelldateien stimmen mit SHA256 überein
- [ ] Fast startet mit 76.800 Kontext
- [ ] Medium startet mit 160.000 Kontext und ist Standard
- [ ] Large startet mit 192.000 Kontext
- [ ] Ultra startet mit 262.144 Kontext und bleibt text-only
- [ ] Uncensored startet mit 80.000 Kontext, 90:10 und MTP2
- [ ] GPU-/CPU-Verteilung entspricht den Profilen
- [ ] Fast erreicht den festgelegten Geschwindigkeitstoleranzbereich
- [ ] MTP funktioniert und verursacht keine Qualitätsregression
- [ ] Rolling-/Kontextverhalten ist bewusst definiert und getestet
## Phase C – Router
- [ ] Start ohne API-Key schlägt bewusst fehl
- [ ] `/health` bleibt bei Hotswap 200 und `/ready` wird vorübergehend 503
- [ ] geschützte Endpunkte liefern ohne Key 401
- [ ] Router-Key erscheint weder im Upstream noch im Journal
- [ ] `/status` meldet den richtigen Upstream
- [ ] `/v1/models` liefert fünf virtuelle Modelle
- [ ] `/fast`, `/medium`, `/large`, `/ultra` und `/uncensored` wechseln zuverlässig
- [ ] automatischer Wechsel über virtuellen Modellnamen funktioniert
- [ ] paralleler Wechsel wird sauber gesperrt
- [ ] Streaming funktioniert
- [ ] Tool Calls funktionieren
- [ ] Fehler sind OpenAI-kompatibel
- [ ] ein abgebrochener Client hinterlässt keinen blockierten Job
- [ ] erzwungener Routerabbruch wird aus Zustandsdatei sauber rekonstruiert
- [ ] fehlende/falsche Profilregistry verhindert falsche Readiness
## Phase D – Web und MCP
- [ ] OpenWebUI zeigt nur die fünf MikeAI-Arbeitsbereichsmodelle
- [ ] rohe `qwen-*`-Routermodelle sind ausgeblendet
- [ ] Medium ist die gespeicherte Standardauswahl
- [ ] Filter und Quick Actions sind allen fünf Presets zugeordnet
- [ ] native OpenWebUI-Websuche funktioniert ohne `web-local`; Auto Tool Selector wählt GitHub, Home
Assistant, ARR, Navidrome, Unraid read-only, Athena-Plattformwissen und
den Athena Operator korrekt
- [ ] normale Unterhaltung erhält kein MCP; MUA wird niemals automatisch gewählt
- [ ] eine synthetische CSV wird lokal ausgewertet; kein Webwerkzeug erhält Dateidaten
- [ ] ein rekursiver GitHub-Komplettbaum ist nicht als Werkzeug verfügbar
- [ ] der zweite identische Werkzeugaufruf wird gestoppt und eine Abschlussantwort erzeugt
- [ ] SearXNG und TinySearch gesund
- [ ] Websuche liefert kompakte, quellengebundene Ergebnisse
- [ ] `web_read` liest eine bekannte öffentliche Testseite ohne neue Suche
- [ ] `web_youtube` liefert mit `mode=latest` die neuesten Videos des offiziellen
The-Proper-People-Kanals samt Veröffentlichungszeit
- [ ] `web_youtube` trennt mit `content_type=long` und `content_type=short` die
jeweiligen YouTube-Tabs und setzt `content_type_verified=true`
- [ ] vier ähnliche erfolglose Suchvarianten werden serverseitig gestoppt
- [ ] GitHub- und Hugging-Face-Routing geprüft
- [ ] Home Assistant read-only Diagnose geprüft
- [ ] Home-Assistant-MCP löst `ha.casaderoll.de` im Container auf die private
`HOME_LAN_PROXY_IP` auf und `tools/list` antwortet über WireGuard
- [ ] ARR read-only Suche geprüft
- [ ] Navidrome-MCP gesund; 38 beziehungsweise mit Last.fm 45 Werkzeuge
- [ ] Navidrome-Schemas vollständig llama.cpp-kompatibel
- [ ] Navidrome ist nicht pauschal an jedes Modellprofil gebunden
- [ ] offizieller GitHub-MCP gesund; exakt drei read-only Repository-Werkzeuge
- [ ] `dev/verify_mcp_catalogs.sh` endet mit `MCP_CATALOG_SUITE_OK`
- [ ] GitHub-Token liegt nur in `/etc/mike-ai/github-mcp.env` (0600), nicht in OpenWebUI
- [ ] Unraid read-only Diagnose geprüft
- [ ] schreibende Werkzeuge standardmäßig nicht geladen; automatische Auswahl
gilt nicht als Änderungsfreigabe
- [ ] Tool-Schemas bleiben innerhalb des festgelegten Kontextbudgets
- [ ] kein Secret erscheint in Toolantworten oder Logs
- [ ] `PLATFORM_OVERVIEW.md`, `QWEN_OPERATOR_CONTEXT.md` und der Operator-
System-Prompt entsprechen dem wiederhergestellten Stand
- [ ] Platform-Context-Snapshot aktuell; offene Vorschläge und angewandte
Dokumentationsänderungen mit `athena_get_maintenance_status` geprüft
- [ ] Athena Operator und rootseitiger Executor gesund; Lesen und Preview
erfolgreich; falsches/abgelaufenes Ticket, Pfadausbruch, WireGuard-Stopp,
freie Befehle, SSH, Reboot und Shutdown in Negativtests verweigert
- [ ] lokales Dokumentations-Overlay ist auch im privaten Git enthalten und
der Recovery-Koffer wurde danach neu erzeugt
## Phase E – Vision, Bild und Sprache
- [ ] neues Bild wird ohne Dienstneustart direkt vom aktiven Qwen analysiert
- [ ] Folgefrage bleibt im multimodalen Verlauf und löst keinen Hotswap aus
- [ ] Bilddaten werden größen- und URL-validiert
- [ ] Remote-/private Bild-URL wird abgewiesen und übergroße Data-URL blockiert
- [ ] llama.cpp-PID und aktives Profil bleiben bei Vision unverändert
- [ ] FLUX erzeugt Standard- und High-Bild
- [ ] Qwen-Profil wird nach FLUX wiederhergestellt
- [ ] Whisper transkribiert deutsche und englische Testdatei
- [ ] XTTS-v2 läuft ausschließlich auf der RTX 3060 und meldet `Annmarie Nele`
- [ ] TTS-Gateway erzeugt über den Router deutsche und englische WAV-/MP3-Ausgabe
- [ ] englische IT-Begriffe im deutschen Satz werden sprachlich segmentiert
- [ ] gestopptes XTTS fällt ohne Router-/OpenWebUI-Neustart auf Piper zurück
- [ ] Piper-Fallback und `piper-tts`-Version entsprechen der Installationskonfiguration
- [ ] STT/TTS blockieren das Textmodell nicht unzulässig
## Phase F – Sicherheitsprüfung
- [ ] Port 8080/8081 an der physischen Hostadresse nicht erreichbar
- [ ] beide Ports über die Fritz-VPN-Adresse erreichbar
- [ ] gestopptes WireGuard-Gateway blockiert Container-Egress
- [ ] Hilfsports nur localhost
- [ ] Router nur aus erlaubtem Netz erreichbar
- [ ] Dienste laufen mit minimalen Rechten
- [ ] Environment-Dateien Modus 0600
- [ ] kein allgemeiner Shell-MCP im Standardprofil; Athena Operator besitzt nur
strukturierte, ticketgebundene Plattformoperationen
- [ ] Schreibaktionen verlangen Vorschau und Approval Ticket
- [ ] Secret-Restore wurde ohne Klartextausgabe durchgeführt
- [ ] verschlüsseltes Recovery-Bundle liegt außerhalb von Athena
- [ ] age-Identität liegt getrennt vom Bundle und nicht auf Athena
## Phase G – Fachlicher Benchmark
Der gespeicherte Standardbenchmark wird mindestens mit Fast und Medium sowie
für Kontextgrenzen zusätzlich mit Large und Ultra sowie mit dem gesonderten
Uncensored-Sicherheitslauf ausgeführt:
- Home-Assistant-Automatisierung analysieren
- Logs lesen und Fehlerursache begründen
- sichere Korrektur vorschlagen
- Webrecherche mit Quellen durchführen
- Docker-/Unraid-Diagnose simulieren
- Tool-Limits, Halluzinationen und unnötige Aufrufe bewerten
Die neue Installation muss innerhalb einer vorher festgelegten Toleranz zur
Referenz liegen. Nur „Dienst läuft“ genügt nicht.
## Recovery-Protokoll
Für jeden Wiederaufbau werden festgehalten:
- Datum
- verwendeter Repository-Commit
- Modellmanifest-Version
- Hardware
- Dauer je Phase
- Abweichungen
- Testergebnis
- verantwortliche Freigabe
Erst nach Abschluss aller Pflichtpunkte darf der alte Host gelöscht oder als
Fallback außer Betrieb genommen werden.
Der ausführbare Ablauf steht in [BARE_METAL_RECOVERY.md](BARE_METAL_RECOVERY.md).