Cause racine (#25) : use_tls=True (défaut) activait le direct TLS sur le
port 5222 (conventionnellement STARTTLS). Le client envoyait un ClientHello
TLS sur un port attendant un stream XMPP en clair, le serveur ne voyait
jamais l'identité configurée, et la session expirait après 30 s.
Corrections :
- Remplacer use_tls (bool) par tls_mode: Literal[direct|starttls|disabled]
(défaut starttls, compatible port 5222). use_tls conservé comme alias
déprécié avec DeprecationWarning.
- Ajouter connect_timeout (15 s) et cleanup_timeout (10 s) distincts du
timeout de session (30 s).
- Gérer l'événement connection_failed de Slixmpp pour échouer rapidement
au lieu d'attendre le timeout de session.
- Borner await connect_future et await disconnect_future par leurs
timeouts respectifs (anti-blocage).
- Attendre connect_future et session_future conjointement
(asyncio.wait, FIRST_COMPLETED) pour détecter connection_failed avant
l'expiration du connect_timeout.
- Annuler les tâches pending sur tous les chemins de retour, y compris
CancelledError et Exception.
- Redact tous les redact_exception avec extra_secrets=_secret_values().
- Construire ClientXMPP dans le try (contrat « never raises »).
- Enrichir FakeClientXMPP avec modes connect/disconnect configurables.
- 25 nouveaux tests (timeout connexion, connection_failed, cleanup
bloqué, CancelledError, TLS mismatch, fuite secrets). Couverture 96 %.
- Mettre à jour .env.example, GUIDE_DEV_PYTHON.md, README.LLM.md.
Co-authored-by: OpenCode <opencode@antoineve.me>