backup: snapshot post-démo GHT 2026-05-19
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 é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>
This commit is contained in:
Dom
2026-05-19 14:55:06 +02:00
parent f2212e77e3
commit 5ea4960e65
627 changed files with 211348 additions and 169 deletions

View File

@@ -0,0 +1,283 @@
# 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 `<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
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/<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 ?).