Files
IdeA/.ideai/memory/live-state-reboot-reconciliation-design.md
Blomios 50e99e5ced chore(workstate): notes mémoire campagne MCP T1→T10 + état runtime
Capitalise la mémoire projet produite pendant la campagne de tests fonctionnels
MCP (rendez-vous inter-agents, backstop no-reply, réconciliation live-state au
reboot) et synchronise l'état runtime `.ideai/` (agents, layouts, skills, index
mémoire). Inclut la mise à jour du contexte de l'agent Git.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 13:32:28 +02:00

2.6 KiB

name, description, metadata
name description metadata
live-state-reboot-reconciliation-design memory note live-state-reboot-reconciliation-design
type
project

Problème : au reboot, .ideai/live-state.json n'est pas réconcilié → agents fantômes working/waiting/blocked alors que leurs sessions sont mortes. prune (TTL 6h) ne couvre pas le fantôme récent.

Décision (cadrage Architect, 2026-06-23) :

  • Seam : étape best-effort reconcile_live_state dans la chaîne open_project (commands.rs), juste après reconcile_layouts. Pas d'app-boot global (live-state est par-projet). Pas d'outil MCP. Justification : un crash ne déclenche jamais close_project, donc open est le seul filet fiable.
  • Source de vérité : le registre de sessions vivantes LiveSessions / trait LiveAgentRegistry (application/src/terminal/registry.rs) — la même vérité que GetProjectWorkState. Prédicat orphelin = status ∈ {working,waiting,blocked} ET !is_agent_live. Race-safe : tourne avant toute relance ; LWW gagne via updated_at_ms frais.
  • Contrat : orphelin → idle (pas de nouveau statut, évite le ripple DTO/front). Garder intent (trace), vider ticket + last_delegation (rendez-vous mort, tracé ailleurs dans log/handoff), progress = marqueur stale, updated_at_ms frais.
  • Pas de nouveau port. Use case applicative ReconcileLiveState (compose LiveStateStore + LiveAgentRegistry + Clock) + transformation pure LiveState::reconcile_orphans(is_live, now) dans domain/src/live_state.rs. Provider par-root côté app-tauri (calqué sur LiveStateProvider/live_state_for).
  • Self-only de idea_workstate_set : invariant de la surface MCP, pas du store. set_workstate lie agent_id=identité handshake ; UpdateLiveState/LiveStateStore sont identity-agnostic. La réconciliation est un acte système dans le composition root qui appelle le port directement, jamais via OrchestratorCommand::SetWorkState → self-only préservé par construction. Même split que snapshot_running_agents/reconcile_layouts.

Fichiers probables : domain/src/live_state.rs, application/src/workstate/{mod.rs,reconcile.rs}, app-tauri/src/{lib.rs,state.rs,commands.rs}. Voir live-state-persistence-program-closed-ls8, handoff-ls5-summary-bound-and-llm-seam.