ADR brève : borne summary_md et point d'extension LLM (non activé). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
ADR LS5 — Borne du résumé de handoff & seam résumeur LLM
Statut : accepté (lot LS5, branche feature/agent-live-state).
Contexte
Le résumé de reprise (Handoff::summary_md) est injecté dans le contexte d'un agent
à chaque lancement et persisté à chaque checkpoint. Sans borne, un gros tour
Response produit une ligne géante qui gonfle le résumé → coût sur le chemin chaud
(append/checkpoint + contexte injecté). Priorité produit : gagner en perf sans mettre
de LLM sur ce chemin chaud.
Décision (implémentée)
- Borne par ligne (infra) :
render_turntronque le texte aplati de chaque tour àTURN_LINE_MAX_CHARS = 240(élision…), préfixe- **role:**conservé. Correctif central du trou de perf. - Borne universelle (domaine) :
bound_handoff_summary(h, HANDOFF_SUMMARY_MAX_CHARS=4096), pure, idempotente, sans rejet — garde l'objectif + le suffixe de tours le plus récent, droppe les plus anciens, hard-truncate la fin d'une ligne trop longue sans casser son préfixe.up_to/objectivejamais modifiés. - Application : la borne universelle est posée entre
foldetsave(écriture) et avantcompose_convention_file(injection, protège leshandoff.mdlegacy). Indépendante du résumeur.
Seam LLM — futur, NON implémenté
Le port HandoffSummarizer::fold reste inchangé (async, sans Result, best-effort) ;
le défaut câblé reste HeuristicHandoffSummarizer. Un futur LlmHandoffSummarizer devra
respecter le contrat suivant :
- Hors chemin chaud, déclenchement froid : jamais par tour. Calcul à la reprise / à la
rotation / sur débounce (coalescer plusieurs tours rapides), pas à chaque
record. - Timeout + fallback heuristique : un appel réseau lent/échoué retombe sur le résumé
heuristique (ou
prev), jamais d'erreur propagée, jamais de blocage du checkpoint. - Sélection par flag, défaut heuristique (zéro dépendance réseau par défaut).
- La borne universelle s'applique de toute façon à sa sortie (garantie indépendante du résumeur).