Files
IdeA/.ideai/tickets/111/carnet.md
Blomios 5be5c5975e chore(tickets): synchronise l'état runtime des tickets et du contexte main
Met à jour l'index/compteur de tickets, les tickets #111/#113/#114 et le
contexte de Main suite au traitement du ticket #114.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-30 12:56:07 +02:00

70 lines
5.2 KiB
Markdown

---
issueRef: "#111"
version: 3
updatedBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"}
updatedAt: 1785390694060
---
## Enquete `/tmp` IdeA — inventaire et fenetres de cleanup
### Methode
- Scan du code sur les usages `std::env::temp_dir()` / prexifes `idea-*` hors `frontend`.
- Lecture des blocs source pour separer `runtime` vs `#[cfg(test)]`.
- Verification du contenu live de `/tmp` au moment de l'analyse : aucun dossier `idea-*` visible a la racine de `/tmp` pendant ce tour.
### Conclusion courte
- Les noms cites dans le ticket (`idea-structured-session-factory-*`, `idea-web-root-*`, `idea-server-test-*`, `idea-openai-compat-*`, etc.) ne correspondent pas, dans l'etat actuel du code, a des artefacts runtime produit. Ils proviennent majoritairement de tests embarques dans les crates Rust.
- Le seul artefact runtime clair lie a IdeA/MCP trouve pendant l'analyse est le repertoire parent `idea-mcp` qui heberge les sockets Unix par projet quand le runtime tombe sur `/tmp` comme base.
- Donc le modele `un call MCP -> un dossier temp -> suppression en fin de call` n'est pas le bon modele pour la majorite des cas observes.
### Runtime reel identifie
#### 1. `idea-mcp` (runtime MCP par projet)
- Source : `crates/backend/src/mcp_endpoint.rs` et miroir `crates/app-tauri/src/mcp_endpoint.rs`.
- Role : repertoire parent des sockets Unix du serveur MCP local, ex. `<runtime-dir>/idea-mcp/<project-id>.sock`.
- Creation : a la determination du endpoint MCP du projet si le sous-dossier `idea-mcp` n'existe pas deja.
- Granularite : par projet / par listener MCP, pas par appel d'outil MCP.
- Cleanup deja present :
- le fichier socket est unlink sur fermeture propre via `reclaim_name(true)` ;
- un socket cadavre est supprime avant rebind si c'est bien un socket stale ;
- refs utiles : `crates/backend/src/lib.rs` autour de `bind_endpoint()` et `crates/backend/src/mcp_endpoint.rs`.
- Cleanup opportun :
- **pas** a la fin de chaque call MCP ;
- **oui** a la fermeture du listener / fermeture du projet pour le fichier `.sock` ;
- **oui** au prochain demarrage / prochain bind pour nettoyer un socket stale d'un crash precedent ;
- **amelioration possible** : supprimer aussi le dossier parent `idea-mcp` s'il devient vide apres drop du dernier socket, ou faire un sweep best-effort au demarrage des endpoints MCP.
- Importance : c'est le seul candidat clairement runtime et potentiellement visible sous `/tmp` si `XDG_RUNTIME_DIR` / `TMPDIR` ne sont pas utilisables et que le fallback tombe sur `/tmp`.
### Faux positifs / test-only observes
Ces prefixes existent dans le code mais dans des blocs de tests ou helpers de test. Ils ne semblent pas correspondre a des dossiers runtime utilisateur :
- `idea-openai-compat-*` : `crates/infrastructure/src/session/openai_compat.rs`
- `idea-structured-session-*` : `crates/infrastructure/src/session/mod.rs`
- `idea-web-root-*`, `idea-server-test-*`, `idea-server-lock-*`, `idea-app-data-env-*`, `idea-shared-core-*`, `idea-empty-web-*` : `crates/web-server/src/lib.rs`
- `idea-embedded-server-*` : `crates/app-tauri/src/embedded_server.rs`
- `idea-openai-mcp-tools-list-*`, `idea-openai-mcp-permissions-*`, variantes `app-tauri-*` : tests dans `crates/backend/src/openai_tools.rs` et `crates/app-tauri/src/openai_tools.rs`
- `idea-pty-sandbox-*`, `idea-landlock-*`, `idea-opencode-*`, `idea-devices-store-*`, `idea-secrets-store-*`, etc. : helpers de tests avec `Drop`/`remove_dir_all`.
### Lecture sur leur cleanup
- Dans la majorite des cas de tests lus, le cleanup nominal existe deja (`Drop`, `remove_dir_all`, `remove_file`).
- Le vrai risque residuel de ces dossiers est surtout : crash/abort de test, kill brutal, ou interruption d'une suite de tests. Dans ce cas, le residue reste dans `/tmp`.
- Comme `/tmp` est borne a 16 Go, ces residues peuvent devenir un probleme d'hygiene, mais ce n'est pas un sujet de lifecycle MCP par call ; c'est plutot un sujet de hygiene de tests / sweep de reliquats.
### Fenetres de cleanup recommandes
#### Runtime produit
- `idea-mcp/<project>.sock` : cleanup a la fermeture du listener MCP (deja en place) ; stale cleanup avant bind (deja en place).
- `idea-mcp/` parent dir : cleanup best-effort si vide apres fermeture du dernier listener, ou sweep au demarrage de l'app / ouverture projet.
#### Artefacts de tests
- Cleanup nominal dans chaque test/helper (souvent deja fait).
- Ajouter si besoin un sweep best-effort des prefixes `idea-*` generes par les tests au debut/fin des jobs de test locaux/CI.
- Ne pas melanger cela avec la logique runtime MCP : c'est un chantier distinct.
### Recommandation de perimetre pour le ticket #111
1. Cadrer `#111` sur les **artefacts runtime** visibles par l'utilisateur.
2. Traiter en priorite `idea-mcp` :
- verifier si le dossier parent vide reste parfois en place ;
- si oui, le supprimer quand il devient vide ou au prochain demarrage.
3. Ouvrir si necessaire un second ticket dedie a l'hygiene des reliquats de tests sous `/tmp`.
### Reponse a la question produit initiale
- Oui, IdeA peut produire un artefact sous `/tmp` pour le MCP runtime (`idea-mcp`), mais ce n'est pas cree par appel MCP individuel.
- Non, les dossiers cites dans la description ne semblent pas, a ce stade, etre crees par les appels MCP IdeA de production ; ils sont majoritairement issus de tests.