Lot 6 : la discussion en mémoire portée en Rust (chat::conv)

Port de l'état de Conversation et de subscribeSink : état persisté et
discussion chargée, epoch (reset, bascule), verrou du tour et son arrêt,
ajout au journal avec rejet des deltas d'un tour périmé, coalescence de fin
de tour, instantané numéroté sous le même verrou, /api/chat/state.

Subscription rend les lots à émettre : rejeu (padding, reset si le curseur
vient d'une autre discussion, pagination, caught_up, contexte), puis le
direct, avec {reset} et l'en-tête paginé quand l'epoch change. Réveil par
compteur de version marqué lu avant la relecture de l'état : aucun réveil
perdu.

Tests Go de l'abonnement portés.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
This commit is contained in:
Claude committed 2026-10-15 10:05:33 +00:00
1 parent 091902039d
commit 74c2d5105c
2 files changed
+485

No files matched your search

+3
View File
@@ -8,10 +8,13 @@
//! d'outils, statistiques) ;
//! - [`compact`] : estimation du contexte et compactage de l'historique ;
//! - [`journal`] : journal d'affichage (compactage, rejeu, pagination) ;
//! - [`conv`] : la discussion en mémoire (état, epoch, verrou du tour,
//! abonnés) ;
//! - [`persist`] : format en base, index des discussions, écrivain unique ;
//! - [`lease`] : bail du moteur (verrou de génération partagé avec le Go).
pub mod compact;
pub mod conv;
pub mod engine;
pub mod journal;
pub mod lease;