Files
IdeA/.ideai/memory/ticket287-cross-project-rendezvous-live-activity-fix.md

51 lines
2.7 KiB
Markdown

---
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.