{"queue_id": 67, "relative_path": "Systemstruktur/Hermes-Carlo-Haertungsstand-Phase1-3-2026-07-17.md", "title": "Hermes Carlo – Härtungsstand Phase 1–3", "import_key": "6ccbed9ce426175c3db5740f19cbd206b69a6e2bbbfa3a00f151876fdfc8bc3c", "chunk_count": 13, "created_nodes": 0, "created_relationships": 0, "body": null, "chunks": [{"chunk_key": "a7c7eb60b2abdca47494bdba7c5fc20b54c487f93cba290b93fb9eb90716fa5a", "chunk_index": 0, "heading": "Hermes Carlo – Härtungsstand Phase 1–3", "text": "# Hermes Carlo – Härtungsstand Phase 1–3\n\n**Stand:** 2026-07-17 \n**Geltungsbereich:** bestätigter produktiver Zustand von `hermes-carlo` nach Abschluss der Härtungsphasen 1–3. \n**Führendes Dokument für:** Carlo-Betriebszustand, Backup/Restore, Healthcheck, Netzwerk-/Containerarchitektur, Docker-Socket-Proxy und offene Rechtefragen.", "text_hash": "e9adf09fbe100d605f22443d6e771b0ccf86f743db7b44bff1fb9e6ed16c1ada"}, {"chunk_key": "cfbf5b8d2d9fd13f102f3a52f878d40dc3bc5670f89563be5f552ea7ff55d80d", "chunk_index": 1, "heading": "Produktiver Endstand", "text": "endes Dokument für:** Carlo-Betriebszustand, Backup/Restore, Healthcheck, Netzwerk-/Containerarchitektur, Docker-Socket-Proxy und offene Rechtefragen.\n## Produktiver Endstand\n\n- Carlo läuft mit dem unveränderlichen Image `sha256:30b47c3867aacf1570c964a008589d00ecc5f624513ed8dd2f4cd48ab33d359d`.\n- Der bewegliche Produktivbezug `latest` wird nicht verwendet.\n- Carlo ist `healthy`.\n- Der Docker-Healthcheck prüft `http://127.0.0.1:3000/health`.\n- Die bestehenden Hostbindungen bleiben erhalten und sind erreichbar:\n - `127.0.0.1:3010` – Workspace\n - `127.0.0.1:3014` – Dashboard\n- Die übrigen Ports und Mounts wurden bei Phase 3B V2 unverändert bestätigt.\n- Mari wurde nicht verändert.", "text_hash": "9bd08e5fde7e878e8755a0c9ef71b94cf10582a20d53f0eaaeb9e5a891fe43fc"}, {"chunk_key": "44aa6d623c55a3e17606849eab71a263387adf0589a6d15435dee243bd6c4887", "chunk_index": 2, "heading": "Backup und Restore", "text": " Workspace\n - `127.0.0.1:3014` – Dashboard\n- Die übrigen Ports und Mounts wurden bei Phase 3B V2 unverändert bestätigt.\n- Mari wurde nicht verändert.\n## Backup und Restore\n\nFür Carlo ist die Sicherung `/opt/backups/hermes-carlo/20260712_203529/` als kontrollierte Rollbackbasis dokumentiert.\n\n- Restorebewertung: **A** für die getestete isolierte Wiederherstellung.\n- Integritätsprüfung: bestanden, 0 dokumentierte Archiv-SHA256-Abweichungen.\n- Restore und isolierte Funktionsprobe: erfolgreich.\n- Datenbanken im Restore: lesbar.\n- Nutzung als produktive Rollbackbasis: nur kontrolliert, mit Wartungsfenster, Manifestprüfung und Prüfung der Image-/Compose-Provenienz.\n\nVerbleibende Einschränkungen der Backupdokumentation: kein separates Datei-Manifest im Backupset, ein leeres Legacy-State-Artefakt und keine produktive Wiederherstellung. Secrets sind Bestandteil des geschützten Backupbereichs, werden hier aber nicht übernommen.", "text_hash": "2d870cfa0b3f0e500da7c7499b0a53b7fc35180ffe6b70bdd4c5345f9f76e336"}, {"chunk_key": "8eb17db7b3d9787ecf4c4250bbc6c1cf93fc4852d597f1c0c1a99d2b3b8c9f6c", "chunk_index": 3, "heading": "Healthcheck – Phase 1", "text": "acy-State-Artefakt und keine produktive Wiederherstellung. Secrets sind Bestandteil des geschützten Backupbereichs, werden hier aber nicht übernommen.\n## Healthcheck – Phase 1\n\nDer Healthcheck ist produktiv aktiv. Bestätigt wurden:\n\n- Image-ID vor/nach Umsetzung unverändert.\n- Compose-Validierung erfolgreich.\n- Healthstatus nach Start: `healthy`.\n- Erste erfolgreiche Prüfung: ungefähr 15 Sekunden nach Start.\n- Interne Carlo-Routen und Datenbankprüfungen erfolgreich.\n- Keine Änderung an Ports, Mounts, User, Rechten, Environment oder Restart-Policy durch die Healthcheck-Phase.", "text_hash": "8a13067f5d65fa492242d27617e7a6e4123551317c818c1103b34734af61ca7d"}, {"chunk_key": "65e674a119ec1d80b6ce352928496ae59ee0e7efd94c2f22ffbe384bbc803b9b", "chunk_index": 4, "heading": "Rechte und UID/GID – Phase 2 bewusst verschoben", "text": "ten und Datenbankprüfungen erfolgreich.\n- Keine Änderung an Ports, Mounts, User, Rechten, Environment oder Restart-Policy durch die Healthcheck-Phase.\n## Rechte und UID/GID – Phase 2 bewusst verschoben\n\nDiese Phase ist **nicht gelöst** und wurde **nicht produktiv verändert**.\n\n- Carlo läuft weiterhin als UID/GID `0:0`.\n- Unter `/opt/struktur/hermes-carlo/data` bestehen gemischte Eigentümer `0:0` und `10000:10000`.\n- `UNKNOWN:UNKNOWN` bezeichnet fehlende Namensauflösung für die numerische UID/GID `10000:10000` auf dem Host; es bedeutet nicht automatisch `root:root`.\n- Eine pfadgenaue sichere Eigentümer- oder Rechteänderung ist nicht ausreichend belegt.\n- Eine weitere Analyse ist erforderlich, bevor Rechte oder ein Nicht-root-Betriebsmodell geändert werden.\n\nStatus: **bewusst verschoben / weitere Analyse erforderlich / nicht produktiv verändert**.", "text_hash": "8820437c352c77cb1a5bccd5847fa95e37a43ce08035505292f4935f7fee4605"}, {"chunk_key": "8ae0ad40ddb8f12968f67bacaaf1319305776115dd5621c6ff8be99829d0a15e", "chunk_index": 5, "heading": "Docker-Socket und Funktionsabgleich", "text": "Rechte oder ein Nicht-root-Betriebsmodell geändert werden.\n\nStatus: **bewusst verschoben / weitere Analyse erforderlich / nicht produktiv verändert**.\n## Docker-Socket und Funktionsabgleich\n\nDie isolierte Gegenprobe zeigte:\n\n- Carlo-Kernfunktionen funktionieren ohne direkten Docker-Socket.\n- Socketbezogene optionale Funktionen sind Containerliste, Inspect und Logs; Restart/Exec und andere Schreibpfade werden nicht benötigt.\n- Der direkte Mount `/var/run/docker.sock` ist bei Carlo entfernt.\n- Der Socket ist ausschließlich beim Proxy `carlo-docker-proxy` read-only gemountet.\n- Der Proxy verwendet das unveränderliche Image `sha256:8e815016350497d2154a5fba8919142eab5a064f20e30a63df5580617b4c1c2b`.\n- Der Proxy besitzt keine Hostports.\n- Der Proxy hängt ausschließlich am internen Netz `carlo_socket_proxy_net`.\n- Carlo hängt zusätzlich weiterhin am bisherigen produktiven Netz `hermes-carlo_default`.\n- Carlo verwendet intern `DOCKER_HOST=tcp://carlo-docker-proxy:2375`.\n\nErlaubt sind ausschließlich lesende Abfragen für:\n\n- Containerliste\n- Container-Inspect\n- Containerlogs\n\nBlockiert sind POST sowie Start, Stop, Restart, Exec, Containererstellung, Löschen, Images, Netzwerke und Volumes. Zusätzlich werden Pfadnormalisierungsversuche wie doppelte Schrägstriche, URL-Encoding und Dot-Segmente abgewiesen.", "text_hash": "105751df81018d30710aef011891c2c3ea4eea1cf2a319476cd2978e7a2d624e"}, {"chunk_key": "a10823b1ead53a3b32e36ae3c1b42007aa271f389817f6cecbb464f7b3e5452e", "chunk_index": 6, "heading": "Abgeschlossene Maßnahmen", "text": "en, Images, Netzwerke und Volumes. Zusätzlich werden Pfadnormalisierungsversuche wie doppelte Schrägstriche, URL-Encoding und Dot-Segmente abgewiesen.\n## Abgeschlossene Maßnahmen\n\n1. Belastbare isolierte Carlo-Backup-/Restorebasis mit Bewertung A dokumentiert.\n2. Carlo-Produktivimage unveränderlich per SHA256 festgelegt.\n3. Docker-Healthcheck ergänzt, validiert und produktiv aktiviert.\n4. Tatsächliche Docker-Socket-Funktionen isoliert abgeglichen.\n5. Restriktiver Read-only-Proxy lokal gebaut, unveränderlich referenziert und isoliert getestet.\n6. Proxy-Methoden- und Pfadfilter gegen Schreib- und Normalisierungsumgehungen geprüft.\n7. Direkter Root-Docker-Socket aus Carlo entfernt.\n8. Carlo und Proxy in getrennter Zwei-Netz-Struktur produktiv betrieben.\n9. Hostports, übrige Mounts, Datenbanken und Carlo-Kernrouten nach der Umstellung geprüft.", "text_hash": "711590e313eae2bc553eddd8ba63b56d38c067835775127e91872cdc3a776126"}, {"chunk_key": "b6ce68532fc3f09e29becf3ac1b0c41dc9bb3c044df5b3abb61675d2a114ef63", "chunk_index": 7, "heading": "Bewusst nicht übernommen", "text": "Proxy in getrennter Zwei-Netz-Struktur produktiv betrieben.\n9. Hostports, übrige Mounts, Datenbanken und Carlo-Kernrouten nach der Umstellung geprüft.\n## Bewusst nicht übernommen\n\n- Keine Secrets, Tokens, API-Schlüssel oder Environmentwerte.\n- Keine Rohdialoge oder vollständigen Logauszüge.\n- Keine Phase-4-Änderungen an Ports, Firewall oder weiterer Netzwerkfreigabe.\n- Keine Rechte-, UID-, GID- oder Eigentümeränderung.\n- Keine Graphiti-/Neo4j-Befüllung.", "text_hash": "1382fda3b2d9f0ba7523804409c70f6ffcd50bd1e922b1d5a017796d1bd64407"}, {"chunk_key": "73851489ede8dcbdcba5cf87d1993b8cc988e96cd1a7b33e31457e6e04848c84", "chunk_index": 8, "heading": "Nächste Entscheidung", "text": "-Änderungen an Ports, Firewall oder weiterer Netzwerkfreigabe.\n- Keine Rechte-, UID-, GID- oder Eigentümeränderung.\n- Keine Graphiti-/Neo4j-Befüllung.\n## Nächste Entscheidung\n\nVor einer möglichen Phase 4 ist zuerst zu entscheiden, ob zusätzliche Port- oder Netzwerkhärtung trotz der bestehenden lokalen Bindungen erforderlich ist. Die Rechte-/UID-/GID-Frage bleibt unabhängig davon offen und darf nicht als erledigt gelten.", "text_hash": "1571681fdf8bfa4a667a636eac9049ab7b0753f3263271b26bec2407b4597adc"}, {"chunk_key": "e2286edfb1adec52eef61cb48cf8d7fd30a9c8b30e7165d3374d2d0306b4e479", "chunk_index": 9, "heading": "Quellen", "text": "trotz der bestehenden lokalen Bindungen erforderlich ist. Die Rechte-/UID-/GID-Frage bleibt unabhängig davon offen und darf nicht als erledigt gelten.\n## Quellen\n\n- `/opt/struktur/hermes-workspace/reports/Carlo-Backup-Restoreprobe-Abschlussbericht.md`\n- `/opt/struktur/hermes-workspace/reports/Carlo-Healthcheck-Phase1-Abschlussbericht-V2.md`\n- `/opt/struktur/hermes-workspace/reports/Carlo-Rechte-UID-GID-Phase2-Abschlussbericht.md`\n- `/opt/struktur/hermes-workspace/reports/Carlo-Docker-Socket-Nutzungsanalyse.md`\n- `/opt/struktur/hermes-workspace/reports/Carlo-Docker-Socket-Funktionsabgleich.md`\n- `/opt/struktur/hermes-workspace/reports/Carlo-Docker-Socket-Proxy-Phase3A-Vorbereitung.md`\n- `/opt/struktur/hermes-workspace/reports/Carlo-Docker-Socket-Proxy-Phase3B-V2-Abschlussbericht.md`", "text_hash": "af3b8173491cf2fb25e7116cba00ab0e6f87bd7f2aa170f08e39848a68554e2a"}, {"chunk_key": "c89feb2ab703cb0f8180f270009d890369530c8a1a874b1443e47c1a35381b3d", "chunk_index": 10, "heading": "Änderungsgrenzen", "text": "Carlo-Docker-Socket-Proxy-Phase3A-Vorbereitung.md`\n- `/opt/struktur/hermes-workspace/reports/Carlo-Docker-Socket-Proxy-Phase3B-V2-Abschlussbericht.md`\n## Änderungsgrenzen\n\n- Phase 4 ausgeführt: nein.\n- Technische Produktivänderung durch diese Dokumentationsaufgabe: nein.\n- Carlo oder Mari durch diese Dokumentationsaufgabe verändert: nein.\n- Graphiti-/Neo4j-Befüllung: nein.", "text_hash": "bc976163426e29bfb547ca9f258961b58353e56391f58821c99307fedc6d8758"}, {"chunk_key": "5ff5c75d5d64dc9161013ac3b3fb74d230b0c3891c7cfcdd6999160f29fceb92", "chunk_index": 11, "heading": "Phase 4 – Route und Listener (bestätigter Stand 2026-07-17)", "text": "erung durch diese Dokumentationsaufgabe: nein.\n- Carlo oder Mari durch diese Dokumentationsaufgabe verändert: nein.\n- Graphiti-/Neo4j-Befüllung: nein.\n## Phase 4 – Route und Listener (bestätigter Stand 2026-07-17)\n\n- Die nginx-Route `hermes-carlo.agentsolutions-mallorca.com` ist weiterhin ohne Basic-Auth-Abfrage; die aktuelle Konfiguration ist bytegleich zur Sicherung vor dem Phase-4-Versuch.\n- Verifiziert: Carlo `healthy`, Hostport 3010 und Hostport 3014 erreichbar, unauthentifizierte HTTPS-Route HTTP 200.\n- `carlo.workspace.agentsolutions-mallorca.com` bleibt unverändert und leitet auf `https://cockpit-carlo.agentsolutions-mallorca.com/` weiter.\n- Listener `127.0.0.1:8645` gehört zu `docker-proxy` für `hermes-gateway` (Containerport 8000), fachlich Hermes Gateway/API; in dieser Session unverändert.", "text_hash": "c929236c9f0dd63fbd63eec282cf8cb787389e7b4ded2e24e137c9f54c547bae"}, {"chunk_key": "835e3cf590485a5ff6bd941ba8bb1dd9a2f760f42ef403de45fb56115000039b", "chunk_index": 12, "heading": "Konkrete Basic-Auth-Erfahrung", "text": "tener `127.0.0.1:8645` gehört zu `docker-proxy` für `hermes-gateway` (Containerport 8000), fachlich Hermes Gateway/API; in dieser Session unverändert.\n### Konkrete Basic-Auth-Erfahrung\n\nDer Versuch, diese konkrete Carlo-Route vorgelagert mit Basic Auth zu schützen, führte unauthentifiziert zu HTTP 401 und wiederholten Login-Abfragen und war für die getestete WebSocket-/Streaming-Struktur ungeeignet. Die Änderung wurde zurückgenommen beziehungsweise ihr Rücknahmezustand verifiziert. Diese Erfahrung ist routenspezifisch; Basic Auth ist nicht generell bewertet.", "text_hash": "2ccf0d9ae983a28a84013a4898dfc0be85715441f9ab400ecd5cc3d01609393c"}], "elapsed_s": 0.03}