# SYSTEM-MAP – Hermes / Mallorca AirServices / AgentSolutions
**Stand:** 2026-07-06 (Erhebung rein lesend durch Scout)
**Status:** ENTWURF — von Carlo noch nicht final abgenommen
---
## 1. Zweck dieser Datei
- **Single Source of Truth** fuer den realen Systemstand des VPS (31.70.68.228, agentsolutions-mallorca.com).
- Die lokale K:-Dokumentation (K:\Master, K:\projekte-AG, K:\projekte-LP) ist **sekundaer** und teils veraltet (siehe Abschnitt 6).
- **Neue Agenten-Sessions lesen zuerst diese Datei**, bevor sie Annahmen ueber das System treffen.
- Aenderungen am System nur nach explizitem Freigabeprotokoll ("Ja, ausfuehren" von Carlo).
---
## 2. Grundstruktur
- **VPS-Basis:** /opt/struktur/ (~60 Verzeichnisse), Zugriff als root via SSH (Scout: Alias vps)
- **Runner-Infrastruktur:** /opt/struktur/runners/ (run-batch.sh, run-youtube-research.sh, run-graphiti-import.sh, run-obsidian-write.sh), Logs unter /opt/struktur/logs/runners/, Reports unter /opt/struktur/reports/
- **Reverse Proxy:** nginx, ~30 Subdomains unter *.agentsolutions-mallorca.com, SSL via Certbot
- **Tailscale:** aktiv (100.112.250.41), nginx bindet zusaetzlich 8010/8011 nur auf der Tailscale-IP
### Aktive systemd-Dienste (Stand Erhebung)
carlo-dashboard (5053), case-intake (8651), content-extraction (8100), dashboard, explorer, filebrowser (5060), hermes-admin (9099/reset), hermes-root (Gateway), hermes-root-dashboard (9119), mari-dashboard (5054), nginx, persona-editor-carlo (5055), persona-editor-mari (5056), persona-editor-workspace (5057), portal (5052), projects-dashboard, youtube-research (FastAPI), docker/containerd, tailscaled.
### Aktive Docker-Container (20)
n8n (5678), graphiti-neo4j, graphiti-service (8644), mirofish + mirofish-neo4j, portainer (9000), couchdb (5984), hermes-carlo (3010/3014), hermes-mari-v2 (3011), sma-v2 (3200->3000), ollama (11434), hermes-gateway (8645), docker-paperclip-1 (3100/3101), obsidian (3103), vento (8650), vento-redis, watchtower, lead-engine (3300->8501), **test_container, test_import3 (Zweck unklar — pruefen)**.
### Datenbanken (Auswahl, verifiziert)
| DB | Pfad | Gehoert zu |
|---|---|---|
| knowledge.db | /opt/struktur/youtube-research/ | YouTube Research (SQLite-Hauptdatenbank) |
| app.db, cases.db | /opt/struktur/social-media-agent-v2/db/ | Social Media Agent v2 |
| posts.db, cases.db | /opt/struktur/social-media-agent/ | SMA v1 (Altbestand) |
| email_agent.db | /opt/struktur/lead-engine/ | Lead Engine |
| cases.db | /opt/struktur/case-intake/data/ | Case Intake |
| content_extraction.db | /opt/struktur/content-extraction/data/ | Content Extraction |
| signals.db, radar.db | /opt/struktur/social-media-radar/ | Social Media Radar |
| state/kanban/response_store.db | hermes-core, hermes-carlo, hermes-werkstandard, hermes-workspace-agent-data | Hermes-Instanzen |
| health.db | /opt/struktur/provider-health/ | Provider-Health |
| Neo4j (Graph) | Container graphiti-neo4j + mirofish-neo4j | Graphiti / Mirofish |
| CouchDB | Container couchdb (5984, localhost) | Zuordnung pruefen |
---
## 3. Projektuebersicht
### Social Media Agent v2
- **Pfad:** /opt/struktur/social-media-agent-v2/ | **Container:** sma-v2 (3200->3000)
- **Status:** aktiv (Container laeuft seit Wochen)
- **Technik:** Node.js/Express, better-sqlite3, Anthropic SDK + OpenAI SDK
- **Subdomain:** social.agentsolutions-mallorca.com vorhanden — Proxy-Ziel noch zu verifizieren
- **DB:** db/app.db, db/cases.db
- **Zweck:** KI-gestuetzte Generierung von Social-Media-Content (v2 des LP-PostGen)
- **Aussenkontakt:** ja (Veroeffentlichung von Content) | **Freigabe notwendig:** JA
- **Risiken:** keine zentrale Freigabe-Queue; v1 liegt parallel unter /opt/struktur/social-media-agent/ (Redundanz)
- **Naechster Schritt:** Anbindung an gemeinsame Freigabe-Queue (Abschnitt 4); Abgrenzung zu v1 klaeren
### Vento
- **Pfad:** /opt/struktur/vento/ | **Container:** vento (8650) + vento-redis
- **Status:** aktiv
- **Technik:** Python, Docker, Redis; n8n-Anbindung (Unterordner n8n/)
- **Subdomain:** vento.agentsolutions-mallorca.com
- **Zweck:** WhatsApp-Assistent (LP-Pilot, perspektivisch B2B-Produkt)
- **Aussenkontakt:** ja (Kundenkommunikation WhatsApp) | **Freigabe notwendig:** JA
- **Risiken:** Kundenkommunikation ohne dokumentierte Freigabeschicht
- **Naechster Schritt:** Freigabe-/Eskalationslogik dokumentieren und pruefen
### Lead Engine
- **Pfad:** /opt/struktur/lead-engine/ | **Container:** lead-engine (3300->8501)
- **Status:** aktiv
- **Technik:** Python 3.13, Streamlit-Dashboard, OpenAI-LLM-Router, DuckDuckGo-Discovery
- **Subdomain:** leads.agentsolutions-mallorca.com
- **DB:** email_agent.db
- **Zweck:** B2B-Lead-Enrichment (aktive Kampagne: LueftungsProfi, ICP=LP). Laut eigener Doku: "Kein Email-Versand. Kein Agent. Nur Daten."
- **Aussenkontakt:** nein (reiner Datendienst; Outreach-Konzepte liegen nur als Doku vor)
- **Freigabe notwendig:** nein fuer Enrichment; JA sobald Outreach aktiviert wuerde
- **Risiken:** OUTREACH.md / OUTREACH_AGENT_KONZEPT.md vorhanden — Aktivierung nur mit Freigabe-Queue
- **Naechster Schritt:** unveraendert lassen; bei Outreach-Entscheidung zuerst Freigabe-Queue
### YouTube Research
- **Pfad:** /opt/struktur/youtube-research/ | **Dienst:** youtube-research.service (FastAPI)
- **Status:** aktiv
- **Technik:** Python/FastAPI, SQLite (knowledge.db), Runner run-youtube-research.sh
- **Subdomain:** youtube.agentsolutions-mallorca.com
- **Zweck:** Video-/Transkript-Datenbank als Wissens- und Skill-Quelle
- **Aussenkontakt:** nein | **Freigabe notwendig:** nein
- **Risiken:** bekannter Watchlist-to-Library-Bug (BUG-BACKLOG.md); im Ordner liegt ein Artefakt-Verzeichnis "K:" (Pfad-Unfall — pruefen)
- **Naechster Schritt:** Bug-Backlog sichten, Artefakt "K:" klaeren
### Content Extraction
- **Pfad:** /opt/struktur/content-extraction/ | **Dienst:** content-extraction.service (8100)
- **Status:** aktiv, intern read-only (laut Service-Beschreibung)
- **Technik:** Python/Flask, SQLite, venv
- **Subdomain:** content-extraction.agentsolutions-mallorca.com — **mit Basic Auth**
- **Zweck:** interne Analyse von YouTube-Research-Kandidaten
- **Aussenkontakt:** nein | **Freigabe notwendig:** nein
- **Risiken:** gering | **Naechster Schritt:** keiner noetig
### Case Intake (Mallorca AirServices)
- **Pfad:** /opt/struktur/case-intake/ | **Dienst:** case-intake.service (8651)
- **Status:** aktiv
- **Technik:** Python, SQLite (data/cases.db), Uploads
- **Subdomain:** case.agentsolutions-mallorca.com
- **Zweck:** Fallaufnahme fuer LueftungsProfi-Kunden (Feuchte/Schimmel-Faelle)
- **Aussenkontakt:** ja (Kunden geben Daten ein) | **Freigabe notwendig:** ja fuer ausgehende Antworten
- **Risiken:** **Port 8651 lauscht auf 0.0.0.0 — direkt an nginx vorbei erreichbar (pruefen)**; Kundendaten in cases.db -> Datenschutz/Backup
- **Naechster Schritt:** Bind auf 127.0.0.1 pruefen (nur nach Freigabe)
### Portal
- **Pfad:** /opt/struktur/portal/ | **Dienst:** portal.service (5052)
- **Status:** aktiv
- **Technik:** Python/Flask
- **Subdomain:** agentsolutions-mallorca.com (Hauptdomain) — **mit Basic Auth**
- **Zweck:** Master-Portal / Einstieg, inkl. Button "Scout starten" (localhost:5099 lokal bei Carlo)
- **Aussenkontakt:** nein (internes Werkzeug) | **Freigabe notwendig:** nein
- **Risiken:** .bak-Dateien im Codeverzeichnis statt Versionskontrolle
- **Naechster Schritt:** Kandidat fuer Erweiterung um Freigabe-Queue-Modul
### Cockpit Carlo
- **Dienst:** carlo-dashboard.service (5053) + persona-editor-carlo (5055) + hermes-admin (9099/reset)
- **Status:** aktiv
- **Subdomain:** cockpit-carlo.agentsolutions-mallorca.com
- **Zweck:** Steuer-/Uebersichts-Dashboard fuer die Carlo-Instanz
- **Aussenkontakt:** nein | **Freigabe notwendig:** nein
- **Risiken:** **Port 5053 lauscht auf 0.0.0.0 — direkt an nginx vorbei erreichbar (pruefen)**; kein auth_basic in nginx-Site erkennbar (App-eigene Auth pruefen)
- **Naechster Schritt:** Auth-Status lesend verifizieren
### Cockpit Mari
- **Dienst:** mari-dashboard.service (5054) + persona-editor-mari (5056)
- **Status:** aktiv
- **Subdomain:** cockpit-mari.agentsolutions-mallorca.com
- **Zweck:** Pendant zu Cockpit Carlo fuer die Mari-Instanz
- **Aussenkontakt:** nein | **Freigabe notwendig:** nein
- **Risiken:** wie Cockpit Carlo (Auth-Status unklar)
- **Naechster Schritt:** Auth-Status lesend verifizieren
### Projects Dashboard
- **Pfad:** /opt/struktur/projects-dashboard/ | **Dienst:** projects-dashboard.service
- **Status:** aktiv
- **Subdomain:** projects.agentsolutions-mallorca.com — **mit Basic Auth**
- **Zweck:** Projektuebersicht Agent Solutions
- **Aussenkontakt:** nein | **Freigabe notwendig:** nein
- **Risiken:** mehrere .bak-Dateien im Codeverzeichnis
- **Naechster Schritt:** keiner dringend
### Hermes Root / Root Dashboard
- **Dienste:** hermes-root.service (Gateway 9119), hermes-root-dashboard.service
- **Status:** RESERVE laut Doku (HERMES-SCOUT-VPS.md: Batchbetrieb inaktiv, ersetzt durch Scout) — **laeuft aber weiter; bewusster Standby? pruefen**
- **Subdomain:** hermes-root.agentsolutions-mallorca.com
- **Zweck:** Fallback, falls Scout-SSH ausfaellt
- **Aussenkontakt:** nein | **Freigabe notwendig:** entfaellt
- **Risiken:** oeffentlich erreichbarer Reserve-Dienst ohne aktive Pflege
- **Naechster Schritt:** Entscheidung Carlo: echter Standby (stoppen) oder aktiv lassen
### Weitere Hermes-Instanzen (Kurzform)
- **hermes-carlo** (Container, 3010/3014, carlo.agent.*): aktiv — Agent-Instanz Carlo
- **hermes-mari-v2** (Container, 3011): aktiv — Agent-Instanz Mari
- **hermes-gateway** (Container, 8645): aktiv — Zweck/Abgrenzung zum hermes-root-Gateway pruefen
- **hermes-core / hermes-werkstandard / hermes-workspace\*** (Verzeichnisse mit state/kanban-DBs): Zuordnung aktiv/Altbestand pruefen
### Graphiti / Neo4j
- **Container:** graphiti-service (8644) + graphiti-neo4j; Pfad /opt/struktur/graphiti/
- **Status:** aktiv (healthy)
- **Subdomain:** graphiti.agentsolutions-mallorca.com; neo4j.agentsolutions-mallorca.com — **mit Basic Auth**
- **Zweck:** Wissensgraph (Episoden-Import via Runner)
- **Aussenkontakt:** nein | **Freigabe notwendig:** nein
- **Risiken:** **Bolt-Port 7687 auf oeffentlicher IP gebunden (nginx-Stream) + stunnel 7688 auf 0.0.0.0 — Absicherung pruefen**; zweite Neo4j-Instanz (mirofish-neo4j) parallel -> Redundanz
- **Naechster Schritt:** Bolt-Exposition lesend pruefen (Task Security-Review)
### n8n
- **Container:** n8n (127.0.0.1:5678) | **Subdomain:** n8n.agentsolutions-mallorca.com
- **Status:** aktiv
- **Zweck:** Workflow-Automation (u.a. Vento-Anbindung). Achtung: Mario betreibt zusaetzlich eigenes n8n auf automation.mhdx.de — Abgrenzung dokumentieren
- **Aussenkontakt:** je nach Workflow | **Freigabe notwendig:** ja fuer Workflows mit Aussenwirkung
- **Risiken:** Workflows nicht inventarisiert
- **Naechster Schritt:** Workflow-Inventar lesend erstellen
### Ollama
- **Container:** ollama (11434, nur containerintern) | **Status:** aktiv
- **Zweck:** lokale LLM-Inferenz | **Aussenkontakt:** nein | **Risiken:** gering (nicht publiziert)
### LiteLLM (legacy)
- **Pfad:** /opt/struktur/litellm/ (config.yaml, docker-compose.yml) | **Kein laufender Container**
- **Status:** reserve/legacy — Subdomain litellm.agentsolutions-mallorca.com existiert aber noch in nginx
- **Risiken:** tote Subdomain-Konfiguration | **Naechster Schritt:** bei Security-Review mit erfassen
### CouchDB
- **Container:** couchdb (127.0.0.1:5984) | **Status:** aktiv, Zuordnung unklar — **pruefen, wer sie nutzt**
### Obsidian
- **Container:** obsidian (3103) | **Vault:** /opt/obsidian-vault/ (u.a. YouTube-Research-Artefakte via Runner)
- **Status:** aktiv | **Subdomain:** notes.agentsolutions-mallorca.com | **Aussenkontakt:** nein
### Filebrowser / Explorer
- **Dienste:** filebrowser.service (5060), explorer.service | **Subdomain:** explorer.agentsolutions-mallorca.com
- **Status:** aktiv
- **Risiken:** **lauscht auf allen Interfaces (*:5060) — direkt an nginx vorbei erreichbar; Admin-Werkzeug mit Dateivollzugriff -> Auth-Status pruefen**
### Portainer
- **Container:** portainer (127.0.0.1:9000) | **Subdomain:** portainer.agentsolutions-mallorca.com
- **Status:** aktiv | **Risiken:** Admin-Werkzeug mit Docker-Vollzugriff hinter nginx — Auth-Status pruefen
### Tailscale
- **Dienst:** tailscaled, IP 100.112.250.41 | **Status:** aktiv
- **Zweck:** privates Overlay-Netz; nginx bindet 8010/8011 nur auf die Tailscale-IP (gute Praxis)
### Watchtower
- **Container:** watchtower | **Status:** aktiv
- **Zweck:** automatische Container-Updates
- **Risiken:** ungeplante Auto-Updates koennen produktive Container aendern — bewusst so gewollt? pruefen
---
## 4. Kommunikations- und Freigabeprinzip (Zielregel)
1. **Datendienste** (YouTube Research, Content Extraction, Lead Engine, Social Media Radar) erzeugen **keine Aussenkommunikation**.
2. **Erzeugungsdienste** (Social Media Agent v2, Vento, perspektivisch Telefon Agent) erzeugen **Entwuerfe**, keine direkten Veroeffentlichungen.
3. **Kundenkommunikation und Veroeffentlichung benoetigen im MVP eine menschliche Freigabe** durch Carlo — ohne Ausnahme.
4. Social Media Agent v2, Vento und Telefon Agent sollen perspektivisch eine **gemeinsame Freigabe-Queue** nutzen (Kandidat: Modul im Portal). Erst nach deren Existenz darf ueber weitergehende Automatisierung entschieden werden.
---
## 5. Sicherheitsnotizen (nur Dokumentation, keine Aenderung erfolgt)
- **Direkt extern offene Ports an nginx vorbei (0.0.0.0 / *):** 5053 (carlo-dashboard), 8651 (case-intake), 8652 (python3 — **Dienst unklar**), 3050 (node — **Dienst unklar**), 5060 (filebrowser), 7688 (stunnel), 7687 (Neo4j Bolt via nginx auf oeffentlicher IP). Erwartbar offen: 22, 80, 443.
- **Basic Auth in nginx verifiziert bei:** Hauptdomain (Portal), content-extraction, mirofish, neo4j, projects, reports.
- **Ohne nginx-Auth (App-eigene Auth ungeprueft):** u.a. cockpit-carlo, cockpit-mari, case, vento, social, youtube, leads, n8n, portainer, explorer, notes.
- **Admin-Werkzeuge oeffentlich hinter nginx:** Portainer, n8n, Filebrowser/Explorer, Neo4j-Browser (mit Auth), Graphiti.
- **Zombie-/Test-Container:** test_container, test_import3 (laufen seit Tagen, Zweck unbekannt).
- **Unklare Dienste:** Prozesse auf 8652 und 3050; hermes-gateway vs. hermes-root-Gateway; CouchDB-Nutzer.
- **Dienste mit Aussenkontakt:** Vento (WhatsApp), SMA v2 (Social-Publishing), Case Intake (Kundeneingaben), Lead Engine nur potenziell (Outreach inaktiv).
- **Watchtower:** automatische Updates laufender Container — Aenderungsquelle ausserhalb des Freigabeprozesses.
---
## 6. Dokumentations-Drift (lokale K:-Doku)
| Dokument | Problem | Soll kuenftig |
|---|---|---|
| K:\Master\CLAUDE.md | verweist auf IDEEN-MASTER.md, STRATEGIE.md, INFRASTRUKTUR.md, K:\SYNC\ — existieren alle nicht | auf SYSTEM-MAP.md verweisen |
| K:\projekte-AG\CLAUDE.md | beschreibt ~18 Projektordner, real vorhanden: 3; email_agent/, telefon_agent/, The-Donna/ usw. existieren dort nicht mehr; K:\SYNC\intercom.md existiert nicht | kuerzen, Stoppgebot behalten, Rest auf SYSTEM-MAP.md verweisen |
| K:\Master\EOZ.md (2026-05-08) | beschreibt NAS-Struktur (Projekte-LP\, Core\, SYNC\, Historie\), die so nicht mehr existiert | als historisch markieren |
| K:\Master\HERMES-SCOUT-VPS.md (2026-06-29) | weitgehend aktuell (SSH, Runner, Pfade) | bleibt gueltig, ergaenzt um Verweis hierher |
| Falsche Pfade | K:\SYNC\, K:\CORE\GEBOTE.md, K:\CORE\AG-CONTEXT\ — nicht auffindbar | aus Doku entfernen |
Aenderungen an diesen Dateien erfolgen **erst nach Backup und Freigabe** (Abschnitt 8, Task 4).
---
## 7. Offene Punkte
- [ ] **Telefon Agent:** weder auf VPS noch unter K:\projekte-AG auffindbar — Verbleib klaeren (archiviert? bei Mario?)
- [ ] **Social-Media-Cockpit:** Zuordnung unklar (cockpit-*-Dashboards vs. social.*-Subdomain vs. eigenes Produkt)
- [ ] **hermes-root:** Reserve laut Doku, laeuft aber — bewusster Standby oder stoppen?
- [ ] **VPS-Backup/Snapshot:** nicht verifiziert — vor jeder Aenderung Punkt 0
- [ ] **VPS-SECURITY.md** (/opt/struktur/VPS-SECURITY.md) gegen Ist-Zustand pruefen (lesend)
- [ ] **Zentrale Freigabe-Queue fehlt** (Abschnitt 4)
- [ ] Unbekannte Prozesse auf Ports 8652 und 3050 identifizieren
- [ ] Zuordnung CouchDB, hermes-gateway, hermes-core/werkstandard/workspace klaeren
- [ ] on-hold-Ordner (Facebook/LinkedIn Content+Research, Nachbarschafts Hilfe, Nachlass-Organizer, SMA-Altstaende) — Status bestaetigen
- [ ] Artefakt-Verzeichnis "K:" in /opt/struktur/youtube-research/ klaeren
---
## 8. Empfohlene naechste Tasks (nach Risiko sortiert)
1. **SYSTEM-MAP.md final abnehmen** (dieses Dokument reviewen, Status ENTWURF entfernen) — Risiko: keins
2. **VPS-SECURITY.md lesend gegen Ist-Zustand pruefen** (inkl. Ports 8652/3050, Bolt 7687, Filebrowser 5060) — Risiko: keins (nur lesen)
3. **Zombie-Container stoppen** (test_container, test_import3) — nur nach Freigabe; Rollback: docker start
4. **Lokale CLAUDE.md-Dateien korrigieren** — nur nach Backup + Freigabe; Rollback: Backup-Kopien
5. **Konzept gemeinsame Freigabe-Queue ausarbeiten** (Portal-Modul; SMA v2 + Vento + spaeter Telefon Agent) — reines Konzeptpapier, Risiko: keins
---
*Erhoben und erstellt: 2026-07-06, Scout (rein lesende Bestandsaufnahme; einzige Schreibaktion: Anlage dieser Datei)*
---
## 9. NACHTRAG 2026-07-07 — Security-Fix G1–G5 (ENTWURF)
**Alle in Abschnitt 5 genannten Direkt-Binds sind behoben.** Details: `/opt/struktur/reports/security-fix-g1-g5-20260707.md`
- **Firewall:** ufw **active** seit 2026-07-06 — inbound nur 22/80/443 + tailscale0; Fremdregeln 18789/3001 entfernt.
- **Binds geschlossen:** 8651 case-intake, 5053 carlo-dashboard, 8652 SMA v1 → 127.0.0.1 (app-Bind); 5060 filebrowser → 127.0.0.1 (systemd-Drop-in); 7687 Bolt-Stream → Tailscale-IP.
- **Gestoppt:** 3050 ingest-service (Altlast, Code bleibt liegen), 7688 stunnel-Waise (Config bleibt liegen).
- **Aufgeklaert:** 8652 = SMA v1 (wird noch sporadisch ueber sma.* genutzt, v1/v2-Klaerung offen); 3050 = ingest-service (OpenAI/Airtable-Experiment vom 15.05., ungenutzt).
- **Backups:** `/root/backups/security-fix-20260706_172733/` + `.bak_<ts>`-Dateien neben jeder geaenderten Datei.
**Offene Punkte aktualisiert:** Abschnitt 7 bleibt gueltig ausser: „Unbekannte Prozesse 8652/3050" = ERLEDIGT (identifiziert), „VPS-SECURITY.md pruefen" = ERLEDIGT (Nachtrag ergaenzt). Weiterhin offen: Hoster-Snapshot/Backup-Strategie (prio 1), Subdomain-Auth, Watchtower, SMA v1/v2, filebrowser-Root `/`, K:-Doku-Drift, Telefon-Agent-Verbleib, hermes-root-Status, Freigabe-Queue.
---
## 10. NACHTRAG 2026-07-07 — Auth-Security H2a–H2d (ENTWURF)
**16 Subdomains auth-abgesichert.** Details: `/opt/struktur/reports/auth-security-h2a-h2d-20260707.md`
- **Basic Auth ganze Site** (`/etc/nginx/.htpasswd`): vpshost, vpsverwaltung, ki-automation (H2a); cockpit-carlo, cockpit-mari, carlo.agent, hermes-root (H2b, server-Kontext → deckt Sonderlocations wie /admin/reset-jobs); youtube, leads, social, sma (H2c); portainer, graphiti, paperclip (H2d).
- **Route-scoped** (H2d): case → /cases, /api/cases*, /api/stats geschuetzt, Kundenformular / + /submit offen; notes → nur /_utils (Fauxton) geschuetzt, CouchDB-Daten-API offen (hermes-mari-Abhaengigkeit).
- **Bewusst unveraendert:** n8n (eigener App-Login + externe Webhooks).
- **Backups:** `.bak_2026070*` neben jeder Site; cockpit-mari-Backup nach `/root/backups/` verschoben (nginx laedt sites-enabled/* inkl. .bak).
**Offene Punkte (Abschnitt 7 bleibt gueltig), aktualisiert:** „Subdomain-Auth" = weitgehend ERLEDIGT. Weiterhin offen: Hoster-Snapshot/Backup-Strategie (Prio 1), Watchtower-Autoupdates, SMA v1/v2, filebrowser-Root, n8n-Webhook/Auth-Konzept, tote Subdomains, K:-Doku-Drift.