--- issueRef: "#187" version: 5 updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} updatedAt: 1786620907499 --- 2026-08-13 — implémentation backend/runtime Fichiers backend modifiés - crates/domain/src/ports.rs - crates/backend/src/dto.rs - crates/app-tauri/src/chat.rs - crates/infrastructure/src/session/codex.rs - crates/infrastructure/src/session/mod.rs - crates/app-tauri/tests/chat_bridge.rs - crates/app-tauri/tests/dto_chat.rs Résultat backend - `ReplyProgress` porte désormais un `progress_id` optionnel, sérialisé en `progressId`. - `ProgressSettler` corrèle d'abord par `progress_id`, puis fallback heuristique legacy. - Codex émet maintenant les progress message live dès `agent_message` avec id stable, au lieu d'attendre l'événement suivant. - Les progress tool/MCP Codex reçoivent aussi des ids stables dérivés des ids natifs. Tests backend verts - `cargo test -p infrastructure codex_ -- --nocapture` - `cargo test -p app-tauri --test chat_bridge -- --nocapture` - `cargo test -p app-tauri --test dto_chat -- --nocapture` - `cargo test -p domain reply_progress -- --nocapture` - `git diff --check -- ` Reste à faire frontend - Lire `progressId`. - Upsert/remplacement running -> done sans duplicat.