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,169 @@
# Handoff session 2026-05-16 matinée — Contournement Ctrl+V NoMachine via ydotool
**Auteur** : Claude (session 10:00 → 15:10 CEST)
**Suite de** : `2026-05-16_handoff_demo3_workflow.md` (handoff du 16 mai 02:04, session 15→16 mai)
**Objectif** : démo vidéo "demo 95" jeudi 21 mai 2026 (J-5)
---
## 1. Problème résolu
Bloqueur n°1 du handoff précédent (« clics ne traversent pas NoMachine ») : partiellement résolu.
- **Clics Léa via NoMachine** : OK (traversent normalement, propagation pynput → SendInput Windows → NoMachine → VM)
- **Key combos avec Ctrl (Ctrl+V, Ctrl+Enter)** : **bloqués par NoMachine en mode "passive grab" par défaut**
Cause root identifiée (agent de recherche web) : NoMachine Player Windows en passive grab intercepte/avale la touche Ctrl quand "Grab the keyboard input" n'est pas explicitement activé. Source : [KB NoMachine AR01P00959](https://kb.nomachine.com/AR01P00959), [TR08R09811](https://www.nomachine.com/TR08R09811).
Solution 1 testée (chercher l'option dans le menu NoMachine 9.5.7) : **option introuvable dans l'UI**.
Solution 2 retenue : **bypasser entièrement NoMachine pour le paste/execute** en injectant les touches *directement dans la VM* via `ydotool` (compatible Wayland natif Ubuntu 26.04).
---
## 2. Architecture finale
```
[Léa Windows] --pynput--> [clics Windows] --NoMachine--> [VM Ubuntu DBeaver]
(clics OK) (focus zone éditeur SQL)
[hôte Linux] --SSH--> [VM Ubuntu]
prepare_clipboard.sh wl-copy + xsel (gardien boucle) → clipboards Wayland + X11 remplis
paste_and_execute.sh ydotool key 29:1 47:1 47:0 29:0 → Ctrl+V dans VM (bypasse NoMachine)
ydotool key 29:1 28:1 28:0 29:0 → Ctrl+Enter dans VM
```
---
## 3. Livrables créés
### Scripts (`~/ai/rpa_vision_v3/scripts/`)
| Fichier | Rôle |
|---|---|
| `payload_insert_morel.sql` | Payload INSERT SQL (1632 bytes, source de vérité) extrait du backup DB |
| `prepare_clipboard_linuxdb.sh` | Pousse payload sur VM, lance gardien boucle qui re-pousse clipboard Wayland + X11 toutes les 0.5s (sinon écrasé par sélection terminal/etc.) |
| `paste_and_execute_linuxdb.sh` | Vérifie ydotoold + gardien, déclenche Ctrl+V puis Ctrl+Enter via ydotool dans la VM |
### Modifications workflows.db (3 backups successifs)
```
workflows.db.backup_2026-05-16_102755_avant_clipboard_relay (avant 1er UPDATE)
workflows.db.backup_2026-05-16_111541_avant_rawkeys (tentative raw_keys, abandonnée)
workflows.db.backup_2026-05-16_150853_avant_suppr_steps_8_9 (avant suppression key_combos)
```
État final workflow `linux_db` (`wf_0786343fb2b7_1778879244`) : **7 steps**, tous des clics
```
0 double_click_anchor LINUX_demo
1 click_anchor
2 click_anchor
3 wait_for_anchor
4 click_anchor
5 click_anchor
6 click_anchor
```
Les ex-steps 7 (Ctrl+V) et 8 (Ctrl+Enter) ont été **supprimés** car remplacés par `paste_and_execute_linuxdb.sh` lancé à la main.
### DB demo_95 (VM)
Nettoyée : 3 rows propres (DURAND, MARTIN, PETIT), AUTOINCREMENT reset à 3. Prochain INSERT MOREL aura id=4.
---
## 4. Dépendances installées dans la VM (Ubuntu 26.04 Wayland)
```
wl-clipboard (wl-copy/wl-paste — clipboard Wayland)
openssh-server (SSH depuis Linux hôte)
xsel (xsel — clipboard X11/XWayland)
x11-xserver-utils (xhost — autoriser connexions X11 locales)
ydotool (1.0.4-3 — injection clavier uinput, Wayland-compatible)
```
Démarrage `ydotoold` daemon (pas de service systemd fourni par le paquet Ubuntu) :
```bash
echo 'loli' | sudo -S sh -c 'nohup setsid ydotoold --socket-path=/tmp/.ydotool_socket --socket-perm=0666 >/var/log/ydotoold.log 2>&1 </dev/null &'
```
(Inclus dans `paste_and_execute_linuxdb.sh` qui le relance si absent.)
---
## 5. À refaire après chaque reboot VM
1. **xhost** (autorise SSH non-interactif à utiliser xsel sur XWayland) :
```bash
sshpass -p loli ssh dom@192.168.122.132 \
"XAUTH=\$(ls /run/user/1000/.mutter-Xwaylandauth.* 2>/dev/null | head -1); \
DISPLAY=:0 XAUTHORITY=\$XAUTH xhost +local:"
```
2. **prepare_clipboard_linuxdb.sh** (relance gardien clipboard + daemon ydotoold via paste_and_execute si nécessaire)
---
## 6. Procédure démo finale
```bash
# AVANT la démo (1 fois, à froid après reboot) :
~/ai/rpa_vision_v3/scripts/prepare_clipboard_linuxdb.sh
# Pour chaque take de la démo :
# 1. Lancer workflow linux_db dans VWB (bouton bleu "→ Windows")
# 2. Attendre que Léa termine les 7 steps (clics visibles dans la VM via NoMachine)
# 3. Dans un terminal Linux hôte :
~/ai/rpa_vision_v3/scripts/paste_and_execute_linuxdb.sh
# → INSERT collé + exécuté instantanément dans DBeaver (visible à l'écran)
```
Vérif post-démo (compter rows) :
```bash
sshpass -p loli ssh dom@192.168.122.132 \
'python3 -c "import sqlite3; c=sqlite3.connect(\"/home/dom/demo_95\"); print(list(c.execute(\"SELECT id,nom_patient,date_creation FROM requalifications_t2a ORDER BY id DESC LIMIT 2\")))"'
```
Reset pour nouveau take :
```bash
sshpass -p loli ssh dom@192.168.122.132 \
'python3 -c "
import sqlite3
c = sqlite3.connect(\"/home/dom/demo_95\")
c.execute(\"DELETE FROM requalifications_t2a WHERE id > 3\")
c.execute(\"UPDATE sqlite_sequence SET seq = 3 WHERE name = '\''requalifications_t2a'\''\")
c.commit()"'
```
---
## 7. Dette technique créée par cette session
1. **Couplage hôte ↔ VM dur** : password `loli` en clair dans les scripts (`SSH_PASS`, `SUDO_PASS`). À remplacer par clé SSH + sudoers NOPASSWD pour ydotoold. Hors scope J-5.
2. **Gardien clipboard boucle 0.5s** : consomme CPU négligeable mais pas propre. À remplacer post-démo par un mécanisme dbus signal ou systemd path unit qui re-pousse seulement sur événement "clipboard cleared".
3. **paste_and_execute lancé à la main** : pas intégré au workflow VWB. Pour intégration auto post-démo, deux options :
- **A** : ajouter à Léa un nouveau action_type `shell_remote` (modif executor.py côté Windows + déploiement SCP)
- **B** : modifier `replay_engine.py` côté serveur pour exécuter localement (Linux hôte) certains step types au lieu de dispatcher à Léa
4. **xhost +local:** : large. À remplacer par xhost SI:localuser:dom post-démo.
5. **AUTOINCREMENT id=9** déjà consommé par les tests : reset à 3 pour la démo, mais à vérifier après chaque take.
---
## 8. État infra runtime
- Serveur `rpa-streaming` : actif (PID 308418 mentionné dans handoff précédent)
- ydotoold daemon : actif côté VM, socket `/tmp/.ydotool_socket` (0666)
- Gardien clipboard : actif côté VM (PID dans `/tmp/clipboard_guard.pid`)
- 3 clipboards remplis :
- Wayland VM (1633 bytes via wl-copy)
- X11 VM (1632 bytes via xsel)
- Windows (1632 bytes via Set-Clipboard — peut nécessiter re-push manuel si vidé)
---
## 9. Sessions du jour (16 mai)
- 06:52 → 07:55 : session reprise courte (fermée par Dom par erreur), test workflow → blocage Ctrl+V
- 10:00 → 15:10 : session diagnostic+fix complet
- Diagnostic clipboard Wayland ≠ X11 (XWayland ne synchronise pas)
- Fix : gardien double-write wl-copy + xsel + xhost +local:
- Diagnostic NoMachine passive grab mange Ctrl
- Fix : bypass via ydotool en SSH dans la VM
- Workflow linux_db simplifié (suppression key_combos)