From 9c6dc011c39fa6fefd0a60c1e30f17cd67962d28 Mon Sep 17 00:00:00 2001 From: bolbol Date: Wed, 26 Aug 2026 18:54:31 +0000 Subject: [PATCH] docs: ajout runbook reduction hermes-hub en dispatcher et stabilisation DSH --- ...switcher-hub-stabilisation-dsh-20260826.md | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 common/decommission-switcher-hub-stabilisation-dsh-20260826.md diff --git a/common/decommission-switcher-hub-stabilisation-dsh-20260826.md b/common/decommission-switcher-hub-stabilisation-dsh-20260826.md new file mode 100644 index 0000000..0e30233 --- /dev/null +++ b/common/decommission-switcher-hub-stabilisation-dsh-20260826.md @@ -0,0 +1,64 @@ +# Réduction Hermes Hub en Dispatcher Minimal & Stabilisation DSH (Historique, WebSockets, Mémoire) + +**Date** : 26 août 2026 +**Auteur** : Gemini AntiGravity (sur brief Claude v2) +**Tags** : hermes-hub, dsh, vps, tailscale, cloudflare-access, websocket-downlink, history-fix, nyora-notes, memory, runbook +**Statut** : validé et vérifié en direct sur VPS Contabo et NAS DS920+ + +--- + +## 1. Contexte & Topologie + +Nabil a validé l'architecture cible suivante : +- **Hermes (tt / nyora / perso / nabil)** : Accessible exclusivement via Telegram (canal unifié et étanche pour les 4 agents). +- **DeepSeek Harness (DSH)** : `https://dsh-hub.yesminedor.tn/` et `https://files-hub.yesminedor.tn/` restent les outils de dépannage rapide et gestion de fichiers. +- **hub.yesminedor.tn** : L'interface Switcher Multi-Univers et la base de chat locale sont supprimées. + +### Découverte technique critique +L'inspection du tunnel Cloudflare (`700c0fe6-2b2c-4e1a-abfa-3f94f2f7c909.cfargotunnel.com`) et de `cloudflared-mcp-vps` a confirmé que tous les hostnames `*.yesminedor.tn` partagent le même tunnel CNAME et sont routés vers l'origine locale `127.0.0.1:8088` (`hermes-hub`). +Supprimer totalement `hermes-hub` aurait coupé l'accès externe à `dsh-hub` et `files-hub`. La solution retenue a donc consisté à **réduire `hermes-hub` à son strict rôle de reverse-proxy / dispatcher Host-based**, sans état ni UI de chat. + +--- + +## 2. Cause Racine & Résolution du Bug d'Historique/Settings DSH + +### Diagnostic factuel +L'erreur UI "Loading the provider directory failed: settings are unavailable in this browser" provenait de l'échec d'initialisation de `describeFace.getSnapshot()`. +Les causes racines identifiées et résolues en direct : +1. **Downlink-only WebSockets** : Les canaux `/api/events.mux` et `/api/events.host` de DSH sont des flux descendants unidirectionnels. Le pont WebSocket précédent transmettait des frames ou utilisait des pings agressifs provoquant une fermeture par DSH (`code 1008: downlink only`). Le nouveau pont passif (`ping_interval=None`, filtrage montant) maintient les connexions ouvertes en continu. +2. **Browser Trust Fence DSH** : Le harness DSH vérifie par défaut l'en-tête `Host` contre une liste stricte de loopback (`localhost:3080`). L'ajout des arguments `--trusted-host dsh-hub.yesminedor.tn --trusted-host 100.94.90.119:8900 --trusted-host contabo-vps-qbt.tailcbbf70.ts.net:8900 --trusted-host dsh-vps:3080` dans la commande de lancement `dsh web` valide nativement la sécurité RPC sans rejet HTTP 403. +3. **MCP FailOnStartup** : Le bloc `mcp-contexthub` dans `cordis.patch.yml` a été basculé en `failOnStartupError: false` pour interdire tout blocage d'amorçage. + +--- + +## 3. Mémoire Persistante & Identité Nabil dans NyoraNotes + +- **Intégration NyoraNotes** : Le plugin first-party `@deepseek-ai/dsh-mcp-client` est opérationnel dans le profil web DSH. +- **Note d'identité** : Création de la note initiale de cadrage dans `vault/dsh/identite-nabil-preferences-cadre-dsh.md` : + - Identité : Nabil, Responsable Achats Zone Sud Tunisie Telecom (Sfax) & Fondateur Nyora. + - Forme : Français direct, accents soignés, exclusion stricte des tics de langage IA. + - Périmètre : Dépannage rapide et ajustements d'outils, sans données confidentielles TT ni données privées/santé. +- **Réindexation** : Validée sur l'instance NyoraNotes (486 notes synchronisées sans erreur). + +--- + +## 4. Autonomie DSH & Permissions + +- **Preset interne** : `permission.defaultPreset: danger-full-access` configuré dans `settings.yaml` au niveau du bac à sable conteneurisé. +- **Accès sortant** : Périmètre Gitea sécurisé en attente de définition des dépôts cibles par Nabil. + +--- + +## 5. Matrice de Vérification en Direct + +| Composant | Commande de test | Résultat constaté | Statut | +|-----------|------------------|-------------------|--------| +| `hermes-hub` Dispatcher | `curl -i http://127.0.0.1:8088/` | `HTTP/1.1 410 Gone` (Switcher supprimé) | ✅ Conforme | +| `dsh-hub` HTTP Proxy | `curl -i -H 'Host: dsh-hub.yesminedor.tn' http://127.0.0.1:8088/` | `HTTP/1.1 200 OK` | ✅ Conforme | +| `files-hub` HTTP Proxy | `curl -i -H 'Host: files-hub.yesminedor.tn' http://127.0.0.1:8088/` | `HTTP/1.1 200 OK` | ✅ Conforme | +| `dsh` WebSockets Mux | `test_ws (/api/events.mux)` | `SUCCESS mux connected!` | ✅ Conforme | +| `dsh` WebSockets Host | `test_ws (/api/events.host)` | `SUCCESS host connected!` | ✅ Conforme | +| `dsh` RPC describe | `POST /api/host.describe` | `{"ok": true, "version": "0.0.1"}` | ✅ Conforme | +| Hermes Telegram (4 instances) | `hermes-nabil` (VPS) + TT/Nyora/Perso (NAS: 3010, 3020, 3031) | 4 instances Up & 200 OK | ✅ Conforme | +| `ports-registry.md` | Inspection diff | Ligne 69 mise à jour + Changelog 26/08 | ✅ Conforme | +| NyoraNotes Vault | `curl /search?q=cadrage` | Note `identite-nabil-preferences-cadre-dsh.md` indexée | ✅ Conforme |