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>
37 lines
2.7 KiB
Markdown
37 lines
2.7 KiB
Markdown
---
|
|
name: mcp-t7-backstop-600s-reply-rejected-livestate-stale
|
|
description: memory note mcp-t7-backstop-600s-reply-rejected-livestate-stale
|
|
metadata:
|
|
type: project
|
|
---
|
|
---
|
|
title: MCP T7b/T7e — backstop 600s rejette le reply tardif et laisse le live-state worker non réconcilié
|
|
type: reference
|
|
description: Finding fonctionnel des tests MCP T7b/T7e (2026-06-24) — un idea_reply après dépassement de la fenêtre 600s est refusé « no pending request », et le ticket du worker reste working dans le live-state.
|
|
---
|
|
|
|
# Finding — tests MCP T7 (2026-06-24, QA)
|
|
|
|
## Contexte
|
|
Série de tests du rendez-vous `idea_ask_agent ⇄ idea_reply` et du backstop no-reply (cap ~600s), demandés par Main :
|
|
- **T7d** (debug build x3, avant-plan) : cumul ~3m49s < 600s → reply OK.
|
|
- **T7b** (9 étapes `sleep 82`, entrelacées) : le harness BLOQUE tout `sleep` avant-plan → exécutées en run_in_background ; reply OK (tardif mais < fenêtre côté ticket T7b).
|
|
- **T7e** (release build répété, avant-plan, sans sleep ni bg) : 7 cycles, cumul réel **08:01:14 → 08:14:21 = 13 min 07 s**, franchit largement 600s.
|
|
|
|
## Défaut observé
|
|
À la fin de T7e (et de T7b, terminé au même tour, après >600s d'occupation continue), les DEUX `idea_reply` (tickets `4613262f…` T7b et `d2398b22…` T7e) sont refusés :
|
|
|
|
```
|
|
invalid input: no pending request to reply to for agent aefdbd61-…
|
|
```
|
|
|
|
→ Le backstop a libéré le **demandeur** (Main) côté rendez-vous après dépassement du cap, ce qui est le comportement voulu. MAIS :
|
|
1. Le **résultat réel** (builds OK, horodatages non falsifiés) ne peut **plus être délivré** : il est perdu pour le demandeur.
|
|
2. `idea_workstate_read` montre encore le worker QA `status=working ticket=d2398b22…` **après** le rejet du reply → le live-state du **worker** n'est PAS réconcilié quand le backstop ferme le rendez-vous côté demandeur. Incohérence demandeur (libéré) vs worker (toujours working).
|
|
|
|
## Conséquence / piste
|
|
- Le cap 600s du rendez-vous reste trop court pour des tâches lourdes légitimes (cf. [[rendezvous-600s-cap-too-short-heavy-tasks]]) : ici un travail réel et honnête >13 min est « jeté ».
|
|
- À corriger : quand le backstop ferme un rendez-vous, soit (a) accepter encore un reply tardif (le router vers le demandeur même après timeout / le persister), soit (b) réconcilier le live-state du worker (passer son ticket à done/abandon) pour ne pas laisser un `working` fantôme. Voir [[backstop-fires-on-intra-task-turn-rootcause]] et [[rendezvous-no-reply-backstop-design]].
|
|
|
|
## Reproductible
|
|
Charge avant-plan réelle (`cargo build --release --workspace` en boucle clean) dépassant 600s, puis tenter `idea_reply` sur le ticket d'origine → rejet systématique. |