From faa377e64fc01de9796d4a4da6618db759cc1884 Mon Sep 17 00:00:00 2001 From: nathaninline Date: Wed, 22 Jul 2026 09:19:39 +0200 Subject: [PATCH] SSE: padding APRES caught_up (16Ko) au lieu de dessus - le dernier message n'est plus la queue coincee dans le tampon proxy --- conversation.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/conversation.go b/conversation.go index 0a993c3..c3b5b6f 100644 --- a/conversation.go +++ b/conversation.go @@ -338,10 +338,16 @@ func (c *Conversation) Subscribe(ctx context.Context, from int, emit func(map[st last = s } } - // Padding aussi sur caught_up : force le flush de la QUEUE du replay à travers un - // proxy qui re-bufferise par lots (Cloudflare) → les derniers messages arrivent - // avec le reste, plus 20-30 s après. - if !emit(map[string]any{"caught_up": true, "pad": strings.Repeat("·", 2048)}) { + if !emit(map[string]any{"caught_up": true}) { + return + } + // Le padding doit venir APRÈS caught_up, pas dessus. Un proxy (Cloudflare) garde + // toujours le DERNIER bout de flux en tampon jusqu'au prochain flush (~2-3 s). En + // envoyant un gros pad juste après, ce sont ses octets — et non le dernier vrai + // message — qui deviennent la « queue » qui attend : le dernier message et + // caught_up, eux, sont poussés dehors immédiatement. Le client ignore `pad`. + // 16 Ko : largement au-dessus du tampon de coalescence d'un proxy courant. + if !emit(map[string]any{"pad": strings.Repeat("·", 16384)}) { return }