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>
2.6 KiB
2.6 KiB
name, description, metadata
| name | description | metadata | ||
|---|---|---|---|---|
| live-state-reboot-reconciliation-design | memory note live-state-reboot-reconciliation-design |
|
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_statedans la chaîneopen_project(commands.rs), juste aprèsreconcile_layouts. Pas d'app-boot global (live-state est par-projet). Pas d'outil MCP. Justification : un crash ne déclenche jamaisclose_project, donc open est le seul filet fiable. - Source de vérité : le registre de sessions vivantes
LiveSessions/ traitLiveAgentRegistry(application/src/terminal/registry.rs) — la même vérité queGetProjectWorkState. Prédicat orphelin =status ∈ {working,waiting,blocked}ET!is_agent_live. Race-safe : tourne avant toute relance ; LWW gagne viaupdated_at_msfrais. - Contrat : orphelin →
idle(pas de nouveau statut, évite le ripple DTO/front). Garderintent(trace), viderticket+last_delegation(rendez-vous mort, tracé ailleurs dans log/handoff),progress= marqueur stale,updated_at_msfrais. - Pas de nouveau port. Use case applicative
ReconcileLiveState(composeLiveStateStore+LiveAgentRegistry+Clock) + transformation pureLiveState::reconcile_orphans(is_live, now)dansdomain/src/live_state.rs. Provider par-root côté app-tauri (calqué surLiveStateProvider/live_state_for). - Self-only de
idea_workstate_set: invariant de la surface MCP, pas du store.set_workstatelieagent_id=identité handshake ;UpdateLiveState/LiveStateStoresont identity-agnostic. La réconciliation est un acte système dans le composition root qui appelle le port directement, jamais viaOrchestratorCommand::SetWorkState→ self-only préservé par construction. Même split quesnapshot_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.