fix(orchestrator,agent): rendezvous cross-project réarmé par jeton d'activité live model-agnostique — #287 (le watchdog d'inactivité du rendez-vous expirait à 600s sur un tour structured actif car seul le transcript Claude servait de signe de vie; nouveau drain_with_readiness_announcements_and_activity_outcome exposant un jeton monotone AtomicU64 incrémenté par chaque ReplyEvent non terminal du tap send_with_tap, passé au watchdog via AskWatchdogActivity pour réarmer la fenêtre quelle que soit l'adapter; la sonde transcript devient fallback externe; QA verte: orchestrator_service 81/81, rendezvous 5/5, mcp_server 40/40, backend 87+7 ignored, cargo fmt --check; scripts/ hors périmètre)

This commit is contained in:
2026-09-08 20:29:48 +02:00
parent 4484a02b16
commit 77169101cb
5 changed files with 277 additions and 28 deletions

View File

@ -3346,9 +3346,9 @@ impl BackendCore {
// Fenêtre d'inactivité réarmable (signe de vie) du rendez-vous délégué : la
// borne de tour dans le service n'est plus un timeout plat mais une fenêtre
// réarmée à chaque progrès observé de la cible (octets cumulés de son
// transcript Claude), sous le plafond ci-dessous. SANS cette sonde, la borne
// dégrade vers un timeout plat (fallback, zéro régression) et coupe un long
// tour unique à 600 s — c'est précisément la sonde qui rend le fix effectif.
// transcript Claude), sous le plafond ci-dessous. Cette sonde est le fallback
// externe du tap live model-agnostique alimenté par `AgentSession::send_with_tap` ;
// l'une ou l'autre source suffit désormais à réarmer la fenêtre.
// Keyée par (project_root, agent_id) : le run-dir transcript = `<root>/.ideai/
// run/<agent_id>`, encodé par Claude sous `<home>/.claude/projects/...`.
.with_ask_liveness_probe({