--- name: ticket287-cross-project-rendezvous-live-activity-fix description: memory note ticket287-cross-project-rendezvous-live-activity-fix metadata: type: project --- --- name: ticket287-cross-project-rendezvous-live-activity-fix description: Fix livré du timeout cross-project headlessRendezvous à 600s vers des cibles Codex — le watchdog structured est réarmé par les événements live send_with_tap, avec transcript Claude en fallback. metadata: type: project --- # Ticket #287 — Cross-project headlessRendezvous réarmé par activité live ## Symptôme Un appel cross-project `UnitySoundTool -> UnityPlugin/Main` a expiré après 10 minutes avec le workstate cible `Failed / headlessRendezvous / 4c3d6b38` et le message `Timeout: rendezvous inactivity window expired for target Main`. ## Cause Le chemin concerné est le rendez-vous structured/headless (`ask_project_agent_for_mcp -> ask_resolved_agent -> ask_structured`), pas l'ancien rendez-vous MCP `idea_reply`. Le watchdog réarmable existait déjà, mais la sonde production externe observait surtout les transcripts Claude. UnityPlugin/Main étant un agent Codex, un tour structured actif pouvait ne produire aucun progrès visible pour cette sonde et expirer à la première fenêtre de 600s. ## Contrat livré Depuis le fix #287, `ask_structured` alimente un jeton monotone local via `AgentSession::send_with_tap`. Chaque `ReplyEvent` live non terminal réarme l'activité du rendez-vous, indépendamment du provider. La sonde transcript reste un fallback externe, notamment pour les adapters qui ne produisent pas d'événements intermédiaires. Le `Final` reste la seule réponse normale. Absence réelle de tout signe de vie pendant une fenêtre complète => timeout d'inactivité. Activité continue jusqu'au plafond absolu => ceiling active. ## Fichiers et commits Fichiers touchés: - `crates/application/src/agent/mod.rs` - `crates/application/src/agent/structured.rs` - `crates/application/src/orchestrator/service.rs` - `crates/application/tests/orchestrator_service.rs` - `crates/backend/src/lib.rs` Commit fix: `7716910`. Merge local develop: `5d62515`. ## Validation QA verte: - `cargo fmt --check` - `cargo test -p application --test orchestrator_service` => 81 passed - `cargo test -p application orchestrator::rendezvous` => 5 passed - `cargo test -p infrastructure --test mcp_server` => 40 passed - `cargo test -p backend` => 87 passed, 7 ignored AppImage rebuildée le 2026-09-08: `/home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage` (114M). ## Activation Le binaire actif reste l'AppImage installée. Pour activer le fix en live, remplacer l'AppImage installée puis relancer IdeA. Cette relance tue l'orchestrateur courant, donc elle reste manuelle.