Files
rpa_vision_v3/docs/handoffs/2026-05-16_handoff_demo3_workflow.md
Dom 5ea4960e65
Some checks failed
tests / Lint (ruff + black) (push) Successful in 1m50s
tests / Tests unitaires (sans GPU) (push) Failing after 1m50s
tests / Tests sécurité (critique) (push) Has been skipped
backup: snapshot post-démo GHT 2026-05-19
Backup état complet après enregistrement vidéo démo de bout en bout.
À utiliser comme point de référence pour la consolidation post-démo.

Changements majeurs de la session 18-19 mai :
- AIVA-URGENCE : page autonome avec preset URL + auto-focus chain
- Workflow Demo_urgence_3_db : merge linux_db + steps AIVA + pause humaine NoMachine
- Bypass LLM (static_result / static_text) dans replay_engine
  pour démos déterministes sans appel Ollama
- Fix api_stream:3013 — replay_paused au premier polling /next
- dag_execute : lift duration_ms vers top-level pour wait runtime
- NPM bypass auth /aiva-urgence/ via location ^~ (proxy_host/10.conf hors git)
- scripts/cancel-replays.sh — workaround Stop VWB qui ne purge pas la queue

Anchors visuels (468) forcés dans le commit pour garantir restorabilité.
DB workflows actuelle + ~12 .bak DB de la journée incluses.

Sujets identifiés pour consolidation post-démo (TODO) :
1. Bug VWB recapture anchor ne régénère pas le PNG
2. Léa client accumule état mémoire (restart périodique requis)
3. Stop VWB ne purge pas la queue serveur (lien manquant vers /replay/cancel)
4. Bug coord client mss tronqué 2560x60 → mapping Y cassé
5. delay_before/delay_after ignorés au runtime (fix partiel duration_ms)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 14:55:06 +02:00

14 KiB
Raw Blame History

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 :

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.200.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.pydom@192.168.1.11:C:/rpa_vision/agent_v1/ui/chat_window.py
  • executor.pydom@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 <demo_95 2> 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

  1. Bouton "Stop" disparaît côté VWB UI quand le replay reste actif côté serveur (désynchro). Confondant.

  2. 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".

  3. 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.

  4. 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

  1. Démarrage Léa très lent : 3-6 minutes au lancement (chargement modèles ML probablement). À investiguer.

  2. 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

# 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

# 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/<replay_id>/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 ?).