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.7 KiB
name, description, metadata
| name | description | metadata | ||
|---|---|---|---|---|
| reconcile-live-state-implemented-feature-branch | memory note reconcile-live-state-implemented-feature-branch |
|
Implémenté le 2026-06-23 sur feature/reconcile-live-state (ticket Main a7fcb5e4, dont le rendez-vous idea_reply a expiré pendant le build — résultat consigné ici). Non committé (Git tranche). Cadrage : live-state-reboot-reconciliation-design.
Résultats réels : cargo test --workspace = 1623 passed, 0 failed. cargo clippy --workspace --all-targets = 0 erreur, aucun warning sur le code ajouté (warnings restants tous pré-existants).
Lot 1 (domaine, crates/domain/src/live_state.rs) : LiveState::reconcile_orphans(is_live, now_ms) -> Vec<LiveEntry> pure (ne mute pas self). Orphelin = status ∈ {Working,Waiting,Blocked} ET !is_live → réécrit status=Idle, intent gardé, ticket=None, last_delegation=None, progress=Some(STALE_AT_RESTART_MARKER), updated_at_ms=now. Const pub STALE_AT_RESTART_MARKER = "(stale — session not running at restart)". +4 tests.
Lot 2 (application, nouveau crates/application/src/workstate/reconcile.rs) : use case ReconcileLiveState sur LiveStateStore+LiveAgentRegistry(ISP)+Clock ; execute(ReconcileLiveStateInput{project_id}) charge → reconcile_orphans → upsert par ligne. +3 tests. Exporté via workstate/mod.rs + application/lib.rs.
Lot 3 (app-tauri, state.rs+commands.rs) : provider par-root AppReconcileLiveState (résout root via ProjectStore::load_project, FsLiveStateStore::new(&root), registre = LiveSessions existant). Champ reconcile_live_state sur AppState. Hook best-effort dans open_project après reconcile_layouts. Acte système : écrit le port LiveStateStore directement, jamais via OrchestratorCommand::SetWorkState → self-only de idea_workstate_set préservé par construction.
Arbitrage à valider QA/Architect : la résolution project_id→root se fait au composition root (le store est root-bound), donc ReconcileLiveState::execute reçoit bien ReconcileLiveStateInput{project_id} (conforme Lot 2 + hook Lot 3 à la lettre) mais ne relit pas project_id dans le flux pur (_input). Variante sans ce param redondant = ajustement trivial si souhaité.
Fichiers (6) : domain/src/live_state.rs ; application/src/workstate/reconcile.rs (nouveau) ; application/src/workstate/mod.rs ; application/src/lib.rs ; app-tauri/src/state.rs ; app-tauri/src/commands.rs.