---
name: inter-agent-live-context-shared-per-agent
description: memory note inter-agent-live-context-shared-per-agent
metadata:
  type: project
---
# Contexte live inter-agent : PAR AGENT (partagé), pas par paire — DÉCISION FIGÉE

**Type :** decision d'architecture / produit — validée utilisateur le 2026-07-02.

## Décision

Le contexte live d'un agent IdeA est porté **par l'agent cible**, partagé entre TOUS les
demandeurs. Pour un `AgentId` donné, IdeA maintient **au plus une** session
headless/structurée vivante ; tous les `idea_ask_agent(requester, target)` vers le même
`target` réutilisent cette session, quel que soit le demandeur.

Ce partage est **intentionnel et souhaité**, pas un bug ni une fuite : tous les agents du
projet sont dans le même domaine de confiance (même utilisateur, même projet). Le contexte
live d'un agent = mémoire de travail d'équipe / tableau blanc partagé. On NE veut PAS
d'isolation par paire.

La paire `(requester, target)` n'est **pas** une frontière d'isolation du contexte moteur :
elle sert uniquement à l'attribution, la corrélation requête/réponse, les vues UI et les
filtres de transcript.

## Preuve empirique (2026-07-02)

Main a confié à QA le token `IDEA-TOKEN-7F3A-BLEEDCHECK` ; Architect a ensuite pu le
récupérer auprès de QA **sans que Main le lui transmette**. Cause : `ensure_structured_session`
(`crates/application/src/orchestrator/service.rs:1948`) fait un early-return sur
`session_for_agent(&agent_id)` → une seule session vivante par agent, réutilisée.

## Modèle de transcript cible (cadré par Architect)

**Log canonique PAR AGENT + vues par paire dérivées.** Abandon du transcript canonique
par paire comme source de vérité (il promet une isolation qui n'existe pas en live).

- Arbo cible : `.ideai/conversations/agents/<targetAgentId>/{log.jsonl, handoff.md, providers.json, log.N.jsonl}`
- Chaque tour porte l'attribution : `thread_id=Agent(target)`, `requester`, `target`,
  `correlation_id`, `role`, `source`.
- Vues = projections filtrées (`ForAgent`, `ForPair`, `ForCorrelation`), pas des logs séparés.

Impacts à traiter :
- `resolve_conversation` → `resolve_agent_thread(target)` + `resolve_conversation_view(requester,target)`.
- `bind_conversation_session` → bind sur `targetAgentId` ; réutiliser la session existante.
- `ConversationRegistry` → index primaire `targetAgentId`, secondaires `requester`/`correlation_id` ;
  interdire 2 fils live pour le même target.
- `ProviderSessionStore` clé `(agent_thread_id, provider_id)` au lieu de `(pair_id, provider_id)`.
- `LeafCell.conversation_id` = désormais **id de fil agent**, plus « id de paire ».
- Viewer LS7 : défaut = fil agent complet ; vue par paire = vue filtrée/partielle libellée comme telle.

## Garde-fou efficience (rotation multi-demandeurs)

Le design LS5/LS6 tient, mais un fil agent partagé **croît plus vite** (agrège les demandes
de plusieurs requesters). Ajustements : la rotation s'applique au fil agent canonique (pas
aux vues) ; le résumé/handoff doit conserver l'attribution minimale (`Objectif courant`,
`Demandes actives par requester`, `Décisions récentes`, `Blocages`, `Dernière réponse
corrélée`) ; transcript brut jamais réinjecté (humain-only) ; handoff borné à
`HANDOFF_SUMMARY_MAX_CHARS=4096`. Risque principal : dilution si demandeurs poussent des
objectifs contradictoires → mitigé par les rubriques stables du handoff.

## Découpage dev recommandé (Architect)

1. `ARCHITECTURE.md` §19.7 : remplacer « id de paire » par « fil agent partagé » (+ §16/§17/§21).
2. Introduire `ConversationThreadId` / `ConversationViewId`.
3. Adapter `resolve_conversation`, `bind_conversation_session`, `ConversationRegistry`.
4. Compatibiliser les anciens chemins `for_pair(requester,target)` comme vues historiques.
5. LS7 viewer : fil agent complet + filtres.
6. Test QA : un fait confié à QA par Main est visible quand Architect interroge QA.

## État

Décision figée. Cadrage architectural livré par Architect. Reste à : intégrer la proposition
dans `ARCHITECTURE.md`, puis planifier le dev (cycle normal Architect→Git→Dev→QA).

Liens : [[conversation-rotation-safety-design]], [[handoff-ls5-summary-bound-and-llm-seam]],
[[conversation-log-ls6-rotation-and-paginated-read]], [[conversation-viewer-ls7-frontend]],
[[headless-interagent-conversation-objective]].