Files
IdeA/.ideai/memory/reconcile-live-state-implemented-feature-branch.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.7 KiB

name, description, metadata
name description metadata
reconcile-live-state-implemented-feature-branch memory note reconcile-live-state-implemented-feature-branch
type
project

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.