summaryrefslogtreecommitdiffstats
path: root/devel-phases-next.md
diff options
context:
space:
mode:
Diffstat (limited to 'devel-phases-next.md')
-rw-r--r--devel-phases-next.md57
1 files changed, 44 insertions, 13 deletions
diff --git a/devel-phases-next.md b/devel-phases-next.md
index 96526a1..ff161d6 100644
--- a/devel-phases-next.md
+++ b/devel-phases-next.md
@@ -10,25 +10,56 @@
**Objectif :** un node utilisable quotidiennement — multi-groupe, streaming fluide,
chat intégré, reconnexion rapide.
-**Débloqueurs techniques :**
-- 0-RTT QUIC (aioquic le supporte) → handshake < 50ms en reconnexion
-- Coordination punch/connect via hub WebSocket (réduire le gap)
-- HLS via QUIC (pas seulement via HTTP)
+### Décisions architecturales (arrêtées)
+
+**Multi-groupe → multiplexage sur un seul port QUIC**
+Un node expose un seul port QUIC (ex. 19010). Tous les groupes hébergés
+partagent ce port. Le groupe est identifié dans le handshake MNP par le `group_id`
+contenu dans le JWT. Avantages : un seul trou NAT à maintenir, une seule redirection
+de port manuelle si nécessaire. Le serveur QUIC route chaque connexion vers
+l'IndexGroup/GEK du bon groupe après vérification du JWT.
+
+**Signaling punch/connect (via hub WebSocket)**
+Actuellement, le node punchs aveuglément au démarrage → 12.7s de handshake
+(trou NAT vieillit avant que le client arrive). Solution :
+```
+Client → Hub (HTTPS) : "je vais connecter node X, je viens de IP:PORT"
+Hub → Node (WS) : message "client_incoming: {peer_ip, peer_port}"
+Node → NAT (UDP) : punch_nat(peer_ip, peer_port) immédiat
+Node → Hub (WS) : "punch_ready"
+Hub → Client (HTTPS) : "connecte-toi maintenant"
+Client → Node (QUIC) : < 2s après le probe → trou frais → < 200ms
+```
+Le canal hub→node WebSocket existe déjà (`hub/api/revocation.py`).
+Il suffit d'ajouter le type de message `client_incoming` / `punch_ready`.
+Ce mécanisme s'appuie sur l'ICE simplifié (Interactive Connectivity Establishment).
+
+**Chat — entre forum et Signal**
+Pas un chat temps-réel éphémère (Signal) ni un forum lourd.
+Modèle : **fil de discussion chiffré E2E, persistant sur le node**.
+- Messages courts + pièces jointes (comme Signal groupe)
+- Fils/topics optionnels pour structurer (comme un forum léger)
+- Historique stocké sur le node (pas éphémère)
+- Push pour membres connectés, pull pour hors-ligne
+- Double Ratchet (déjà implémenté) pour le chiffrement
+- Scope : par groupe (pas par paire d'utilisateurs)
+- Pas de suppression automatique (l'admin du groupe gère la rétention)
+
+### Milestones
| # | Composant | Fichier(s) | Priorité |
|---|---|---|---|
| 7.1 | QUIC 0-RTT session resumption | `transport/quic_server.py` + `quic_client.py` | Haute |
-| 7.2 | Signaling punch/connect via hub WS | `hub/api/signaling.py` + `node/hub_client.py` | Haute |
-| 7.3 | Daemon multi-groupe | `node/daemon.py` — N DirectoryIndexers + N servers | Haute |
-| 7.4 | HLS streaming via QUIC | `node/transport/hls.py` — segments via QUIC stream | Moyenne |
-| 7.5 | Chat wire protocol (MNP) | `common/protocol.py` MNP.CHAT_* + `node/chat/` | Moyenne |
-| 7.6 | Chat UI (node web UI) | `node/ui/app.py` — fil de messages temps réel | Moyenne |
+| 7.2 | Signaling `client_incoming`/`punch_ready` | `hub/api/revocation.py` + `node/hub_client.py` | Haute |
+| 7.3 | Daemon multi-groupe (multiplexage 1 port) | `node/daemon.py` — N IndexGroups, 1 QuicChunkServer | Haute |
+| 7.4 | HLS streaming via QUIC | `node/transport/hls.py` — segments en QUIC streams | Moyenne |
+| 7.5 | Chat : stockage + wire protocol MNP | `node/chat/store.py` + `common/protocol.py` | Moyenne |
+| 7.6 | Chat : UI web locale + push WS members | `node/ui/app.py` WebSocket pour notifications | Moyenne |
| 7.7 | Calibration Argon2id CLI | `node/daemon.py` — `meshbay-node calibrate-argon2` | Basse |
-**Questions à clarifier avant 7.3 (multi-groupe) :**
-- Un groupe = un port dédié, ou multiplexage sur un port unique ?
-- Les groupes d'un même node partagent-ils la même clé Ed25519 de node ?
-- Interface UI : comment présenter plusieurs groupes dans localhost:18000 ?
+**Questions ouvertes restantes :**
+- Les groupes d'un même node partagent-ils la même clé Ed25519 de node ? (probable oui)
+- UI multi-groupe localhost:18000 : onglets par groupe ou liste unifiée ?
---