# Spike S3 · dialogues TUI, frappes, flood · VERDICT : ✅ GO (partiel documenté) Exécuté le 2026-06-11 (CLI 2.1.173). Scripts : `run.mjs` (passe 1), `run2.mjs` (passe 2), `flood.mjs`. Résultats bruts dans `captures/`. ## Dialogues testés | Dialogue | Détection | Options extraites | Réponse validée | |---|---|---|---| | **Trust dialog** (nouveau dossier) | écran seul (précède le registre) : motif `trust` + `❯` sur texte aplati | `❯1. Yes, I trust this folder / 2. No, exit` : « Enter to confirm · Esc to cancel » | **Entrée** ✅ (10+ occurrences via S1/S3) | | **Permission Write** (création/édition de fichier) | registre `status: waiting`, `waitingFor: "permission prompt"` + écran | `❯1. Yes / 2. Yes, allow all edits during this session (shift+tab) / 3. No` : « Esc to cancel · Tab to amend » | chiffre seul **insuffisant** ; **chiffre puis Entrée** ✅ (fichier créé) | | **AskUserQuestion** | registre `waiting` (même `waitingFor: "permission prompt"`, le registre ne distingue pas les types) | `❯1. Rouge / 2. Bleu / 3. Type something. / 4. Chat about this` : « Enter to select · ↑/↓ to navigate · Esc to cancel » | **↓ + Entrée** ✅ (tour complété, bonne option choisie) | | **Permission Bash** | **non déclenchée** : `echo` est dans l'allowlist par défaut ET `node -e` s'exécute dans le **bash sandboxé** du CLI 2.x sans prompt | - | - | | **Refus par Esc** | non exercé (quota) ; « Esc to cancel » affiché sur les deux dialogues observés | - | à valider en P4 | ## Enseignements structurants 1. **Le protocole de réponse est : (chiffre pour positionner) + Entrée pour confirmer.** Entrée seule valide l'option pré-sélectionnée (`❯`). Flèches ↑/↓ + Entrée fonctionnent partout. → L'UI mobile enverra `` + `\r`. 2. **Le registre `~/.claude/sessions` détecte les états d'attente des dialogues outils** (permission ET AskUserQuestion) avec le même `waitingFor: "permission prompt"` → le typage fin du dialogue (question vs permission, options) exige la lecture d'écran (`@xterm/headless` en prod ; le strip ANSI naïf mange les espaces, voir VERDICT S1). 3. **Il y a moins de prompts de permission que prévu** : le bash sandboxé exécute sans prompt les commandes sans réseau/écriture hors workspace. Les vrais `waiting` viennent des éditions de fichiers, du réseau, d'AskUserQuestion et des plans. Bonne nouvelle pour l'UX (moins d'interruptions), à intégrer aux fixtures P4. 4. **Pré-trust programmatique plausible** : accepter le dialogue écrit `projects[""].hasTrustDialogAccepted: true` dans `~/.claude.json` (structure complète capturée). À la création d'un worktree, écrire cette entrée (avec consentement explicite dans la modal) éviterait le dialogue, à valider en P2/P3. 5. La regex d'options `^\s*(❯\s*)?(\d+)\.\s*(.+)$` fonctionne sur le texte aplati (labels concaténés mais exploitables). ## Volet flood (node-pty pause/resume) · ✅ GO complet 21,5 Mo streamés ; pause de 10 s → **0 octet** reçu pendant la pause, bash survit, flux complet après resume (marqueur final intact, aucun octet perdu) ; écho 4,7 ms après le flood ; ~21 Mo en ~0,7 s hors pause. ## Reste à faire (P4, avant les boutons mobiles) - Exercer le refus par Esc et le dialogue « No, and tell Claude… » (champ texte). - Approbation de plan (plan mode) non testée. - Campagne de fiabilité 10/10 par type de dialogue (le critère complet du spike), à automatiser comme tests d'intégration du claude-adapter. - Le MVP (P3) n'a PAS besoin de tout ça : les boutons d'approbation sont en P4 ; le fallback « ouvrir le terminal » couvre tous les cas.