Files
IdeA/.ideai/memory/mcp-functional-test-plan-2026-06-24.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

5.0 KiB
Raw Blame History

name, description, metadata
name description metadata
mcp-functional-test-plan-2026-06-24 memory note mcp-functional-test-plan-2026-06-24
type
project

Plan de test fonctionnel MCP inter-agents (2026-06-24, run a6ced819)

Objectif : état des lieux par tests fonctionnels (pas unitaires) du rendez-vous idea_ask_agentidea_reply, du trivial au plus tordu. On lance dans l'ordre, on s'arrête au 1er blocage, on corrige (cycle Architect→Git→Dev→QA), rebuild+relance, puis on reprend de T1. Contexte/historique : mcp-e2e-findings-reply-wedge-phantom-busy, backstop-fires-on-intra-task-turn-rootcause, rendezvous-no-reply-backstop-design, rendezvous-600s-cap-too-short-heavy-tasks, reconcile-live-state-implemented-feature-branch.

Contexte binaire au moment du plan

  • AppImage qui tournait = build 23/06 19:42, PÉRIMÉ (antérieur à c6f0f86 encode_cwd, 744de20 backstop no-reply, 886bb0d/1efe2f1 reconcile). Décision utilisateur : rebuild develop HEAD 1efe2f1 puis relance avant de tester.
  • Règle structurelle : binaire qui tourne = AppImage. Tout fix backend ⇒ rebuild + relance d'IdeA (tue Main). Les tests s'enchaînent SANS relance à l'intérieur d'une même version ; chaque cycle de fix = 1 relance.

Méthode

  • Main est le demandeur (idea_ask_agent) = test fidèle de « si je donne un message à un agent, il me répond ».
  • Doublé d'observation externe Bash : ponts ss -xp | grep idea-mcp et pgrep -af mcp-server ; transcripts ~/.claude/projects/<run-dir-encodé>/*.jsonl (horodatages UTC ; reply réel = tool_use idea_reply→tool_result reply … delivered ; wedge demandeur = transcript figé sur tool_use idea_ask_agent sans tool_result) ; live-state via idea_workstate_read.
  • Risque résiduel : un wedge non borné fige le tour de Main → l'utilisateur peut interrompre.

Setup IdeA à mettre en place avant T1 (consigne utilisateur)

  1. Relancer IdeA, ouvrir le projet IdeA, Main visible (le demandeur).
  2. Garder 23 cellules libres visibles pour qu'on observe à l'œil les délégations (Main y placera des cibles visibles, ou lance-toi QA + DevFrontend dans des cellules visibles).
  3. Laisser Architect, DevBackend, Git ARRÊTÉS (froids) : T3 testera le réveil à froid ; T9 utilisera Architect+DevBackend froids.
  4. Cibles chaudes pour T1/T2 : Main les réchauffe lui-même (launch) — pas d'action requise.

Ordre des tests (trivial → tordu)

  • T1 — Visibilité outils MCP. Un agent lancé par IdeA voit ses outils sans action manuelle. Vérif : pont ESTAB (ss) + 2 process mcp-server par requester.
  • T2 — Cible CHAUDE + idea_reply trivial. Main→ask(agent chaud, « réponds pong via idea_reply »). Attendu : réponse inline pong, temps borné, workstate working→done purgé.
  • T3 — Réveil à FROID + idea_reply. Cible arrêtée. Attendu : pont relancé (nouveau mcp-server), 1er tour non perdu (1er user [IdeA · tâche…] intact), reply remonte.
  • T4 — Cible BACKGROUND (node_id None). Délégation vers agent sans cellule visible. Attendu : même protocole, pas de 1er tour perdu (historiquement non testé).
  • T5 — NO-REPLY (cible répond en prose, pas d'idea_reply). Attendu backstop : demandeur libéré en temps borné avec TargetReturnedNoReply (retryable), pas de Busy fantôme (workstate purgé). DÉFAUT historique #1.
  • T6 — Délégation MULTI-ÉTAPES puis idea_reply. Cible lit plusieurs fichiers / lance une cmd PUIS idea_reply. Attendu : pas de libération prématurée pendant le travail, rapport final livré. PIÈGE turn-watcher (cause racine : backstop tirait au 1er tour interne ~3 s).
  • T7 — Tâche LOURDE > plafond (impl + cargo test/clippy). Attendu : extension sur signe de vie OU message clair « cible active, plafond atteint » (≠ faux -32001) ; idea_reply tardif non perdu. Plafond IDEA_ASK_RENDEZVOUS_TIMEOUT_MS (défaut 600000).
  • T8 — Délégations PARALLÈLES (2 cibles en 1 tour Main). Attendu : rendez-vous multiples simultanés OK, multiplexage pont, 2 réponses distinctes.
  • T9 — TRANSITIVE A→B→C (Main→Architect, Architect délègue à DevBackend puis reply à Main). Attendu : rendez-vous imbriqués, 2 attentes simultanées sans deadlock. Cas le plus tordu.
  • T10 — INTERRUPTION/annulation + reconcile reboot. (a) Main interrompt un ask en vol → working cible purgé, pas de cascade, idea_reply tardif non-livrable proprement. (b) Au reboot, orphelins status∈{working,waiting,blocked} & session morte → idle + marker STALE_AT_RESTART_MARKER (use case ReconcileLiveState, cf. reconcile-live-state-implemented-feature-branch).

Critère de fin

Tous les T1→T10 verts avec preuve réelle (réponse inline + observation externe cohérente). Sinon : 1er rouge = blocage à corriger, puis reprise de T1.