docs(adr): contrat futur du seam LLM de résumé de handoff (LS5)
ADR brève : borne summary_md et point d'extension LLM (non activé). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
38
docs/adr/LS5-handoff-summary-bound-and-llm-seam.md
Normal file
38
docs/adr/LS5-handoff-summary-bound-and-llm-seam.md
Normal file
@ -0,0 +1,38 @@
|
||||
# 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)
|
||||
|
||||
1. **Borne par ligne (infra)** : `render_turn` tronque le texte aplati de chaque tour à
|
||||
`TURN_LINE_MAX_CHARS = 240` (élision `…`), préfixe `- **role:**` conservé. Correctif
|
||||
central du trou de perf.
|
||||
2. **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`/`objective` jamais modifiés.
|
||||
3. **Application** : la borne universelle est posée **entre `fold` et `save`** (écriture)
|
||||
et **avant `compose_convention_file`** (injection, protège les `handoff.md` legacy).
|
||||
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).
|
||||
Reference in New Issue
Block a user