22 KiB
Protocole de test humain E2E — POC Aiva-vision
Date : 2026-06-01 Version : 1.0 Objet : valider le POC en conditions réelles — apprentissage → restitution → correction → persistance → replay supervisé → verdict Durée estimée : 45-60 minutes
1. Checklist pré-test
1.1 Services à vérifier
| Service | Port | Comment vérifier | GO/NO-GO |
|---|---|---|---|
| Ollama | 11434 | curl http://localhost:11434/api/tags — doit retourner la liste des modèles |
☐ |
| Streaming server | 5005 | curl http://localhost:5005/health ou ./svc.sh status |
☐ |
| Web Dashboard | 5001 | curl http://localhost:5001/health ou ouvrir http://localhost:5001 |
☐ |
| Agent Chat | 5004 | curl http://localhost:5004/health ou ouvrir http://localhost:5004 |
☐ |
| VWB Backend | 5002 | ./svc.sh status (optionnel si on ne teste pas via VWB) |
☐ |
| VWB Frontend | 3002 | curl http://localhost:3002 (optionnel) |
☐ |
Commande rapide pour tout vérifier d'un coup :
./svc.sh status
1.2 Modèles Ollama requis
ollama list
Vérifier la présence de :
qwen2.5vl:7b(ouqwen2.5vl:7b-rpa) — grounding visuelqwen2.5:7b— raisonnement texteqwen2.5:0.5b— intent recognition léger (fallback)
Si un modèle manque : ollama pull <nom> avant de continuer.
1.3 Compétences existantes dans le catalogue
Ouvrir le dashboard → onglet Knowledge Base. Vérifier la présence de :
| Compétence | État attendu |
|---|---|
key_win_r_wait_explorer_exe |
candidate |
key_ctrl_s_wait_notepad_exe |
candidate |
key_alt_f4_wait_windowsterminal_exe |
candidate |
Si le catalogue est vide : les fichiers YAML doivent exister dans data/competences/candidate/. Vérifier :
ls -la data/competences/candidate/
Si les fichiers existent mais n'apparaissent pas dans le dashboard, redémarrer le streaming server (./svc.sh restart streaming).
1.4 Agent Windows connecté
- Dans le dashboard, vérifier que la machine cible apparaît (ex:
DESKTOP-XXXXX_windows). - Si l'agent n'est pas connecté : le lancer depuis le poste Windows (
Lea_v*.zip→lea_agent.exe). - Machine cible : noter le
machine_idexact (affiché dans le dashboard ou dansdata/agents/).
1.5 État initial de la machine Windows
Avant toute manipulation :
- Fermer tous les dialogues parasites : boîtes de dialogue "Enregistrer", "Exécuter", confirmations, pop-up Windows Update
- Fermer les applications non nécessaires : tout garder minimal (bureau + applications de test uniquement)
- Vérifier que le bureau est visible : pas d'application plein écran
- Couper les notifications Windows : mode "Ne pas déranger" activé (Win+A → activer)
- Noter la résolution écran :
Win+I → Système → Écran(utile si un problème de positionnement survient)
1.6 Dossier de collecte des preuves
Créer un dossier de travail pour cette session de test :
mkdir -p /home/dom/ai/rpa_vision_v3/docs/demo/e2e-poc-$(date +%Y%m%d)
Ce dossier recevra les screenshots, logs, et verdicts collectés pendant le test.
2. Protocole pas-à-pas
Phase 1 — Démarrer Léa / agent Windows
Ce que l'opérateur fait :
- Vérifier que l'agent Windows est connecté (dashboard → page principale)
- Noter le
machine_idaffiché - Ouvrir l'agent chat (
http://localhost:5004) dans un navigateur
Ce que Léa fait : Rien (état IDLE)
Ce qu'on doit voir :
- Dashboard : machine connectée, statut "online"
- Agent chat : interface de conversation vide, bouton "Apprendre" visible
Critère GO/NO-GO :
- GO : agent chat accessible, machine connectée
- NO-GO : relancer l'agent Windows, vérifier le réseau, vérifier que le streaming server tourne
Preuve à collecter :
- Screenshot du dashboard montrant la machine connectée
- Copier le
machine_iddans un fichierpreuves/machine_id.txt
Phase 2 — Déclencher l'apprentissage depuis agent-chat
Ce que l'opérateur fait :
- Dans l'agent chat, taper :
lea apprends-moiou cliquer le bouton "Apprendre" si disponible - Observer la réponse de Léa
Ce que Léa fait :
- Transition IDLE → LISTENING → WAITING_USER_STOP
- Répond : "Je te regarde. Fais ce que tu veux m'apprendre, et dis-moi « stop » ou « j'ai fini » quand c'est terminé."
- Appelle
shadow_startcôté streaming server
Ce qu'on doit voir :
- Message de Léa confirmant qu'elle observe
- Side shadow actif côté streaming server (vérifiable via
curl http://localhost:5005/api/v1/shadow/sessionssi endpoint existe)
Critère GO/NO-GO :
- GO : Léa a répondu avec le message d'observation
- NO-GO : si
shadow_startéchoue → vérifier streaming server, token API (RPA_API_TOKEN), relancer
Preuve à collecter :
- Screenshot de la conversation agent-chat
- Copier le
session_id(affiché dans la réponse ou dans les logsagent_chat/state/)
Phase 3 — Observer une tâche courte
Tâche cible : Win+R → ouverture de la boîte "Exécuter"
Ce que l'opérateur fait (sur le poste Windows) :
- Basculer sur la session Windows (via RDP ou directement)
- Appuyer sur
Win+R - Vérifier que la boîte "Exécuter" s'ouvre
- Ne pas fermer la boîte "Exécuter" (elle servira de preuve visuelle)
- Revenir à l'agent chat
Ce que Léa fait :
- Capture les événements clavier (
key_presspourwin+r) - Capture les screenshots avant/après
- Enregistre la session brute
Ce qu'on doit voir :
- La boîte "Exécuter" apparaît à l'écran Windows
- Dans les logs du streaming server, des événements
key_presset des screenshots sont reçus
Critère GO/NO-GO :
- GO : la boîte "Exécuter" est visible à l'écran
- NO-GO : si
Win+Rne fonctionne pas → vérifier que le clavier Windows n'est pas bloqué, que RDP ne capture pas les touches
Preuve à collecter :
- Screenshot de la boîte "Exécuter" ouverte (depuis le poste Windows)
- Noter l'heure exacte de l'action
Phase 4 — Arrêter l'observation
Ce que l'opérateur fait :
- Dans l'agent chat, taper :
stopouj'ai fini
Ce que Léa fait :
- Reconnaît l'intent
USER_STOP_OBSERVE(regex, confiance > 0.9) - Transition WAITING_USER_STOP → ANALYZING → PRESENTING
- Appelle
shadow_stop+shadow_understandingcôté streaming server - Formate la restitution Option C
Ce qu'on doit voir :
- Léa répond avec un résumé de ce qu'elle a compris, par exemple :
Voilà ce que j'ai compris : 1. Touche → raccourci utilisé : « win + r » 2. Fenêtre « Exécuter » → ouverte C'est bien ça ou je me suis trompée quelque part ?
Critère GO/NO-GO :
- GO : Léa a restitué au moins 1 étape correcte
- NO-GO : si Léa dit "aucune étape comprise" → vérifier que les screenshots ont bien été capturés, que le shadow était actif
Preuve à collecter :
- Screenshot de la restitution Léa dans l'agent chat
- Copier le contenu JSON de
understandingdepuiscurl http://localhost:5005/api/v1/shadow/<session_id>/understanding
Phase 5 — Restitution et correction (Option C — formateur)
Ce que l'opérateur fait :
- Lire attentivement la restitution de Léa
- Si c'est correct : taper
ouiouc'est bonouparfait - Si c'est incorrect : taper
corrige l'étape 1 : [description correcte]
Ce que Léa fait :
- Si validation : transition ITERATING_FEEDBACK → NAMING
- Si correction : envoie le feedback au streaming server (
shadow_feedback), reçoit la nouvelle compréhension, reformule - Compte les corrections par étape (max 3 → sortie d'urgence)
Ce qu'on doit voir :
- Si corrigée : Léa reformule avec la correction appliquée
- Si validée : Léa demande le nom de la compétence
Critère GO/NO-GO :
- GO : Léa a soit validé soit corrigé avec reformulation
- NO-GO : si Léa ne comprend pas la correction → vérifier l'intent parser (logs), le regex, le fallback Ollama
Preuve à collecter :
- Screenshot de l'échange de correction (si applicable)
- Noter le nombre de corrections apportées
Phase 6 — Nommer la compétence et marquer les paramètres
Ce que l'opérateur fait :
- Donner un nom :
ouverture executeroulancer executer - Si Léa demande si une valeur est un paramètre : répondre "toujours" ou "c'est l'exemple du jour"
- Pour
Win+R, il n'y a pas de valeur saisie → aucun paramètre à marquer
Ce que Léa fait :
- Enregistre le nom de la compétence
- Cherche les steps avec des valeurs saisies → demande si ce sont des paramètres
- Transition NAMING → PERSISTING quand tout est marqué
Ce qu'on doit voir :
- Léa confirme : "C'est enregistré sous « ouverture executer » (slug
ouverture_executer). Paramètres : aucun."
Critère GO/NO-GO :
- GO : Léa a confirmé la persistance
- NO-GO : si
shadow_buildoucompetence_persistéchoue → vérifier logs streaming server, endpoint/api/v1/lea/competences/candidate/persist
Preuve à collecter :
- Screenshot du message de confirmation
- Vérifier que le YAML a été créé :
ls -la data/competences/candidate/ - Copier le contenu du YAML dans
preuves/competence_<slug>.yaml
Phase 7 — Tester via le dashboard (replay supervisé)
Ce que l'opérateur fait :
- Ouvrir le dashboard → onglet Knowledge Base
- Trouver la compétence fraîchement créée
- Cliquer Tester
- Une modale s'ouvre : "Prépare le test supervisé..."
- Avant de cliquer "Continuer le test" :
- Fermer la boîte "Exécuter" si elle est encore ouverte (étape critique — voir section 5 sur les faux succès)
- Vérifier que le bureau Windows est visible, aucune application parasite
- Cliquer Continuer le test
Ce que Léa fait :
- Envoie
Win+Rautomatiquement sur le poste Windows via l'agent - Attend que la boîte "Exécuter" apparaisse (wait_state)
- Se met en pause après l'action
Ce qu'on doit voir :
- La boîte "Exécuter" s'ouvre sur le poste Windows (~1-2 secondes après le clic "Continuer")
- La modale affiche "Valide le résultat de la compétence..." avec 3 boutons : Valide, Invalide, Incertain
Critère GO/NO-GO :
- GO : la boîte "Exécuter" apparaît et la modale de verdict est affichée
- NO-GO : si rien ne se passe → vérifier que l'agent Windows est connecté, que le replay a bien été lancé (logs streaming server)
Preuve à collecter :
- Screenshot de la boîte "Exécuter" ouverte (depuis Windows)
- Screenshot de la modale de verdict dans le dashboard
Phase 8 — Enregistrer le verdict
Ce que l'opérateur fait :
- Évaluer le résultat selon les critères :
- Valide ✅ : la boîte "Exécuter" apparaît, au premier plan, correcte
- Invalide ❌ : rien ne se passe, ou une autre fenêtre s'ouvre
- Incertain ⚠️ : la boîte apparaît mais n'est pas au premier plan
- Cliquer le bouton correspondant
- La modale se ferme, le dashboard se rafraîchit
Ce que Léa fait :
- Persiste le verdict dans
data/competence_verdicts/verdicts.jsonl - Le replay reprend puis se termine
Ce qu'on doit voir :
- Le dashboard revient à la liste Knowledge Base
- Un nouveau verdict est enregistré (vérifiable dans le fichier JSONL)
Critère GO/NO-GO :
- GO : le verdict est enregistré, le fichier JSONL contient une nouvelle entrée
- NO-GO : si le verdict n'est pas persisté → vérifier logs dashboard, endpoint
/api/v1/lea/competences/<id>/verdict
Preuve à collecter :
- Copier la dernière ligne du fichier
data/competence_verdicts/verdicts.jsonldanspreuves/verdict.jsonl - Screenshot du dashboard après verdict
Phase 9 — Nettoyer et recommencer (itération)
Pour un test robuste, répéter les phases 3-8 au moins 3 fois avec des contextes différents :
| Itération | Contexte | Tâche |
|---|---|---|
| 1 | Bureau propre | Win+R → Exécuter |
| 2 | Avec Notepad ouvert + texte non sauvegardé | Ctrl+S → Enregistrer sous |
| 3 | Avec Notepad ouvert au premier plan | Alt+F4 → Fermer |
Ou répéter 3 fois la même tâche avec des contextes légèrement différents (fenêtres ouvertes différentes, résolution modifiée, etc.) pour valider la robustesse.
3. Critères GO/NO-GO globaux
3.1 Qu'est-ce qui valide le POC ?
| Critère | Seuil |
|---|---|
| Apprentissage par observation | ✅ Léa doit restituer correctement au moins 1 tâche sur 3 tentées |
| Restitution compréhensible | ✅ Le texte Option C doit être lisible par un humain non-technique (phrases françaises, pas JSON) |
| Correction acceptée | ✅ Léa doit accepter et appliquer au moins 1 correction |
| Persistance | ✅ Le YAML doit être créé dans data/competences/candidate/ |
| Replay supervisé | ✅ Au moins 2 replays réussis sur 3 (la tâche est rejouée automatiquement) |
| Verdict humain | ✅ Les verdicts doivent être persistés dans le JSONL |
Le POC est validé si : au moins 2 des 3 compétences du batch 1 passent le cycle complet (apprentissage → restitution → persistance → replay → verdict) avec un verdict Valide.
3.2 Échecs acceptables
| Échec | Acceptable ? | Condition |
|---|---|---|
Alt+F4 → verdict Incertain |
✅ Oui | Le gap alt_f4_confirmation_dialog_not_covered est documenté |
| Ollama fallback timeout | ✅ Oui | Si les regex passent quand même (confiance > 0.9) |
| 1 correction sur 3 nécessaires | ✅ Oui | C'est dans le design (max 3 corrections/step) |
| Wait_state timeout sur Alt+F4 | ✅ Oui | Le success_marker est trop spécifique (artefact de session) |
3.3 Échecs bloquants
| Échec | Bloquant ? | Action |
|---|---|---|
shadow_start échoue systématiquement |
🔴 BLOQUANT | L'agent Windows ne communique pas avec le streaming server |
| Aucune restitution (understanding vide) | 🔴 BLOQUANT | Le pipeline shadow ne reconstruit pas les étapes |
competence_persist échoue |
🔴 BLOQUANT | La persistance ne fonctionne pas |
| Replay ne déclenche aucune action | 🔴 BLOQUANT | L'agent Windows ne reçoit pas les ordres |
| Verdict non persisté | 🔴 BLOQUANT | Le contrat de verdict n'est pas implémenté |
4. Preuves à collecter
4.1 Fichiers à vérifier après le test
| Fichier | Contenu | Comment vérifier |
|---|---|---|
data/competences/candidate/*.yaml |
Compétences persistées | ls -la + cat pour vérifier le contenu |
data/competence_verdicts/verdicts.jsonl |
Verdicts humains | tail -n 5 pour voir les derniers verdicts |
agent_chat/state/learn_*.json |
États des sessions d'apprentissage | ls -la agent_chat/state/ |
data/raw_sessions/<session_id>/ |
Sessions brutes (screenshots + événements) | Vérifier la présence de screenshots |
| Logs streaming server | journalctl -u rpa-streaming ou stdout du process |
Chercher les erreurs HTTP 5xx |
| Logs agent chat | stdout du process ou logs/agent_chat.log |
Vérifier les transitions d'état |
| Logs dashboard | stdout du process ou logs/dashboard.log |
Vérifier les appels replay/verdict |
4.2 Comment documenter un succès
Créer un fichier preuves/succes_<competence_slug>.md avec :
# Succès — <nom de la compétence>
**Date** : 2026-06-01
**Session ID** : learn_xxx
**Machine** : DESKTOP-XXXXX_windows
## Preuves
- Screenshot restitution : `preuves/screenshot_restitution_<slug>.png`
- Screenshot replay : `preuves/screenshot_replay_<slug>.png`
- YAML : `data/competences/candidate/<slug>.yaml`
- Verdict : dernière ligne de `data/competence_verdicts/verdicts.jsonl`
## Observations
- Nombre de corrections : X
- Temps d'apprentissage : ~X minutes
- Temps de replay : ~X secondes
4.3 Comment documenter un échec
Créer un fichier preuces/echec_<competence_slug>.md avec :
# Échec — <nom de la compétence>
**Date** : 2026-06-01
**Session ID** : learn_xxx
**Phase d'échec** : apprentissage / restitution / persistance / replay / verdict
## Symptôme
<description de ce qui s'est passé>
## Logs pertinents
<extraits de logs>
## Cause probable
<hypothèse>
## Reproduire
<étapes pour reproduire>
5. Risques de faux succès
5.1 Comment distinguer un vrai succès d'un faux positif
| Risque | Comment le détecter | Mitigation |
|---|---|---|
| Dialogue déjà ouvert avant le replay | Vérifier visuellement avant de cliquer "Continuer le test" | Fermer tous les dialogues parasites (checklist phase 1.5) |
| machine_id spoofé ou wrong target | Vérifier que le machine_id dans le verdict correspond à la machine de test |
Noter le machine_id en phase 1, le comparer dans le verdict JSONL |
| Léa envoie les touches mais une autre app les reçoit | Vérifier que la fenêtre cible est au premier plan avant le replay | Mettre la fenêtre cible au premier plan avant de cliquer "Continuer" |
| Wait_state passe par chance (la fenêtre était déjà là) | Le wait_state doit détecter un changement d'état, pas un état statique | Vérifier que le wait_state est bien un "appear" et pas un "already present" |
| Verdict enregistré mais replay non exécuté | Vérifier que step_results[] dans le verdict contient des steps avec status: success |
Lire le JSONL et vérifier le contenu de step_results |
5.2 Pièges spécifiques à éviter
-
RDP et les touches Windows : en session RDP,
Win+Rpeut être capturé par la machine locale au lieu de la machine distante.- Solution : dans le client RDP, options → Clavier local → "Appliquer les combinaisons de touches Windows : Sur le serveur distant"
-
Notifications Windows : une notification pop-up peut voler le focus pendant le replay.
- Solution : activer le mode "Ne pas distrub" avant le test
-
Windows Update : un redémarrage intempestif pendant le test.
- Solution : suspendre Windows Update temporairement
-
Agent Windows déconnecté : le replay est envoyé mais l'agent ne le reçoit pas.
- Solution : vérifier la connexion avant chaque replay (dashboard → statut machine)
-
Session shadow non fermée : si
shadow_stopn'a pas été appelé correctement, la session reste ouverte et peut interférer.- Solution : vérifier
agent_chat/state/— aucune session ne doit être dans un état non-terminal avant de recommencer
- Solution : vérifier
6. Bonus — Learning pack portable
6.1 Structurer les artefacts POC
Le risque : se retrouver avec des milliers de fichiers éparpillés entre data/raw_sessions/, data/competences/, data/competence_verdicts/, agent_chat/state/, et les screenshots.
Structure recommandée pour un POC exportable :
learning-poc-<date>/
├── manifest.json # Métadonnées : date, machine, opérateur, version du code
├── competences/
│ ├── <slug_1>.yaml # Compétences persistées
│ └── <slug_2>.yaml
├── verdicts/
│ └── verdicts.jsonl # Verdicts humains (copie du JSONL)
├── sessions/
│ ├── <session_id>/
│ │ ├── events.jsonl # Événements bruts
│ │ └── screenshots/ # Screenshots (compressés)
│ └── <session_id>/
├── audit/
│ ├── promotions.jsonl # Audit de promotion (si applicable)
│ └── test-log.md # Journal du test humain
└── proofs/
├── screenshot_restitution_*.png
├── screenshot_replay_*.png
└── succes_*.md / echec_*.md
6.2 Script d'export rapide
#!/bin/bash
# export_learning_poc.sh — créer un zip portable du POC
DATE=$(date +%Y%m%d)
DEST="learning-poc-${DATE}"
mkdir -p "$DEST"/{competences,verdicts,sessions,audit,proofs}
# Compétences candidate
cp data/competences/candidate/*.yaml "$DEST/competences/" 2>/dev/null
# Verdicts
cp data/competence_verdicts/verdicts.jsonl "$DEST/verdicts/" 2>/dev/null
# Audit
cp data/competences/promotions.jsonl "$DEST/audit/" 2>/dev/null
# Sessions récentes (dernières 24h)
find data/raw_sessions/ -maxdepth 1 -mtime -1 -type d -exec cp -r {} "$DEST/sessions/" \; 2>/dev/null
# States agent chat
cp agent_chat/state/learn_*.json "$DEST/audit/" 2>/dev/null
# Manifest
cat > "$DEST/manifest.json" <<EOF
{
"created_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"machine": "$(hostname)",
"operator": "${OPERATOR:-dom}",
"code_version": "$(git rev-parse --short HEAD 2>/dev/null || echo 'unknown')",
"competences_count": $(ls "$DEST/competences/"*.yaml 2>/dev/null | wc -l),
"verdicts_count": $(wc -l < "$DEST/verdicts/verdicts.jsonl" 2>/dev/null || echo 0)
}
EOF
# Zip
zip -r "${DEST}.zip" "$DEST/"
echo "Pack créé : ${DEST}.zip"
6.3 Export vers DGX Spark
Le learning pack ainsi structuré est autonome :
- Transférer le zip vers le DGX Spark :
scp learning-poc-*.zip user@dgx-spark:/path/to/imports/ - Importer côté DGX : le script d'import lit le
manifest.json, place les YAML dansdata/competences/candidate/, les verdicts dansdata/competence_verdicts/, et les sessions dansdata/raw_sessions/ - Vérifier l'import :
ls data/competences/candidate/+tail data/competence_verdicts/verdicts.jsonl
Invariant : le learning pack ne contient pas de modèles Ollama, pas de dépendances Python, pas de fichiers système. Uniquement des artefacts métier (YAML, JSONL, screenshots, events).
Annexe — Résumé visuel du flux
[IDLE] ──(apprends-moi)──> [LISTENING] ──> [WAITING_USER_STOP]
│
(stop / j'ai fini)
│
v
[DONE] <── [PERSISTING] <── [NAMING] <── [ITERATING_FEEDBACK] <── [ANALYZING]
│ │
│ (oui / corrige étape N)
│ │
+──> YAML + verdict JSONL <── Dashboard: Tester ──> Replay supervisé
│
Valide/Invalide/Incertain
Document créé le 2026-06-01. À suivre pas-à-pas pendant la démo.