Files
IdeA/.ideai/memory/rendezvous-600s-cap-too-short-heavy-tasks.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

4.3 KiB

name, description, metadata
name description metadata
rendezvous-600s-cap-too-short-heavy-tasks memory note rendezvous-600s-cap-too-short-heavy-tasks
type
project

T7 — plafond rendez-vous trop court : FIX LIVRÉ (2026-06-24)

Défaut (rappel, observé 2026-06-23)

Délégation dev lourde (impl + cargo test --workspace + clippy) → la cible bosse en un seul long tour > 600 s sans émettre de turn_duration. L'enveloppe serveur timeout(600s, dispatch) plate (crates/infrastructure/src/orchestrator/mcp/server.rs) expirait sec : (a) faux -32001/no-reply retryable alors que la cible n'est pas muette mais active ; (b) drop du dispatch → canal de report mort → idea_reply final non livrable (« no pending request »).

Fix (branche de travail courante, pas encore committé)

Implémenté par subagent Claude (Architect+DevBackend, hors idea_ask_agent car le rendez-vous était le sujet), vérifié par Main (QA réelle), AppImage rebuildée.

  • Algorithme run_inactivity_watchdog dans server.rs : ASK_RENDEZVOUS_TIMEOUT (600 s, env IDEA_ASK_RENDEZVOUS_TIMEOUT_MS) devient une fenêtre d'inactivité (budget de silence), pas un plafond absolu. Boucle timeout(fenêtre, dispatch) ; à chaque expiration, sonde l'activité de la cible :
    • progrès & sous plafond → réarme (extension) ;
    • progrès & plafond atteint → rendezvous_ceiling_active_error (nouveau code JSON-RPC error_codes::RENDEZVOUS_CEILING_ACTIVE = -32_002, data.code="RENDEZVOUS_CEILING_ACTIVE", retryable:false, message « still actively working… do not retry blindly, check the target's in-progress work/branch ») ;
    • pas de progrès (vrai silence, ou pas de probe = fallback plat) → rendezvous_no_reply_error inchangé (retryable:true).
  • Signe de vie = octets cumulés des .jsonl du run-dir cible (couvre le long tour unique sans turn_duration). Nouvelle inspector::claude_paths::transcript_activity_token(fs, home, cwd) -> Option<u64>.
  • Plafond absolu ASK_RENDEZVOUS_CEILING (défaut 4 h, env IDEA_ASK_RENDEZVOUS_CEILING_MS).
  • Wiring : sonde optionnelle AskActivityProbe injectée dans McpServer (modèle events/ready_sink, additif → zéro régression), branchée par la composition root crates/app-tauri/src/state.rs (qui résout nom→AgentId→run-dir via nouveau service.resolve_agent_id_by_name). Infra reste libre d'AgentId.
  • Fichiers : server.rs, jsonrpc.rs, mcp/mod.rs, lib.rs, inspector/claude_paths.rs+mod.rs, application/.../service.rs, app-tauri/state.rs.

Validation (preuve réelle, Main)

cargo test -p infrastructure --lib = 251 passed/0 (dont 6 nouveaux tests : silence→no-reply, fallback sans probe→no-reply, active→extension puis resolved, active→ceiling, codes/retryable distincts). mcp_server 22/0, inspector_claude 4/0, cargo test -p application tout vert. clippy -p infrastructure -p application --all-targets = 0 warning nouveau (résiduels pré-existants : input/mod.rs, lifecycle.rs, fileguard.rs, server.rs:132 ready_sink). AppImage rebuildée 2026-06-24 09:21, installée sur /home/anthony/Documents/IdeA_0.3.0_amd64.AppImage, backup …​.old-pre-t7-fix (08:41).

Reste à faire

  1. Validation live T7 après relance IdeA : déléguer une tâche lourde >600 s ; attendu = pas d'expiration tant que la cible écrit son transcript, et soit résolution normale, soit (si >4 h) message ceiling-active non-retryable distinct ; idea_reply tardif non perdu tant qu'on n'a pas atteint le plafond.
  2. Commit par Git (non fait — laissé à Git, cf. git-owns-commit-merge-decisions) : décider de le faire avant ou après la validation live T7.
  3. Reprise complète des tests depuis T1 (skill mcp-rendezvous-functional-test). État pré-relance : T1→T6 verts cette passe, dont fix T5 validé live (cf. checkpoint-mcp-tests-t1-t5-and-t5-livestate-defect).

Lié à rendezvous-no-reply-backstop-design, backstop-fires-on-intra-task-turn-rootcause, mcp-functional-test-plan-2026-06-24.