Files
IdeA/.ideai/tickets/287/carnet.md

3.5 KiB

issueRef, version, updatedBy, updatedAt
issueRef version updatedBy updatedAt
#287 3
kind agent_id
agent a6c6ea12-bfc6-4bdc-8031-324102dfa34d
1788892419182

Ticket #287 — Cross-project rendezvous timeout malgré activité cible

Symptôme utilisateur

UnitySoundTool a demandé des features à UnityPlugin/Main. L'appel cross-project a expiré après 10 minutes. Workstate cible: Failed, headlessRendezvous, corrélation 4c3d6b38, message Timeout: rendezvous inactivity window expired for target Main.

Cadrage Architect

Le chemin concerné n'est pas l'ancien rendez-vous MCP idea_reply, mais le chemin structured/headless:

  • ask_project_agent_for_mcp -> ask_resolved_agent -> ask_structured dans crates/application/src/orchestrator/service.rs.
  • Le watchdog réarmable existe déjà dans crates/application/src/orchestrator/rendezvous.rs.
  • Cause probable confirmée: la sonde production était principalement transcript Claude-only, alors que UnityPlugin/Main utilise Codex. Le watchdog ne voyait donc pas l'activité du tour Codex et expirait à 600s.

Implémentation DevBackend

Branche: fix/287-cross-project-rendezvous-timeout. Commit fix: 7716910. Merge local develop: 5d62515.

Fichiers modifié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

Contrat livré:

  • ask_structured utilise désormais un drain tap-aware basé sur AgentSession::send_with_tap.
  • Chaque ReplyEvent live non terminal incrémente un jeton monotone local Arc<AtomicU64>.
  • Le watchdog fusionne ce jeton local avec la sonde transcript fallback dans une sonde composite monotone.
  • Le Final reste la seule réponse normale.
  • Le transcript Claude devient un fallback, plus la source unique de vivacité.
  • Les appels cross-project vers une cible Codex peuvent désormais réarmer la fenêtre d'inactivité tant que l'adapter émet de l'activité live.

QA

Verdict QA: VERT. Commandes réelles:

  • cargo fmt --check OK
  • cargo test -p application --test orchestrator_service OK, 81 passed
  • cargo test -p application orchestrator::rendezvous OK, 5 passed
  • cargo test -p infrastructure --test mcp_server OK, 40 passed
  • cargo test -p backend OK, 87 passed, 7 ignored

Tests de régression ajoutés:

  • ask_structured_rearms_inactivity_window_from_send_with_tap
  • ask_structured_without_tap_probe_progress_or_final_times_out

Git

Git a committé et mergé localement:

  • Fix: 7716910 fix(orchestrator,agent): rendezvous cross-project réarmé par jeton d'activité live model-agnostique — #287
  • Merge develop: 5d62515 merge(orchestrator,agent): rendezvous cross-project réarmé par jeton d'activité live — #287

Aucune action distante. develop est en avance sur origin/develop; état post-build propre sauf scripts/restart-idea-over-ssh.sh non suivi, hors périmètre.

AppImage

Workflow build-appimage exécuté depuis develop:

  • npm --prefix frontend run build OK
  • depuis crates/app-tauri: CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage OK

Artefact produit:

  • /home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage
  • taille: 114M
  • généré le 2026-09-08 à 20:33

Reste manuel

Pour rendre le correctif actif dans l'application courante, remplacer l'AppImage installée puis relancer IdeA. Ne pas automatiser ici car relancer IdeA tue l'orchestrateur/session active.