---
issueRef: "#95"
version: 6
updatedBy: {"kind":"user"}
updatedAt: 1784934174326
---
## Cause racine RÉELLE (2026-07-24, après investigation code)

### Ce qui se passe

Le `"timeout": 15000` (15 secondes) **hardcoded** dans le bloc `mcp.idea` de l'`opencode.json` généré par IdeA. OpenCode applique ce timeout **par appel `tools/call`** à ses serveurs MCP. `idea_ask_agent` bloque pendant que l'agent cible travaille (potentiellement des minutes) → OpenCode tue la requête à 15s avec l'erreur `-32001: Request timed out`.

**Pourquoi Claude/Codex ne sont pas affectés** : leur config MCP (`.mcp.json` / `config.toml`) n'a **pas** de champ `timeout`. Ce champ est spécifique à la config OpenCode.

### Emplacements du hardcoded 15000 (4 occurrences)

1. `application/src/agent/lifecycle.rs:2728` — `opencode_config_json()`
2. `application/src/agent/lifecycle.rs:2811` — `opencode_provider_config_json()`
3. `infrastructure/src/assistant/mod.rs:410` — `opencode_config_json()` (duplicate)
4. `infrastructure/src/assistant/mod.rs:495` — `opencode_provider_config_json()` (duplicate)

### Fix appliqué (feature/ticket95-opencode-mcp-timeout)

- Constante `DEFAULT_OPENCODE_MCP_TIMEOUT_MS` = 4h (14_400_000 ms), alignée sur `DEFAULT_RENDEZVOUS_CEILING` — le client MCP ne expire jamais avant le watchdog serveur.
- Fonction `resolve_opencode_mcp_timeout_ms()` — overridable via `IDEA_OPENCODE_MCP_TIMEOUT_MS`, fallback sûr sur 0/parse-error.
- Les 4 occurrences remplacées par `resolve_opencode_mcp_timeout_ms()`.
- Exporté depuis `application::agent` pour réutilisation par `infrastructure`.
- **Claude/Codex non touchés** : aucune modification de leur config MCP.

### Tests
- Application : 115 passed, 0 failed
- Infrastructure : 313 passed, 0 failed
- Compilation : OK, aucun nouveau warning

### Note déploiement
Le `opencode.json` est régénéré à chaque lancement d'agent par le code lifecycle. Nécessite rebuild AppImage pour que le binaire qui tourne génère la nouvelle config.