# Handoff session 15-16 mai 2026 — Workflow Demo_urgence_3_db + linux_db **Auteur** : Claude (session du 15 mai 22h jusqu'au 16 mai 2h) **Objectif** : permettre la reprise propre du travail (même session ou nouvelle session) jusqu'à la démo vidéo "demo 95" prévue **jeudi 21 mai 2026 (J-5)**. --- ## 1. Contexte démo **Démo "95" / GHT Sud 95 — Paris 21 mai 2026** — format **vidéo enregistrée** (pas live). Périmètre recentré : **requalification forfait / hospitalisation** uniquement (Demo_urgence_2 v2 Excel abandonnée — Excel inadapté pour textes longs). **Différenciateurs vidéo** : - 100 % vision (pas de DOM, pas d'API) - Multi-OS Windows ↔ Linux (NoMachine) - Bureau (Word) ET base (DBeaver/SQLite VM Ubuntu) **Patient démo** : MOREL Catherine, IPP 25003284 (hardcodé partout) **Date démo** : 15/05/2026 (hardcodée) **Décision démo** : REQUALIFICATION_HOSPITALISATION **Somme récupérée** : 1750 € (hardcodée) --- ## 2. Workflows en base DB : `/home/dom/ai/rpa_vision_v3/visual_workflow_builder/backend/instance/workflows.db` ### Demo_urgence_3_db — `wf_483910cdd851_1778750587` (workflow complet) 40 steps (ord 0-39). Source = Demo_urgence_2_interop (wf_56bf8fa2d332_1778666923, intact). | ord | action | rôle | |---|---|---| | 0-14 | DPI extraction + t2a_decision + 2× llm_generate | Génère `t_*`, `dec`, `resume_patient`, `justification_t2a` | | 15 | Win+D | Basculer bureau Windows | | 16-28 | Word | Ouvre template `rapport_T2A_template.docx`, saisit IPP/date/décision/somme via Tab | | 29 | double_click LINUX_demo.nxs | Ouvre NoMachine vers VM Ubuntu (auto-login configuré par Dom) | | 30 | type_text "loli" | Mot de passe Linux (skippé si auto-login actif) | | 31 | Enter | Valider login | | 32-39 | DBeaver dans VM | Ouvre demo_95 2, console SQL, INSERT, exécute | **Note** : ord 35 a `by_text="Tables"`, ord 36 a `by_text="demo_95"` (ajoutés en cours de session). ### linux_db — `wf_0786343fb2b7_1778879244` (sous-workflow de test rapide) **Créé spécifiquement** pour itérer rapidement sur la partie NoMachine + DBeaver sans rejouer le DPI+LLM (5-10 min). Initialement 11 steps = ord 29-39 du Demo_urgence_3_db. État actuel après nombreuses modifs Dom : **10 ou 11 steps** (à vérifier en début de session). Dom a notamment : - Supprimé certains steps - Ajouté un click sur menu "Éditeur SQL" + sous-menu (passage à 3 clics au lieu de Ctrl+Alt+Enter, plus robuste) - Réordonné via UPDATE SQL (les edges DAG visuelles VWB ne se sauvegardent pas) **Commande pour voir l'état** : ```bash sqlite3 /home/dom/ai/rpa_vision_v3/visual_workflow_builder/backend/instance/workflows.db \ "SELECT \"order\" AS ord, action_type, COALESCE(label,'') AS label, json_extract(parameters_json, '\$.visual_anchor.bounding_box') AS bbox, json_extract(parameters_json, '\$.by_text') AS by_text FROM steps WHERE workflow_id='wf_0786343fb2b7_1778879244' ORDER BY \"order\";" ``` --- ## 3. Modifs code appliquées (NON COMMITÉES côté Linux) ### `agent_v0/agent_v1/ui/chat_window.py` (Léa Windows) Trois modifs UX (validées Dom : Q1=oui minimiser sur Annuler, Q2=500ms, Q3=clear visuel uniquement, Q4=bulle accueil effaçable) : 1. **Nouvelle méthode `_clear_chat_history()`** (vers ligne 870) : détruit les widgets enfants de `_msg_frame` à chaque pause. Ne touche pas à `self._messages` (RAM conservée pour debug). 2. **Appel dans `_show_and_render`** : `self._clear_chat_history()` AVANT `_render_paused_bubble(payload)`. 3. **Minimisation 500 ms** sur `_on_paused_resume` ET `_on_paused_abort` : `self._root.after(500, self._do_hide)`. ### `agent_v0/agent_v1/core/executor.py` (Léa Windows) 1. **Délai paste** (ligne 2579) : `time.sleep(0.05)` → `time.sleep(0.5)` pour laisser NoMachine sync le clipboard Windows → VM Ubuntu. **NE FONCTIONNE TOUJOURS PAS** — clipboard probablement non propagé du tout par NoMachine. ### `agent_v0/server_v1/resolve_engine.py` (serveur Linux) 1. **Constante drift** (ligne 2110) : `_RESOLUTION_MAX_DRIFT: 0.20` → `0.95`. Permet à l'élément d'être trouvé n'importe où à l'écran (esprit "100 % vision"). Service `rpa-streaming` redémarré, nouveau PID au démarrage (vérifier `systemctl --user status rpa-streaming`). ### Déploiements Windows effectués via SCP - `chat_window.py` → `dom@192.168.1.11:C:/rpa_vision/agent_v1/ui/chat_window.py` ✓ - `executor.py` → `dom@192.168.1.11:C:/rpa_vision/agent_v1/core/executor.py` ✓ - Léa Windows **a été redémarrée** après les SCP (à confirmer pour la session du 16 mai) **Convention notée** : à chaque modif d'un fichier client Windows, Claude fait le SCP automatiquement (mot de passe SSH `loli` cf. `reference_credentials.md`). --- ## 4. Modifs DB appliquées (workflows.db) Liste exhaustive des UPDATE de la session : 1. **ord 29 source** (`step_5c81e5bdd20f_1778879250` historique) : `by_text="LINUX_demo"` (ne plus retrouver via faux positifs) 2. **ord 35 source + ord 4 linux_db (anc.)** : `by_text="Tables"` 3. **ord 36 source + ord 5 linux_db (anc.)** : `by_text="demo_95"` 4. **ord 40 source — INSERT SQL** (`step_9cf99c5f2420_1778862183`) : ajout `"paste": true` au parameters_json 5. **ord 5 linux_db (Ctrl+Alt+Enter)** : ajout `delay_before: 1500` ms pour laisser le focus s'établir après le clic demo_95 2 (peut être inutile maintenant que Dom passe par le menu) 6. **Réordonnancement linux_db** : déplacement du clic demo_95 2 (ord 7) à ord 4 + décalage des suivants 7. **Réordonnancement linux_db après ajout menu** : 3 nouveaux clic_anchor menu (ord 8/9/10 → 5/6/7), type_text + Ctrl+Enter décalés à 8/9 8. **Retrait `paste`** sur le step type_text INSERT (paste:true ne fonctionnait pas → fallback frappe char-by-char) 9. **Retrait `by_text="demo_95"`** sur le nouveau click demo_95 2 (ord 4 linux_db) car OCR matchait l'onglet ` Script-1` en haut au lieu du Navigator à gauche **Backups disponibles** dans `visual_workflow_builder/backend/instance/workflows.db.backup_*` : - `..._avant_dup_demo3` (création Demo_urgence_3_db) - `..._avant_paste_true` (avant UPDATE paste:true) - `..._avant_bytext_ord29` (avant by_text LINUX_demo) - `..._avant_bytext_demo95` (avant by_text demo_95 + Tables) - `..._avant_suppr_vwb31` (avant suppression Dom) - `..._avant_linux_db` (avant création linux_db) - `..._avant_reorder_linux_db` (avant 1er réordonnancement) - `..._avant_reorder_menu` (avant 2e réordonnancement) --- ## 5. Bugs / dette technique identifiés (À TRAITER POST-DÉMO) ### Critiques pour la démo vidéo 1. **paste:true ne fonctionne pas** entre Léa Windows et VM Ubuntu via NoMachine - Soit `win32clipboard.SetClipboardText()` plante silencieusement - Soit NoMachine ne propage pas le clipboard Windows → Ubuntu (probable) - **Investiguer** : vérifier NoMachine settings (Devices → Clipboard → cocher "Both directions") - **Fallback** : char-by-char (lent mais peut-être suffisant pour 1859 chars) 2. **Clics Léa n'atteignent pas toujours la VM Ubuntu** via NoMachine - Pattern : Léa clique côté Windows, l'agent reporte `success=True` mais `no_screen_change` - Chaque clic prend **2 min** côté agent (retries internes silencieux) - À ce rythme, le replay complet est inutilisable pour vidéo (25+ min) - **Hypothèse** : focus de fenêtre NoMachine instable, ou mode input non passthrough - **Workaround temporaire** : Dom intervient en supervision humaine (chaque step → bulle Léa → clic manuel + Continuer) 3. **Faux négatifs détecteur screen_change** : seuil `global=0.002%` considéré "aucun changement" sur les clics de menu qui pourtant ouvrent quelque chose visuellement. Déclenche retries inutiles. 4. **Bug `get_target_memory_store` import** dans `replay_memory.py` : ``` Learning: échec stockage target_memory: cannot import name 'get_target_memory_store' ``` Non bloquant mais empêche l'apprentissage des corrections humaines. 5. **VLM Quick Find exception** : `'int' object has no attribute 'get'` — fallback OK mais à corriger. ### Bugs UX VWB 6. **Bouton "Stop" disparaît** côté VWB UI quand le replay reste actif côté serveur (désynchro). Confondant. 7. **Bouton vert "Exécuter"** appelle un mini-runtime legacy (`real_demo.py`) qui ne supporte que click/type/wait. Pour le replay complet, **toujours cliquer le bouton bleu "→ Windows"**. 8. **DAG edges visuelles** dans VWB ne se sauvegardent pas → l'ordre visuel des flèches ne reflète pas l'ordre réel (basé sur `steps.order`). Confusing pour l'utilisateur. 9. **Bannière Windows 11 "Aucun périphérique audio disponible"** (grise) persistante en haut → VLM la décrit comme "popup, dialog box, confirmation, or erro..." (faux). Pollue les diagnostics. ### Bugs Léa 10. **Démarrage Léa très lent** : 3-6 minutes au lancement (chargement modèles ML probablement). À investiguer. 11. **Capture VWB** : si Léa Windows n'est pas lancée, le fallback `mss` sur Wayland échoue (`XGetImage failed`). Le bouton "Capturer" dans CapturePanel a un fallback local Linux qui ne marche plus sur Wayland natif (Chrome moderne). --- ## 6. État infra runtime (vérifications à faire en début de session) - **Service `rpa-streaming`** (port 5005) : `systemctl --user status rpa-streaming` → doit être active. Si redémarré entre temps, PID différent du 308418 mentionné. - **VWB backend** : port 5002, lancé via `app.py` (PID ≈ 140052 au moment du handoff). - **VWB frontend** : port 3002, Vite/React. - **Léa Windows** : sur `192.168.1.11`, tray icon visible si lancée. Pour confirmer connexion = polls `/api/v1/traces/stream/replay/next` depuis 192.168.1.11 dans les logs serveur. - **NoMachine** : configuré avec auto-login Ubuntu activé (skip lock screen). Clipboard partage **probablement non bidirectionnel** — à vérifier. --- ## 7. Reprise demain — checklist proposée ### Étape 0 — Vérification état ```bash # Vérifier services systemctl --user status rpa-streaming ps aux | grep -E "app.py|api_stream" | grep -v grep # Vérifier état workflows sqlite3 /home/dom/ai/rpa_vision_v3/visual_workflow_builder/backend/instance/workflows.db \ "SELECT id, name, updated_at FROM workflows WHERE name LIKE 'Demo_urgence_3%' OR name LIKE 'linux_db';" # Vérifier modifs code non commitées cd /home/dom/ai/rpa_vision_v3 && git status --short | grep -E "chat_window|executor|resolve_engine" ``` ### Étape 1 — Résoudre le bug "clics ne traversent pas NoMachine" C'est le bloqueur n°1. Sans ça, pas de démo vidéo possible. **Diagnostic Dom (16 mai 2h)** : « C'est NoMachine côté Windows qui ne répond plus comme il faut. » À investiguer en priorité demain (mise à jour NoMachine récente ? Config qui a sauté ? Process zombi ? Réinstall ?). **Pistes** : - Activer le partage clipboard NoMachine bidirectionnel (Settings → Devices → Clipboard) - Vérifier que la fenêtre NoMachine reste plein écran tout au long - Tester un autre client display (RDP natif Windows ?) - Configurer Léa pour focus la fenêtre NoMachine avant chaque action (mécanisme à ajouter dans executor.py ?) ### Étape 2 — Si NoMachine OK : tester linux_db de bout en bout Cible : run linux_db en ≤ 2 min sans intervention manuelle. ### Étape 3 — Run complet Demo_urgence_3_db Cible : 1 run propre du DPI au INSERT SQL. Enregistrer cette session pour la vidéo. ### Étape 4 — Post-démo Traiter la dette listée section 5 dans l'ordre d'importance. --- ## 8. Annexes ### IDs critiques - **Workflow Demo_urgence_3_db** : `wf_483910cdd851_1778750587` - **Workflow linux_db** : `wf_0786343fb2b7_1778879244` - **Workflow source Demo_urgence_2_interop** (intact) : `wf_56bf8fa2d332_1778666923` - **IPP démo** : `25003284` - **Step INSERT SQL Demo_urgence_3_db** : `step_9cf99c5f2420_1778862183` (ord 40, paste:true) - **Service streaming** : `rpa-streaming` user systemd ### Variables runtime produites par le workflow - `t_extraction_liste` (extract_table ord 0) - `t_motif_admission`, `t_examen_clinique`, `t_imagerie`, `t_notes_medicales`, `t_synthese_urgences` (extract_text_scroll) - `dec` (objet) : `dec.decision`, `dec.decision_court`, `dec.preuve_critere1/2/3` (t2a_decision ord 12, model `gemma4:31b-cloud`) - `resume_patient` (llm_generate ord 13) - `justification_t2a` (llm_generate ord 14) ### Fichiers source modifiés (non commités) ``` modified: agent_v0/agent_v1/ui/chat_window.py # clear+minimize Léa modified: agent_v0/agent_v1/core/executor.py # paste delay 0.5s modified: agent_v0/server_v1/resolve_engine.py # drift 0.95 ``` ### Schema DB rapide - Table `steps` : `id, workflow_id, action_type, "order" (réservé), position_x, position_y, parameters_json (JSON), anchor_id (FK), label, created_at, updated_at` - Table `workflows` : `id, name, description, tags_json, trigger_examples_json, created_at, updated_at, is_active, source, review_status, review_feedback, reviewed_at` - VWB affiche `order` en 1-indexed (VWB N = DB N-1) ### Commandes utiles ```bash # Logs streaming (filtrés) journalctl --user-unit=rpa-streaming --since "10 minutes ago" --no-pager | \ grep -vE "stream/image|/replay/next|GET /health|EDS-NLP" | tail -30 # Backup DB cp /home/dom/ai/rpa_vision_v3/visual_workflow_builder/backend/instance/workflows.db{,.backup_$(date +%Y-%m-%d_%H%M%S)_label} # SCP fichier vers Léa Windows SSHPASS='loli' sshpass -e scp -o StrictHostKeyChecking=no \ /home/dom/ai/rpa_vision_v3/agent_v0/agent_v1/ui/chat_window.py \ dom@192.168.1.11:C:/rpa_vision/agent_v1/ui/chat_window.py # Forcer reprise replay côté serveur curl -X POST "http://localhost:5005/api/v1/traces/stream/replay//resume" ``` ### Trois questions Q1/Q2/Q3 Léa chat (déjà tranchées) - Q1 : minimiser aussi sur Annuler ? → **oui** - Q2 : délai minimisation ? → **500 ms** - Q3 : purger `self._messages` RAM ? → **non** (clear visuel uniquement, RAM gardée pour debug) - Q4 (bulle accueil RGPD) : effaçable au 1er pause ? → **oui** OK --- ## 9. Posture pour la reprise **Si nouvelle session Claude** : commencer par lire ce handoff EN ENTIER + `MEMORY.md` + `CLAUDE.md`. Ne pas relancer de modifs sans vérifier l'état actuel de la DB et du code. **Si même session Claude** (ce qui est déjà perdu probablement) : reprendre directement. **Priorité absolue** : résoudre le bug "clics NoMachine ne traversent pas". Sans ça, la démo vidéo est compromise. **Démo J-5** : jeudi 21 mai. Marge de manœuvre étroite. Si NoMachine est un blocage durable, envisager un plan B (un seul OS = tout sous Linux ? ou tout sous Windows ?).