docs: add POC specs, handoffs, and research notes

This commit is contained in:
Dom
2026-06-02 16:28:34 +02:00
parent 18ed6cb751
commit f2e9aac6b7
86 changed files with 27615 additions and 25 deletions

View File

@@ -0,0 +1,257 @@
# Backlog Horizon 1 Lea-first -- 2026-05-19
**Objet**
- Transformer `Horizon 1` en backlog d'execution concret.
- Se limiter au coeur produit `Lea-first`.
- Ne pas reintroduire `VWB` ou la demo comme reference produit.
## 1. Definition de done
Horizon 1 est termine quand les conditions suivantes sont vraies :
- un workflow Lea-first canonique peut etre capture puis rejoue sans passer par `VWB`
- `pause -> intervention humaine -> resume` est fiable et comprehensible
- les succes, echecs et corrections humaines alimentent vraiment la memoire persistante
- on dispose d'un gate minimal reproductible avant toute session terrain
- on dispose d'un runbook operatoire court pour lancer, observer et reprendre un replay
## 2. Baseline technique au 2026-05-19
### Pipeline reel retenu
Le chemin nominal reste :
`capture Lea -> stream serveur -> replay direct -> verification -> memory`
Fichiers pivots :
- `agent_v0/agent_v1/main.py`
- `agent_v0/agent_v1/core/executor.py`
- `agent_v0/server_v1/api_stream.py`
- `agent_v0/server_v1/stream_processor.py`
- `agent_v0/server_v1/resolve_engine.py`
- `agent_v0/server_v1/replay_learner.py`
- `agent_v0/server_v1/replay_memory.py`
- `core/learning/target_memory_store.py`
### Gate minimal deja vert
Tests executes localement le 2026-05-19 :
- `pytest -q tests/integration/test_replay_resume_acknowledgments.py tests/integration/test_loop_detector_replay.py tests/unit/test_target_memory_store.py`
- `pytest -q tests/integration/test_stream_processor.py tests/smoke/test_smoke_e2e_minimal.py`
- `pytest -q tests/integration/test_pause_for_human.py tests/unit/test_replay_critic.py`
Conclusion :
- les briques `resume`, `loop detector`, `target memory`, `stream processor` et le smoke critique offline sont deja exploitables comme premier garde-fou
- `pause_for_human` et `replay_critic` peuvent rejoindre ce garde-fou immediatement
- il reste un warning `pytest-asyncio` de configuration de boucle, non bloquant pour Horizon 1
- `tests/unit/test_policy_grounding_recovery_learning.py` n'est pas encore un gate portable : 4 tests `RecoveryEngine` tombent localement sur `ModuleNotFoundError: pynput`
- ce gate ne prouve pas encore le replay Windows reel de bout en bout
## 3. Ordre d'attaque
### Chantier H1-A -- Stabiliser le replay nominal
**But**
- faire du replay direct le chemin assume et observable
**Fichiers cibles**
- `agent_v0/server_v1/stream_processor.py`
- `agent_v0/server_v1/api_stream.py`
- `agent_v0/agent_v1/main.py`
- `agent_v0/agent_v1/core/executor.py`
**Taches**
- figer un workflow Lea-first canonique de reference
- verifier que `build_replay_from_raw_events(...)` produit des actions propres sur ce workflow
- verifier le couplage `session_id / machine_id / replay queue` pour eviter les confusions inter-machines
- tracer explicitement le passage `capture finalisee -> replay injecte -> action poll -> resultat recu`
**Acceptation**
- a partir d'une capture Lea, le serveur injecte une queue de replay exploitable sans bridge VWB
- l'agent recupere les actions avec le bon `machine_id`
- l'index courant du replay et le nombre d'actions restantes restent coherents jusqu'a completion ou pause
**Gate associe**
- `tests/integration/test_stream_processor.py`
- `tests/smoke/test_smoke_e2e_minimal.py`
### Chantier H1-B -- Fiabiliser la pause supervisee
**But**
- rendre deterministe et lisible la boucle `pause / aide humaine / reprise`
**Fichiers cibles**
- `agent_v0/server_v1/api_stream.py`
- `agent_v0/server_v1/loop_detector.py`
- `agent_v0/agent_v1/network/feedback_bus.py`
- `agent_v0/agent_v1/ui/chat_window.py`
**Taches**
- formaliser la matrice des causes de `paused_need_help`
- distinguer les pauses qui doivent reinjecter l'action de celles qui ne doivent pas la reinjecter
- verifier l'alignement entre payload serveur, bulle Lea et endpoint `/replay/{id}/resume`
- verifier que les acquittements de `safety_checks` restent obligatoires quand requis
**Causes a couvrir explicitement**
- `pause_for_human`
- `target_not_found`
- `wrong_window`
- `no_screen_change_strict`
- `system_dialog`
- `loop_detected`
**Acceptation**
- chaque pause expose une raison, un message et un comportement de reprise clairs
- `resume` ne relance pas une action qui etait une pause intentionnelle
- `cancel` vide proprement la queue
- aucun cas de pause ne laisse le replay dans un etat ambigu
**Gate associe**
- `tests/integration/test_replay_resume_acknowledgments.py`
- `tests/integration/test_loop_detector_replay.py`
- `tests/integration/test_pause_for_human.py`
### Chantier H1-C -- Faire apprendre la memoire de replay
**But**
- s'assurer que la boucle d'apprentissage est branchee sur le runtime reel, pas seulement documentee
**Fichiers cibles**
- `agent_v0/server_v1/api_stream.py`
- `agent_v0/server_v1/replay_learner.py`
- `agent_v0/server_v1/replay_memory.py`
- `agent_v0/server_v1/resolve_engine.py`
- `core/learning/target_memory_store.py`
**Taches**
- verifier le contrat `actual_position` entre agent et serveur
- verifier que `memory_record_success()` ne se declenche qu'apres succes verifie
- verifier que `memory_record_failure()` decremente bien la fiabilite utile
- verifier que `record_human_correction()` nourrit bien `target_memory.db`
- tracer un cas de `memory_lookup HIT` jusqu'a la resolution suivante
**Acceptation**
- au moins un cas reel montre la sequence :
`target_not_found ou no_screen_change_strict -> correction humaine -> stockage -> hit memoire sur replay suivant`
- les fichiers `data/learning/replay_results/*.jsonl` et `data/learning/events/*/resolution_events.jsonl` sont utiles et lisibles
- `target_memory.db` contient des entrees correspondant a des cibles reelles du workflow canonique
**Gate associe**
- `tests/unit/test_target_memory_store.py`
- `tests/unit/test_policy_grounding_recovery_learning.py`
- `tests/unit/test_replay_critic.py`
### Chantier H1-D -- Runbook et gate terrain
**But**
- disposer d'un protocole d'execution simple avant toute session reelle
**Fichiers cibles**
- `agent_v0/deploy/test_replay_diag.py`
- `tests/smoke/test_smoke_e2e_minimal.py`
- nouvelle doc de runbook Lea-first
**Taches**
- definir un gate local minimum avant session terrain
- definir un workflow canonique a jouer a blanc avant toute session utilisateur
- ecrire une checklist courte `avant capture / avant replay / pendant pause / apres correction`
- rendre explicites les artefacts a conserver apres un incident
**Acceptation**
- on sait dire en moins de 5 minutes si la machine est "prete a rejouer"
- on sait quoi collecter en cas d'echec sans improviser
- on sait faire une reprise propre apres une pause supervisee
**Gate associe**
- `python agent_v0/deploy/test_replay_diag.py`
- `pytest -q tests/smoke/test_smoke_e2e_minimal.py`
## 4. Sequence immediate
### Etape 1 -- Geler le gate Horizon 1
- conserver les 5 fichiers de test deja verts comme premier noyau
- ajouter maintenant `tests/integration/test_pause_for_human.py`
- ajouter maintenant `tests/unit/test_replay_critic.py`
- garder `tests/unit/test_policy_grounding_recovery_learning.py` en seconde couronne tant que la dependance `pynput` n'est pas geree proprement pour le contexte de test
### Etape 2 -- Choisir le workflow canonique
- un seul workflow Lea-first
- court
- peu de fenetres
- au moins un clic, une saisie, une verification, une pause possible
### Etape 3 -- Prioriser les corrections
Ordre de traitement :
1. ambiguite de replay `session_id / machine_id / queue`
2. cas de pause/reprise incoherents
3. apprentissage non persiste ou non reutilise
4. runbook et collecte d'artefacts
## 5. Integration de l'audit Claude
Reference :
- [AUDIT_LEA_FIRST_RUNTIME_2026-05-19.md](/home/dom/ai/rpa_vision_v3/docs/AUDIT_LEA_FIRST_RUNTIME_2026-05-19.md)
Important :
- dans ce repo, `agent_v0/` reste le **conteneur de chemin** du code courant
- l'audit qui parle de `agent_v0/agent_v1` et `agent_v0/server_v1` parle donc bien du runtime actuel
### Points valides
- `record_human_correction()` est reellement casse
- la capture via `mss.monitors[1]` n'a pas de garde contre des dimensions aberrantes
- `_replay_active` est mal gere cote client pendant `replay_paused=true`
### Points a corriger dans la formulation
- le replay direct **existe bien** via `POST /api/v1/traces/stream/replay-session`
- ce endpoint charge `live_events.jsonl`, appelle `build_replay_from_raw_events(...)`, puis injecte la queue de replay
- en revanche, `finalize` n'enchaine pas ce chemin automatiquement et la surface produit reste morcelee
- `build_workflow_replay()` est bien orphelin, mais cela ne prouve pas que le replay direct n'existe pas
- le gating memoire sur `window_title` est reel
- mais sur le flux Lea-first natif, `build_replay_from_raw_events(...)` propage deja `window_title` dans les clics enrichis
- le risque est donc surtout : actions non enrichies, cas degradés, et workflows non Lea-first ou incompletés
- `core/learning/*` non branche au runtime serveur est un constat juste
- mais pour Horizon 1, ce n'est pas un blocage du coeur produit si on assume que `TargetMemoryStore` est la seule boucle d'apprentissage necessaire court terme
### Reclassement pratique pour Horizon 1
- `P0 reel` : correction humaine cassee
- `P0 reel` : corruption possible des captures moniteur
- `P1 reel` : pause/reprise desynchronisee cote client
- `P1 structurant` : absence de chainage produit propre `finalize -> replay-session`
- `P1 risque` : memoire trop dependante de `window_title`
- `P2 assume` : branches `core/learning/*` hors chemin nominal court terme
## 6. Ce que je retiens pour la suite immediate
Ordre de traitement mis a jour :
1. corriger `record_human_correction()` pour rouvrir l'apprentissage supervise
2. blinder la capture moniteur contre les dimensions aberrantes
3. corriger `_replay_active` sur `action=null + replay_paused=true`
4. definir si `finalize` doit proposer ou lancer explicitement `replay-session`
5. renforcer le fallback `window_title` pour le record / lookup memoire
## 7. Premier ticket d'execution
Le premier ticket que je lancerais sans attendre est :
**"Corriger `record_human_correction()` et valider un vrai cycle correction -> target_memory.db -> hit memoire."**
Pourquoi :
- c'est le bug le plus net et le plus rentable de l'audit
- il touche directement la promesse produit Lea-first
- il fournit ensuite un cas de validation concret pour Horizon 1

View File

@@ -0,0 +1,313 @@
# Cadrage coeur produit Lea -- 2026-05-19
**But**
- Repartir du vrai produit.
- Ne pas confondre le coeur `Lea-first` avec la demo recente ni avec le VWB.
- Distinguer ce qui est **branche au runtime**, ce qui est **partiellement branche**, et ce qui releve surtout de `VWB/demo/veille`.
## 1. Definition du coeur produit
Le coeur produit n'est pas :
- un canvas de creation manuelle de workflows
- un assembleur de demo
- un bench de modeles
Le coeur produit est :
- **un agent local Lea** qui observe un humain,
- **un serveur de streaming/replay** qui reconstruit une procedure exploitable,
- **une boucle d'apprentissage** qui s'ameliore avec les replays, les verifications et les corrections humaines.
En une ligne :
`capture Lea -> streaming serveur -> reconstruction procedure -> replay supervise -> apprentissage persistant`
## 2. Ce qui est reellement branche aujourd'hui
### A. Capture Lea -> serveur : OUI, c'est le vrai chemin de base
Cote client :
- `agent_v0/agent_v1/main.py`
- `agent_v0/agent_v1/core/captor.py`
- `agent_v0/agent_v1/network/streamer.py`
Ce que fait Lea aujourd'hui :
- capture evenements clavier/souris
- capture screenshots/crops
- ajoute du contexte UIA et fenetre
- streame vers le serveur via :
- `/register`
- `/event`
- `/image`
- `/finalize`
Conclusion :
- **la capture et le streaming Lea sont bien le socle produit deja branche**
### B. Reconstruction immediate d'un replay depuis la capture : OUI
Cote serveur :
- `agent_v0/server_v1/stream_processor.py`
- fonction `build_replay_from_raw_events(...)`
Ce chemin prend `live_events.jsonl` et produit directement :
- des actions rejouables
- des clics enrichis visuellement
- des intentions et screenshots attendus
- une consolidation avec l'historique d'apprentissage
Conclusion :
- **il existe deja un chemin capture -> replay exploitable sans passer par le VWB**
- c'est un candidat fort pour le vrai noyau produit court terme
### C. Replay d'execution Lea : OUI
Cote serveur :
- `agent_v0/server_v1/api_stream.py`
- `agent_v0/server_v1/replay_engine.py`
- `agent_v0/server_v1/resolve_engine.py`
Cote client :
- `agent_v0/agent_v1/main.py`
- `agent_v0/agent_v1/core/executor.py`
Ce qui est branche :
- le serveur alimente une queue de replay
- Lea poll `/replay/next`
- Lea execute
- le serveur resout les cibles, verifie, enregistre les resultats
Conclusion :
- **le replay Lea pilote par serveur est bien un axe central du produit**
### D. Apprentissage persistant sur le replay : OUI, mais partiel
Modules reels :
- `agent_v0/server_v1/replay_learner.py`
- `agent_v0/server_v1/replay_memory.py`
- `core/learning/target_memory_store.py`
Ce qui est reellement branche :
- historisation des resultats d'actions de replay
- stockage des corrections humaines
- lookup memoire avant cascade de resolution couteuse
- enregistrement des succes verifies apres action
Conclusion :
- **la boucle d'apprentissage "apres replay" existe vraiment**
- **c'est aujourd'hui le morceau le plus concret de l'apprentissage Lea**
## 3. Ce qui existe mais n'est pas encore le coeur runtime
### A. ShadowObserver / ShadowValidator : presents, mais pas au centre
Modules :
- `core/workflow/shadow_observer.py`
- `core/workflow/shadow_validator.py`
- endpoints `api_stream.py` : `/api/v1/shadow/*`
Constat important :
- le client Lea ne les appelle pas nativement
- aucun appelant clair n'apparait dans `agent_v0/agent_v1/`
- aucun appelant clair n'apparait non plus dans `visual_workflow_builder/` ou `agent_chat/`
Conclusion :
- **le mode shadow est une brique prometteuse, mais pas encore un flux produit dominant**
### B. WorkflowIR -> ExecutionPlan : presents, mais pas encore la voie nominale
Modules :
- `core/workflow/ir_builder.py`
- `core/workflow/execution_compiler.py`
- `agent_v0/server_v1/execution_plan_runner.py`
- endpoints `api_stream.py` :
- `/api/v1/traces/stream/workflow/compile`
- `/api/v1/traces/stream/replay/plan`
Constat :
- ce pipeline est bien code
- il compile une session en artefacts plus propres et plus deterministes
- mais il n'est pas pilote naturellement par le client Lea
- il ne semble pas etre le chemin principal utilise au quotidien
Conclusion :
- **c'est probablement la meilleure direction architecturale**
- **ce n'est pas encore le coeur produit effectivement adopte**
### C. WorkflowPipeline / GraphBuilder / LearningManager : reels, mais plutot couche moteur
Modules :
- `core/pipeline/workflow_pipeline.py`
- `core/graph/graph_builder.py`
- `core/learning/learning_manager.py`
Constat :
- ce socle exprime tres bien l'ambition du produit
- il construit des workflows depuis les sessions
- il gere des etats d'apprentissage
Mais :
- `LearningManager` est en memoire, pas le centre d'un flux de promotion produit visible
- cette couche n'est pas encore le protocole operatoire dominant Lea
Conclusion :
- **c'est le moteur conceptuel**
- **pas encore la boucle produit la plus nette pour les 15 prochains jours**
## 4. Ce qui releve du VWB, pas du coeur produit
Le VWB sert aujourd'hui surtout a :
- creer ou editer manuellement des workflows
- importer des workflows appris
- exporter un workflow vers Lea
- lancer une execution via proxy vers le streaming server
Indices forts dans le repo :
- `visual_workflow_builder/backend/api_v3/learned_workflows.py`
- `visual_workflow_builder/backend/api_v3/execute.py`
- `visual_workflow_builder/frontend_v4/src/services/api.ts`
Le VWB n'est donc pas :
- la source unique de l'apprentissage Lea
- le protocole naturel de capture du savoir-faire
- la definition du produit coeur
Conclusion :
- **le VWB est un outil satellite d'authoring, d'inspection et de bridge**
- **il ne doit pas definir la direction du produit Lea-first**
## 5. Ce qui releve surtout de la demo ou de la veille
Hors coeur produit immediat :
- workflows reconstruits manuellement pour la demo
- corrections specifiques a la maquette de demo
- benches de modeles et comparatifs
- experiments UX ou UX debug non relies a la capture/replay Lea
- documentation strategique ou speculative non branchee
Cela peut avoir de la valeur :
- comme preuve
- comme R&D
- comme materiau commercial
Mais ce n'est pas le socle a partir duquel il faut juger l'etat du produit.
## 6. Matrice simple
### A. Coeur produit branche aujourd'hui
- capture client Lea
- streaming temps reel
- replay serveur -> client Lea
- resolution visuelle au runtime
- apprentissage persistant post-replay
### B. Coeur produit partiellement branche
- observation shadow pendant l'enregistrement
- validation/correction structurée du savoir-faire
- compilation systematique en WorkflowIR/ExecutionPlan
- promotion explicite observation -> coaching -> autonomie
### C. Satellite produit
- VWB
- dashboard de supervision
- agent_chat
### D. Hors coeur / exploration
- benches modeles
- comparatifs frameworks
- documents de vision non encore materialises dans le chemin runtime
## 7. Ce qui manque pour que Lea "apprenne vraiment"
### 1. Un chemin unique assume
Aujourd'hui, plusieurs chemins coexistent :
- capture -> replay direct
- capture -> GraphBuilder/workflow
- capture -> shadow -> WorkflowIR
- WorkflowIR -> ExecutionPlan -> replay
Probleme :
- tant qu'un chemin nominal n'est pas assume, l'energie se disperse
Ce qu'il faut :
- choisir un pipeline principal
- releguer les autres en support, migration ou R&D
### 2. Une validation utilisateur native sur le chemin Lea
Le mode shadow et la validation structurée existent, mais ne semblent pas au centre de l'usage client.
Ce qu'il faut :
- que Lea sache naturellement :
- observer
- montrer ce qu'elle a compris
- recevoir correction/validation
- cristalliser un artefact rejouable
### 3. Une vraie politique de promotion de l'apprentissage
Le repo contient des concepts d'etat d'apprentissage, mais pas encore un protocole operatoire simple du style :
- observe N fois
- replaye sous supervision
- apprend des corrections
- passe en autonomie sur critere
Ce qu'il faut :
- des seuils, des traces, et un etat visible par workflow
### 4. Une alimentation effective de la memoire
La memoire persistante est branchee, mais sa valeur depend de :
- replays repetes
- validations reelles
- corrections humaines capturees proprement
Ce qu'il faut :
- 1 ou 2 cas terrain qui nourrissent vraiment la memoire
- une verification que la base d'apprentissage grossit utilement
## 8. Consequence pratique pour la remise en ordre
Si on parle du vrai produit, il faut travailler dans cet ordre :
1. **Cartographier et assumer le pipeline nominal Lea-first**
2. **Verifier le flux capture -> replay -> apprentissage**
3. **Decider ce qui, dans shadow/IR/ExecutionPlan, doit devenir le prochain cran officiel**
4. **Sortir le VWB du role de reference produit**
5. **Ranger la veille et la demo comme materiaux satellites**
## 9. Point de depart recommande
Le bon point de depart n'est pas :
- la demo recente
- le VWB
- la doc speculative
Le bon point de depart est :
- `agent_v0/agent_v1/`
- `agent_v0/server_v1/`
- `core/learning/`
- `core/workflow/` uniquement pour distinguer le branche du promis
## 10. Decision simple
**Formulation recommandee**
"Le produit coeur est Lea qui observe, rejoue et apprend.
Le VWB est un outil satellite.
Le pipeline nominal doit etre pense depuis Lea, pas depuis le canvas."
## 11. Sources principales
- [agent_v0/agent_v1/main.py](/home/dom/ai/rpa_vision_v3/agent_v0/agent_v1/main.py)
- [agent_v0/agent_v1/network/streamer.py](/home/dom/ai/rpa_vision_v3/agent_v0/agent_v1/network/streamer.py)
- [agent_v0/server_v1/stream_processor.py](/home/dom/ai/rpa_vision_v3/agent_v0/server_v1/stream_processor.py)
- [agent_v0/server_v1/api_stream.py](/home/dom/ai/rpa_vision_v3/agent_v0/server_v1/api_stream.py)
- [agent_v0/server_v1/replay_learner.py](/home/dom/ai/rpa_vision_v3/agent_v0/server_v1/replay_learner.py)
- [agent_v0/server_v1/replay_memory.py](/home/dom/ai/rpa_vision_v3/agent_v0/server_v1/replay_memory.py)
- [core/learning/target_memory_store.py](/home/dom/ai/rpa_vision_v3/core/learning/target_memory_store.py)
- [core/workflow/shadow_observer.py](/home/dom/ai/rpa_vision_v3/core/workflow/shadow_observer.py)
- [core/workflow/ir_builder.py](/home/dom/ai/rpa_vision_v3/core/workflow/ir_builder.py)
- [core/workflow/execution_compiler.py](/home/dom/ai/rpa_vision_v3/core/workflow/execution_compiler.py)
- [docs/VISION_RPA_INTELLIGENT.md](/home/dom/ai/rpa_vision_v3/docs/VISION_RPA_INTELLIGENT.md)
- [docs/CARTE_FONCTIONNELLE_2026-05-08.md](/home/dom/ai/rpa_vision_v3/docs/CARTE_FONCTIONNELLE_2026-05-08.md)

View File

@@ -0,0 +1,403 @@
# Cartographie executable du pipeline Lea-first -- 2026-05-19
**Objet**
- Decrire le pipeline reel du produit a partir du code branche.
- Montrer les artefacts, endpoints, workers et bifurcations.
- Distinguer clairement :
- le **nominal actuel**
- les **branches optionnelles**
- les **outils satellites** (`VWB`)
## 1. Vue d'ensemble
Le pipeline reel se lit aujourd'hui comme ceci :
```text
Lea (capture locale)
-> stream register/event/image/finalize
-> live session serveur
-> deux suites possibles
Suite A: replay direct
live_events.jsonl
-> build_replay_from_raw_events
-> queue de replay
-> Lea execute
-> verify + learning
Suite B: apprentissage structure
session finalisee
-> worker VLM
-> ScreenStates + embeddings
-> GraphBuilder
-> workflow JSON appris
Suite C: compilation V4 (optionnelle)
live_events.jsonl
-> IRBuilder
-> WorkflowIR
-> ExecutionCompiler
-> ExecutionPlan
-> replay/plan
```
## 2. Pipeline nominal actuel
### Etape 1 -- Capture locale par Lea
Fichiers principaux :
- `agent_v0/agent_v1/main.py`
- `agent_v0/agent_v1/core/captor.py`
- `agent_v0/agent_v1/network/streamer.py`
Flux :
1. `start_session()` cree `session_id`, `VisionCapturer`, `TraceStreamer`, `EventCaptorV1`.
2. `_on_event_bridge()` enrichit chaque action avec :
- `machine_id`
- `window`
- `screenshot_id`
- `vision_info`
- `window_capture`
3. Lea pousse :
- les evenements via `push_event`
- les screenshots via `push_image`
4. un `action_result` est capture 1s apres l'action
5. des heartbeats sont envoyes pendant l'enregistrement et hors enregistrement
Sorties locales utiles :
- session de capture locale Lea
- crops et screenshots associes
- stream HTTP vers le serveur
### Etape 2 -- Reception et persistance serveur
Fichiers principaux :
- `agent_v0/server_v1/api_stream.py`
- `agent_v0/server_v1/live_session_manager.py`
Endpoints principaux :
- `POST /api/v1/traces/stream/register`
- `POST /api/v1/traces/stream/event`
- `POST /api/v1/traces/stream/image`
- `POST /api/v1/traces/stream/finalize`
Ce qui est persiste :
- `data/training/live_sessions/{machine_id}/{session_id}/live_events.jsonl`
- `data/training/live_sessions/{machine_id}/{session_id}/shots/*.png`
- etat session en memoire via `LiveSessionManager`
Remarques importantes :
- les evenements sont journalises en JSONL
- les screenshots `shot_*_full` sont stockes sans analyse GPU immediate
- les heartbeats et screenshots de resultat sont gardes, mais pas tous analyses
### Etape 3 -- Generation immediate d'un replay direct
Fichiers principaux :
- `agent_v0/server_v1/stream_processor.py`
- `agent_v0/server_v1/api_stream.py`
Fonction centrale :
- `build_replay_from_raw_events(...)`
Ce qu'elle produit a partir de `live_events.jsonl` :
- actions normalisees
- fusion de texte saisi
- sanitization clavier
- `visual_mode` pour les clics
- `target_spec` enrichi
- `expected_screenshot_b64`
- `expected_window_title`
- `intention`
- consolidation avec l'historique du `ReplayLearner`
Conclusion :
- **c'est le chemin le plus direct entre observation Lea et replay exploitable**
### Etape 4 -- Replay serveur vers Lea
Fichiers principaux :
- `agent_v0/server_v1/api_stream.py`
- `agent_v0/server_v1/replay_engine.py`
- `agent_v0/server_v1/resolve_engine.py`
- `agent_v0/agent_v1/core/executor.py`
- `agent_v0/agent_v1/main.py`
Endpoints :
- `GET /api/v1/traces/stream/replay/next`
- `POST /api/v1/traces/stream/replay/result`
- `POST /api/v1/traces/stream/replay/{replay_id}/resume`
- `POST /api/v1/traces/stream/replay/{replay_id}/cancel`
Flux :
1. le serveur alimente une queue de replay
2. Lea poll `replay/next`
3. le serveur execute au besoin les actions serveur (`extract_text`, `t2a_decision`, etc.) avant de renvoyer une action visuelle
4. Lea execute l'action
5. Lea renvoie le resultat
6. le serveur verifie et met a jour l'etat du replay
Conclusion :
- **c'est le runtime produit actif**
### Etape 5 -- Verification et apprentissage post-replay
Fichiers principaux :
- `agent_v0/server_v1/replay_learner.py`
- `agent_v0/server_v1/replay_memory.py`
- `core/learning/target_memory_store.py`
Ce qui se passe apres chaque action :
- enregistrement du resultat d'action
- stockage des corrections humaines
- `memory_record_success()` apres succes verifie
- `memory_record_failure()` sur echec
- `memory_lookup()` avant la cascade de resolution au prochain replay
Artefacts d'apprentissage :
- `data/learning/replay_results/*.jsonl`
- `data/learning/events/YYYY-MM-DD/resolution_events.jsonl`
- `data/learning/target_memory.db`
Conclusion :
- **la memoire de replay est le bloc d'apprentissage le plus concret aujourd'hui**
## 3. Branche d'apprentissage structurel via worker
### Objectif
Construire un workflow appris a partir d'une session finalisee.
### Fichiers principaux
- `agent_v0/server_v1/run_worker.py`
- `agent_v0/server_v1/stream_processor.py`
- `core/pipeline/workflow_pipeline.py`
- `core/graph/graph_builder.py`
### Flux
1. `finalize` marque la session et l'ajoute a `data/training/_worker_queue.txt`
2. `run_worker.py` lit la queue
3. `reprocess_session()` recharge les screenshots `shot_*_full.png`
4. `process_screenshot()` produit :
- `ScreenState`
- embedding
- indexation FAISS
5. `finalize_session()` convertit vers `RawSession`
6. `GraphBuilder.build_from_session(...)` construit le workflow
7. `_persist_workflow()` sauvegarde le workflow appris
Artefacts :
- `data/training/_worker_queue.txt`
- `data/training/workflows/{machine_id}/wf_*.json`
Conclusion :
- **ce chemin construit du savoir-faire structure, mais en arriere-plan**
- **il n'est pas le replay nominal court terme**
## 4. Branche V4 compilee
### Objectif
Transformer une session en artefacts plus propres :
- `WorkflowIR`
- `ExecutionPlan`
### Fichiers principaux
- `core/workflow/ir_builder.py`
- `core/workflow/execution_compiler.py`
- `agent_v0/server_v1/execution_plan_runner.py`
- `agent_v0/server_v1/api_stream.py`
### Endpoints
- `POST /api/v1/traces/stream/workflow/compile`
- `POST /api/v1/traces/stream/replay/plan`
### Flux
1. lecture de `live_events.jsonl`
2. `IRBuilder.build(...)`
3. sauvegarde en `data/workflows_ir/*.json`
4. `ExecutionCompiler.compile(...)`
5. sauvegarde en `data/plans/*.json`
6. `execution_plan_to_actions(...)`
7. injection dans la queue de replay
Artefacts :
- `data/workflows_ir/*.json`
- `data/plans/*.json`
Conclusion :
- **c'est la branche architecturale la plus propre**
- **mais elle n'est pas encore pilotee naturellement par Lea**
## 5. Branche shadow
### Fichiers principaux
- `core/workflow/shadow_observer.py`
- `core/workflow/shadow_validator.py`
- `agent_v0/server_v1/api_stream.py`
### Endpoints
- `POST /api/v1/shadow/start`
- `POST /api/v1/shadow/stop`
- `POST /api/v1/shadow/feedback`
- `GET /api/v1/shadow/{session_id}/understanding`
- `POST /api/v1/shadow/build`
### Role
- observer la capture en temps reel
- construire une comprehension incrementale
- laisser l'utilisateur valider/corriger
- produire un `WorkflowIR`
### Constat
- le code est present
- le serveur l'accepte
- mais le client Lea ne semble pas le piloter nativement
Conclusion :
- **shadow est branche cote serveur**
- **shadow n'est pas encore la voie nominale Lea-first**
## 6. Role reel du VWB
### Ce qu'il fait
Fichiers principaux :
- `visual_workflow_builder/backend/api_v3/learned_workflows.py`
- `visual_workflow_builder/backend/api_v3/execute.py`
- `visual_workflow_builder/frontend_v4/src/services/api.ts`
Role :
- lister les workflows appris
- les importer dans le VWB
- les exporter vers Lea
- lancer une execution via proxy
Conclusion :
- **le VWB est un bridge et un outil d'authoring**
- **il ne doit pas etre lu comme le pipeline coeur du produit**
## 7. Artefacts de reference
### Capture live
- `data/training/live_sessions/{machine_id}/{session_id}/live_events.jsonl`
- `data/training/live_sessions/{machine_id}/{session_id}/shots/*.png`
### Sessions serveur en memoire / persistance
- `data/training/live_sessions/`
- `data/training/live_sessions/...`
### Queue worker
- `data/training/_worker_queue.txt`
- `data/training/_replay_active.lock`
### Workflows appris
- `data/training/workflows/{machine_id}/wf_*.json`
### Pipeline V4
- `data/workflows_ir/*.json`
- `data/plans/*.json`
### Apprentissage replay
- `data/learning/replay_results/*.jsonl`
- `data/learning/events/YYYY-MM-DD/resolution_events.jsonl`
- `data/learning/target_memory.db`
## 8. Ce qui est nominal, ce qui ne l'est pas
### Nominal actuel
- capture Lea
- streaming serveur
- replay direct
- verification
- memoire post-replay
### Non nominal mais reel
- worker qui fabrique un workflow appris
- compile V4 vers `ExecutionPlan`
- shadow avec validation
### Satellite
- import/export VWB
- edition manuelle VWB
- lancement VWB via proxy
## 9. Point de decision architectural
Le repo contient aujourd'hui **trois chemins serieux** :
### Option A -- assumer le direct replay comme v1 produit
Chemin :
- capture Lea
- `build_replay_from_raw_events`
- replay
- apprentissage memoire
Avantage :
- c'est le plus branche
- c'est le plus immediat
Limite :
- moins propre conceptuellement
- moins explicite sur la validation du savoir-faire
### Option B -- promouvoir `shadow -> WorkflowIR -> ExecutionPlan`
Chemin :
- capture Lea
- observation shadow
- correction/validation
- compilation
- replay de plan
Avantage :
- pipeline plus propre
- meilleure explicitation du savoir-faire
Limite :
- pas encore le flux naturel pilote par le client
### Option C -- continuer a passer par VWB
Ce n'est pas recommande comme coeur produit, car cela deplace la reference
du produit vers un outil satellite.
## 10. Recommandation de lecture
Si l'objectif est de remettre le produit en ordre, lire dans cet ordre :
1. `agent_v0/agent_v1/main.py`
2. `agent_v0/agent_v1/network/streamer.py`
3. `agent_v0/server_v1/api_stream.py`
4. `agent_v0/server_v1/stream_processor.py`
5. `agent_v0/server_v1/replay_learner.py`
6. `agent_v0/server_v1/replay_memory.py`
7. `core/workflow/ir_builder.py`
8. `core/workflow/execution_compiler.py`
9. `visual_workflow_builder/backend/api_v3/learned_workflows.py`
## 11. Conclusion courte
Le produit reel aujourd'hui n'est pas :
- `VWB -> workflow manuel -> replay`
Le produit reel aujourd'hui est plutot :
- `Lea observe -> le serveur reconstruit -> Lea rejoue -> le systeme apprend`
La vraie question n'est donc pas "faut-il garder le VWB au centre ?"
La vraie question est :
**quel pipeline Lea-first on officialise comme voie nominale :**
- le replay direct deja branche,
- ou la voie `shadow/IR/ExecutionPlan` qu'il faut maintenant faire monter en puissance ?

View File

@@ -0,0 +1,307 @@
# Feuille de route produit Lea-first -- 2026-05-19
**But**
- Transformer le recadrage technique en arbitrages produit.
- Dire clairement ce qui reste au centre, ce qui sort du centre, et ce qu'on fait monter en puissance.
- Donner une sequence d'execution lisible pour les prochaines semaines.
## 1. These produit
Le produit n'est pas un editeur de workflows.
Le produit est **Lea**, un agent local qui :
- observe un humain,
- rejoue une procedure,
- demande de l'aide quand elle ne sait pas,
- memorise les corrections,
- devient progressivement plus autonome.
La phrase de reference devrait etre :
**"Lea apprend par observation et se fiabilise par replay supervise."**
## 2. Decision structurante
### Ce qu'on garde au centre
- `agent_v0/agent_v1/`
- `agent_v0/server_v1/`
- `replay direct` depuis la capture
- `verification post-action`
- `memoire persistante` de replay
- `pause_for_human` et correction humaine
### Ce qu'on sort du centre
- `visual_workflow_builder/` comme chemin principal de creation
- la demo GHT comme reference produit
- les benches modeles comme moteur de roadmap
- `agent_chat/` comme facade prioritaire
- les analytics non necessaires a la boucle observation -> replay -> apprentissage
### Ce qu'on garde mais en satellite
- `VWB` pour inspection, import/export, correction manuelle ponctuelle
- dashboard pour supervision
- worker `GraphBuilder`
- pipeline `WorkflowIR -> ExecutionPlan`
## 3. Regle d'arbitrage
Une fonctionnalite est prioritaire si elle renforce au moins un de ces 4 axes :
1. Lea observe mieux
2. Lea rejoue plus surement
3. Lea apprend vraiment des corrections
4. Lea sait mieux quand s'arreter et demander de l'aide
Si une fonctionnalite ne renforce aucun de ces 4 axes, elle ne doit pas etre sur le chemin critique.
## 4. Ce qu'on garde
### A. Socle produit a conserver
- capture Lea enrichie (`captor`, `vision`, `streamer`)
- streaming serveur
- replay pilote par serveur
- `resolve_engine`
- `ReplayLearner`
- `replay_memory`
- `TargetMemoryStore`
- worker de retraitement session -> workflow appris
### B. Briques d'avenir a conserver
- `ShadowObserver`
- `ShadowValidator`
- `IRBuilder`
- `ExecutionCompiler`
- `ExecutionPlanRunner`
Pourquoi les garder :
- elles portent la meilleure cible architecturale moyen terme
- mais ne doivent pas dicter le court terme tant qu'elles ne sont pas sur le chemin nominal
## 5. Ce qu'on coupe du centre
### A. Couper du centre ne veut pas dire supprimer
On parle ici de **deprioriser**, pas de detruire.
### B. A sortir du role de reference produit
- `VWB` comme voie principale de creation de procedures
- workflows de demo recables a la main
- chasse aux bugs VWB sans impact sur Lea
- ajout de nouveaux blocs VWB non necessaires au produit
- travaux de design/UI autour d'un canvas qui n'est pas le coeur
### C. A stopper temporairement
- benchmarker de nouveaux modeles sans lien avec un echec produit concret
- etendre `agent_chat` tant que Lea n'est pas stabilisee
- pousser des analytics riches avant d'avoir une boucle d'apprentissage fiable
- melanger preuves demo, veille et architecture produit dans la meme priorite
## 6. Ce qu'on gele
### Gel court terme
- nouvelles features VWB
- nouvelles experiences demo-centriques
- nouvelles couches d'orchestration conversationales
- nouvelle dette de docs "vision" sans branchement runtime
### Autorise pendant le gel
- correctifs minimaux si un satellite bloque le coeur Lea-first
- documentation de clarification
- import/export necessaire pour debloquer un usage reel
## 7. Ce qu'on promeut
### Promotion immediate
**Voie nominale v1 produit**
`capture Lea -> replay direct -> verify -> memory`
C'est le pipeline a assumer officiellement maintenant.
### Promotion a court terme
- correction humaine explicite comme mecanisme produit central
- memoire persistante comme actif principal
- supervision humaine native
- runbook operatoire autour de Lea
### Promotion a moyen terme
**Voie nominale v2 cible**
`capture Lea -> shadow/validation -> WorkflowIR -> ExecutionPlan -> replay`
Cette voie doit etre promue seulement quand elle devient :
- plus simple a operer que le direct replay,
- et vraiment pilotee par Lea, pas par un outillage annexe.
## 8. Produit cible en 3 etages
### Etage 1 -- Lea Rejoue
Promesse :
- Lea peut rejouer de facon supervisee une procedure observee
Definition of done :
- 1 a 2 workflows reels reproductibles
- pause propre sur incertitude
- reprise fiable
- apprentissage des corrections
### Etage 2 -- Lea Apprend
Promesse :
- Lea rejoue mieux la 2e fois que la 1ere
Definition of done :
- `target_memory.db` utile et alimentee
- hits memoire visibles
- baisse des resolutions couteuses sur cas repetes
- historique de corrections exploitable
### Etage 3 -- Lea Comprend
Promesse :
- Lea sait expliciter ce qu'elle a compris pendant l'observation
Definition of done :
- flux shadow/validation utilisable sans bricolage externe
- generation d'un artefact rejouable propre
- promotion vers `ExecutionPlan`
## 9. Roadmap pratique
## Horizon 1 -- Stabiliser le produit reel
### Objectif
Faire de `capture -> replay direct -> apprentissage` un vrai produit POC.
### Priorites
1. Stabiliser le replay Lea sur 1 ou 2 cas reels
2. Rendre la pause supervisee propre et fiable
3. Aligner la verification et la memorisation
4. S'assurer que les corrections humaines nourrissent vraiment la memoire
5. Ecrire le runbook produit Lea
### Livrables
- pipeline nominal documente
- checklist de pre-replay
- 1 workflow canonique Lea-first
- 1 base de memoire non vide et utile
## Horizon 2 -- Native learning loop
### Objectif
Faire de la correction humaine un chemin naturel, pas un mecanisme cache.
### Priorites
1. rendre visible l'etat "je sais / je ne sais pas"
2. exposer clairement les corrections memorisees
3. definir les criteres de promotion d'un workflow
4. connecter proprement observation, replay et apprentissage
### Livrables
- etat d'apprentissage lisible par workflow
- journal des corrections humaines
- mesure simple du gain de memoire
## Horizon 3 -- Promotion de la voie compilee
### Objectif
Faire monter `shadow -> WorkflowIR -> ExecutionPlan` jusqu'a pouvoir remplacer la voie directe sur certains cas.
### Priorites
1. brancher un vrai appelant Lea vers `shadow`
2. rendre la validation utilisateur exploitable
3. compiler automatiquement une session validee
4. comparer replay direct vs replay compile sur un meme cas
### Livrables
- 1 flux shadow complet de bout en bout
- 1 `ExecutionPlan` reel lance sans bricolage annexe
- decision go/no-go sur la promotion en voie nominale
## 10. Non-objectifs explicites
Ce qu'on ne cherche pas a faire maintenant :
- faire du VWB le centre du produit
- multiplier les demos au prix du coeur technique
- construire un editeur BPMN generaliste
- benchmarker tout l'ecosysteme VLM
- transformer `agent_chat` en facade principale avant stabilisation Lea
## 11. Backlog dirigeant
### Maintenant
- replay direct fiable
- correction humaine exploitable
- memoire persistante alimentee
- runbook Lea-first
### Ensuite
- etat d'apprentissage visible
- shadow utile
- compile vers `ExecutionPlan`
### Plus tard
- VWB comme outil de correction avancée
- agent_chat comme surcouche
- analytics et reporting riches
## 12. Formulation de pilotage
Si tu dois recadrer une session de travail, la phrase a utiliser est :
**"Est-ce que ce qu'on fait aide Lea a mieux observer, rejouer, apprendre ou demander de l'aide ?"**
Si la reponse est non :
- ce n'est pas sur le chemin critique produit
## 13. Decision finale recommandee
### Voie nominale officielle a assumer maintenant
`Lea capture -> serveur construit un replay direct -> Lea execute -> le systeme apprend`
### Voie nominale cible a construire
`Lea capture -> Lea explicite ce qu'elle a compris -> validation -> ExecutionPlan -> replay`
### Statut du VWB
`outil satellite`
Pas :
- coeur produit
- reference d'architecture
- source de verite sur ce qu'est Lea
## 14. Documents lies
- [CADRAGE_COEUR_PRODUIT_LEA_2026-05-19.md](./CADRAGE_COEUR_PRODUIT_LEA_2026-05-19.md)
- [CARTOGRAPHIE_EXECUTABLE_PIPELINE_LEA_FIRST_2026-05-19.md](./CARTOGRAPHIE_EXECUTABLE_PIPELINE_LEA_FIRST_2026-05-19.md)
- [PLAN_REMISE_EN_ORDRE_POCS_2026-05-19.md](./PLAN_REMISE_EN_ORDRE_POCS_2026-05-19.md)
- [STATUS.md](/home/dom/ai/rpa_vision_v3/docs/STATUS.md)

View File

@@ -0,0 +1,111 @@
# Plan d'action collegues — apres C1/G2
Date : 2026-05-25 13:41 Europe/Paris
Pilotage : Codex
Cible demo : lundi 1 juin 2026
## Etat factuel
- `rpa-streaming` 5005 : actif.
- `rpa-agent-chat` 5004 : actif apres C1, SocketIO/CORS OK.
- Windows `LeaInteractive` : running, `LEA_FEEDBACK_BUS=1`.
- Inventaire Ollama v2 : 38 tags, reference actuelle.
- `qwen3.5:9b` : calibre avec prefill, resident en `CONTEXT=2048`, `100% GPU`, ~8.6 GB.
- `qwen2.5vl:7b-rpa` : point chaud precedent, peut revenir en `CONTEXT=8192` via appels hardcodes.
- C2 build replay : baseline mesuree 88-94s -> 22-24s avec skip enrichment, speedup ~4x.
## Probleme restant prioritaire
C1b a montre que le flag `AutonomousPlanner` ne suffit pas : `agent_chat` charge encore OWL-v2 via `WorkflowPipeline -> UIDetector` au boot.
Log observe :
```text
core.detection.owl_detector:Chargement OWL-v2 sur cuda...
core.detection.owl_detector:OWL-v2 chargé
core.detection.ui_detector:✓ OWL-v2 initialized
agent_chat.autonomous_planner:OWL-v2 visual detector skipped at boot
```
VRAM observee apres C1b restart :
```text
agent_chat python3 : 1478 MiB
ollama qwen3.5:9b : 7794-8566 MiB selon releve
```
Donc le chantier VRAM n'est pas termine.
## Repartition
### Claude — C1c runtime 5004 sans OWL GPU au boot
Objectif : `rpa-agent-chat` doit servir SocketIO 5004 sans charger OWL-v2/CUDA au boot.
Actions :
- Identifier le meilleur point de coupure : `agent_chat/app.py` instancie `WorkflowPipeline()` ; `WorkflowPipeline` instancie `UIDetector` avec `use_owl_detection=True`.
- Proposer patch minimal :
- soit `WorkflowPipeline(enable_ui_detection=False, enable_vlm=False)` dans `agent_chat` si ces fonctions sont hors chemin narration ;
- soit `DetectionConfig.use_owl_detection` pilote par env ;
- soit `AGENT_CHAT_ENABLE_OWL=0` applique aussi a `UIDetector`.
- Tests unitaires.
- Redemarrage seulement apres GO Codex.
- Critere : healthcheck OK, SocketIO OK, `agent_chat` VRAM nettement reduite, pas de log `Chargement OWL-v2 sur cuda`.
### Claude — C2b instrumentation des 22s restantes
Objectif : savoir ou part le build skip ~22-24s.
Actions :
- Ajouter des spans `[PERF]` autour de crops d'ancrage, cleaning, waits, ReplayLearner.
- Garder harnais `performance` manuel.
- Critere : tableau temps par segment, pas de replay live.
### Gemini — G2b benchmark qwen3.5 comparatif
Objectif : dire si `qwen3.5:9b` remplace `qwen2.5vl:7b-rpa`, devient fallback, ou est rejete.
Actions :
- Attendre que C1c stabilise VRAM si possible.
- Benchmark court puis complet :
- qwen3.5 avec prefill obligatoire ;
- `num_ctx=2048`, puis 4096 seulement avec GO ;
- 5 screenshots reels ;
- JSON validity, p50/p95, precision coordonnées, VRAM, offload.
- Comparer a `qwen2.5vl:7b-rpa` et `qwen2.5vl:3b` si cela ne perturbe pas un service actif.
- Critere : matrice de decision claire.
### Gemini — G3c patch proposal politique contexte
Objectif : fermer les retours accidentels en `CONTEXT=8192`.
Actions :
- Proposer patch minimal couvrant :
- executor Windows hardcodes 8192 ;
- `resolve_engine.py` appels sans `num_ctx` ;
- constante/env unique `RPA_VLM_DEFAULT_CTX=2048`.
- Ne pas appliquer.
- Inclure tests attendus et risques.
### Codex — arbitrage/integration
Actions :
- Maintenir healthcheck comme source de verite.
- Autoriser ou refuser les restarts.
- Integrer uniquement les patchs testables.
- Garder le store Ollama en lecture seule.
- Composer les decisions modele/runtime dans un plan demo.
## Ordre d'execution
1. C1c Claude : enlever le dernier chargement OWL GPU du 5004.
2. Healthcheck + VRAM.
3. G2b Gemini : benchmark qwen3.5 dans etat VRAM propre.
4. G3c Gemini + implementation Codex/Claude : politique contexte 2048.
5. C2b Claude : instrumentation 22s restantes.
6. Smoke replay controle, seulement apres stabilisation.

View File

@@ -0,0 +1,274 @@
# Plan Phase 2 — Trace mandat / protocoles
Date : 2026-05-25
Statut : plan d'exécution chirurgical, issu du modèle v0.3
Principe : additif, testable, sans refactor des gros blocs fragiles
## Objectif
Faire circuler un contrat commun dans Léa :
```text
mandat -> intention -> scène -> affordance -> geste -> retour -> preuve
```
Le but n'est pas de remplacer le replay actuel. Le but est de l'enrichir pour que les décisions, vérifications et apprentissages parlent la même langue.
## Règles de conduite
```text
Pas de replay live tant que les correctifs locaux ne sont pas testés.
Pas de refactor de api_stream.report_action_result.
Pas de refactor de resolve_engine._resolve_target_sync.
Pas de réveil brutal de LearningManager / ContinuousLearner.
Champs additifs uniquement.
Fallback comportement actuel si trace absente.
LeaBench et tests unitaires avant runtime live.
```
## Phase 2.0 — sécuriser le bug live Bloc-notes
But :
```text
empêcher qu'un rejet sémantique serveur soit contourné par hybrid_text_direct local
```
Actions :
```text
tester GroundingEngine après rejet serveur explicite ;
vérifier qu'un simple non-trouvé serveur autorise encore le fallback ;
déployer sur Windows seulement après tests ;
ne retenter le replay Bloc-notes qu'après relance Léa.
```
Critère de réussite :
```text
le cas close_tab_out_of_recorded_zone ne produit plus de clic local ;
le report remonte un échec honnête ou une pause, pas success=True.
```
## Phase 2.1 — objet trace additif
But :
```text
créer un objet commun transportable sans changer le comportement runtime
```
Trace minimale :
```text
mandate_id
intention_id
scene_id
affordance_signature
expected_retour
level_of_delegation
```
Emplacement recommandé :
```text
core/cognition/
```
Critère de réussite :
```text
tests unitaires de sérialisation ;
aucun appel runtime obligatoire ;
aucune régression si trace absente.
```
## Phase 2.2 — enrichissement build-time
But :
```text
produire la trace au moment où le serveur compile/enrichit les actions
```
Point d'entrée :
```text
agent_v0/server_v1/stream_processor.py
```
Principe :
```text
étendre les champs déjà produits par l'enrichissement intention/expected_result ;
ne pas rendre gemma4 obligatoire ;
si enrichissement indisponible, garder l'action actuelle.
```
Critère de réussite :
```text
actions compilées contiennent trace quand disponible ;
les anciens workflows restent valides.
```
## Phase 2.3 — transport agent
But :
```text
faire traverser la trace jusqu'à agent_v1 sans logique métier côté agent
```
Principe :
```text
l'agent transporte et rapporte ;
le serveur reste responsable du protocole ;
l'agent peut utiliser scene_expected pour pré-vérif simple, mais pas choisir un mandat.
```
Critère de réussite :
```text
report contient causal_trace ;
comportement identique si trace absente ;
pause_message peut inclure intention courante.
```
## Phase 2.4 — qualification retour
But :
```text
rattacher la vérification à l'intention et à la scène
```
Briques :
```text
ReplayVerifier
Validator V2
AuditTrail
LoopDetector
```
Sorties attendues :
```text
réussite
échec
attente
rupture
doute_localisation
doute_identification
doute_scène
doute_effet
doute_intention
```
Critère de réussite :
```text
un "rien ne change" n'est plus seulement un retry mécanique ;
il est qualifié selon l'intention, la scène et la temporalité attendue.
```
## Phase 2.5 — preuve apprenable
But :
```text
promouvoir uniquement les retours qualifiés en preuves
```
Briques à enrichir :
```text
replay_learner.ActionOutcome
replay_memory
target_memory_store via shim additif
audit_trail
```
Règle :
```text
pas de changement destructeur de hash mémoire existant sans migration ;
pas de succès appris si correction humaine non qualifiée ;
pas de promotion si semantic_verified est faux ou absent sur action sensible.
```
Critère de réussite :
```text
la mémoire sait distinguer "Enregistrer pour sauvegarder" de "Enregistrer dans une autre intention/scène".
```
## Phase 2.6 — délégation tutorée
But :
```text
modéliser le niveau d'autonomie par protocole, environnement et tuteur
```
Niveaux :
```text
N0 observation
N1 proposition
N2 exécution supervisée
N3 autonomie de session
N4 autonomie habituelle
```
Principe MVP :
```text
ne pas réveiller LearningManager ;
utiliser l'étage live ;
ajouter un DelegationResolver simple et non bloquant plus tard ;
fallback restrictif si aucune délégation connue.
```
## Bancs de validation
Ordre :
```text
LeaBench Bloc-notes enrichi
-> tests unitaires Grounding/Dialog/Verifier
-> replay Bloc-notes live
-> LeaBench Easily dérivés des fixtures
-> adaptateur T2A urgences
-> smoke E2E Easily live
```
## Décisions déjà prises
```text
priorité protocoles : mieux connu -> moins risqué -> plus court
précondition plausible : vérifier l'état attendu
risque : dépend du geste, du métier, du mandat et du niveau de Léa validé par tuteur
trace : générée au build, amendable au runtime par intervention humaine explicite
apprentissage : seulement sur résultat qualifié
```
## Décisions à ne pas prendre maintenant
```text
archiver workflow_replay.py
activer DialogResolver serveur en live
réveiller LearningManager / ContinuousLearner
modifier le schéma target_memory.db
refactorer api_stream.py
```
## Prochaine action concrète
```text
Terminer Phase 2.0 :
tester et déployer le verrou GroundingEngine anti-fallback opportuniste,
puis retenter le replay Bloc-notes.
```

View File

@@ -0,0 +1,217 @@
# Plan de remise en ordre POCs -- 2026-05-19
> Note : ce document a ete ecrit avant le recadrage explicite `Lea-first`.
> Il doit etre relu a la lumiere de
> [CADRAGE_COEUR_PRODUIT_LEA_2026-05-19.md](./CADRAGE_COEUR_PRODUIT_LEA_2026-05-19.md),
> qui distingue proprement coeur produit, VWB/demo et veille.
**Contexte**
- Les 15 derniers jours ont servi a produire une demo GHT sous forte pression.
- La demo a ete enregistree, mais avec des contournements empiles et une derive de perimetre documentee dans [docs/handoffs/2026-05-19_handoff_post_demo_GHT.md](../handoffs/2026-05-19_handoff_post_demo_GHT.md).
- Les premiers POCs demarrent dans 15 jours. L'objectif n'est pas de "tout reparer", mais de remettre le projet en ordre autour du chemin qui a le plus de valeur terrain.
## 1. Decision de pilotage
**Chemin nominal POC**
- `agent_v0/agent_v1/` (Lea) pour la capture et l'execution
- `agent_v0/server_v1/` pour le streaming, le replay et l'orchestration runtime
- `core/` pour la detection, l'extraction, le raisonnement et la supervision
**Chemin non critique a court terme**
- `visual_workflow_builder/` reste utile pour inspecter, exporter ou bricoler une demo
- `visual_workflow_builder/` ne doit plus etre la source principale de creation des workflows POC tant que ses bugs structurants ne sont pas fermes
**Raison**
- L'etat reel du projet decrit deja `agent_v1` + streaming + replay comme le socle le plus mature, alors que le VWB reste "en cours" avec bugs runtime connus.
- Le retour d'experience post-demo confirme que la derive VWB a coute du temps et masque des causes racines.
## 2. Objectif dans 15 jours
Arriver au debut des POCs avec :
- un chemin `Lea-first` assume et documente
- un socle de replay reproductible sur 1 a 2 cas terrain
- un smoke test canonique de pre-demo / pre-POC
- un registre clair de ce qui est stable, de ce qui est experimental, et des workarounds encore actifs
- une capitalisation utile de la veille, des benches et des lecons apprises
## 3. Ce qu'on garde, ce qu'on gele, ce qu'on sort du chemin critique
### A. A garder comme socle produit
- `agent_v0/agent_v1/`
- `agent_v0/server_v1/`
- `core/detection/`, `core/execution/`, `core/llm/`, `core/graph/`, `core/security/`
- la maquette et les assets de demo quand ils servent de terrain d'essai reproductible
- les docs de bench et d'audit qui documentent des decisions reversibles ou des limites prouvees
### B. A geler temporairement
- creation de workflows complexes par VWB pour les POCs
- nouvelles features UI non necessaires a l'execution terrain
- experimentation libre sur des variantes de modeles ou des sous-systemes non relies au replay
### C. A sortir du chemin critique
- corrections cosmetiques du VWB
- generalisation de `agent_chat/` tant qu'il n'est pas requis pour le protocole POC
- analytics avancées, reporting, experimentation produit non necessaire au go-live POC
## 4. Priorites reelles
### P0 -- cette semaine
1. **Fixer la ligne produit**
- Ecrire noir sur blanc que le chemin POC est `Lea -> streaming -> core`.
- Interdire les nouveaux workflows critiques crees d'abord dans le VWB.
2. **Geler une baseline de reference**
- Comparer `demo-stable-2026-05-12`, `demo/ght-2026-05-08` et `backup/post-demo-2026-05-19`.
- Sortie attendue : une baseline "reference POC" et une liste des ecarts volontaires ou accidentels.
3. **Lister les contournements actifs**
- `static_result` / `static_text` dans le replay
- bypass NPM auth hors git
- `cancel-replays.sh`
- pauses humaines remplaçant des automatisations defectueuses
- tout workaround client Lea ou VM encore necessaire
4. **Construire un smoke test canonique**
- 1 workflow de reference
- 1 environnement de reference
- 1 checklist avant execution
- 1 resultat attendu par etape critique
5. **Traiter les bugs qui cassent Lea en execution reelle**
- mapping coordonnees Y cote client
- gestion correcte de `replay_paused`
- reset d'etat propre apres replay
- captures runtime utiles au matching
### P1 -- avant les POCs
1. **Durcir le replay Lea-first**
- harmoniser les comportements strict / legacy la ou ils degradent la supervision
- verifier les delais runtime effectivement appliques
- s'assurer que les annulations et reprises sont propres
2. **Mettre au propre le protocole d'enregistrement**
- comment on capture un workflow de reference avec Lea
- ce qui est interdit pendant l'enregistrement
- quelles preuves garder quand un replay echoue
3. **Remettre a niveau la documentation de pilotage**
- `STATUS`
- un runbook POC
- un registre de decisions
- un registre de limites connues
### P2 -- apres stabilisation du socle
1. **Reprendre le VWB comme chantier separe**
- bug recapture d'anchor
- bug Stop qui ne purge pas la queue
- invalidation cache frontend
- coherence BDD / export / execution
2. **Reprendre les chantiers exploratoires**
- benchmarks modeles
- agent_chat
- analytics
- autres pistes produit
## 5. Sprint 15 jours
### Jours 1 a 3 -- Cadrage et gel
- Choisir la baseline de reference POC.
- Produire une matrice `stable / workaround / casse / hors-scope`.
- Lister les workflows de demo existants et en designer un seul comme workflow canonique.
- Geler les developpements hors chemin critique.
**Livrable**
- un dossier de reference POC
- une baseline git clairement nommee
- une checklist de reprise
### Jours 4 a 7 -- Stabilisation du runtime Lea
- Corriger les bugs client / replay qui cassent l'execution reelle.
- Retester sur l'environnement de demo le plus proche du terrain.
- Documenter le protocole de capture et de replay.
**Livrable**
- 1 smoke test manuel reproductible
- 1 replay de reference stable
- 1 liste limitee de workarounds encore toleres
### Jours 8 a 10 -- Tesorisation utile
- Trier la doc recente en trois familles :
- preuve exploitable
- decision durable
- archive de session
- Extraire la substance des benches, audits et handoffs dans des documents courts.
- Nettoyer la memoire projet pour que les vraies lecons remontent.
**Livrable**
- un registre de decisions
- un registre de preuves / benches
- un registre des limites et des dettes actives
### Jours 11 a 13 -- Preparation POC
- Rejouer le workflow canonique plusieurs fois.
- Tester les preconditions machine, VM, reseau, clipboard, captures, modele VLM.
- Verifier ce qui doit etre industrialise ou ritualise en procedure.
**Livrable**
- runbook operatoire POC
- checklist pre-demo / pre-POC
- journal d'incidents restant
### Jours 14 a 15 -- Verrouillage
- Dernier passage sur la doc critique.
- Validation humaine du chemin nominal.
- Gel des modifs non indispensables.
**Livrable**
- branche de stabilisation POC
- etat de confiance clair
- liste "ne pas toucher" avant demarrage
## 6. Tesorisation : structure cible
L'objectif n'est pas de conserver toutes les notes telles quelles. Il faut les condenser.
### Documents a avoir
- `docs/STATUS.md`
- etat reel par sous-systeme
- `docs/POC_RUNBOOK.md`
- comment lancer, verifier, relancer, diagnostiquer
- `docs/DECISIONS_LOG.md`
- decisions structurantes, datees, avec raison
- `docs/KNOWN_LIMITS.md`
- limites connues, contournements toleres, date de revision
- `docs/BENCHMARKS_INDEX.md`
- index court vers les benches qui comptent vraiment
### Regle de tri
- un handoff brut ne doit pas rester la seule source d'une decision importante
- une conclusion durable doit etre recopier dans un document stable
- une veille sans impact concret doit sortir du chemin critique documentaire
## 7. Ce que je ferais en premier, des demain
1. Choisir une baseline POC de reference.
2. Ecrire un court document "chemin nominal POC".
3. Construire le smoke test canonique.
4. Ouvrir la liste des workarounds actifs et decider lesquels sont acceptables 15 jours, lesquels doivent disparaitre.
5. Ne traiter le VWB que s'il bloque encore le chemin Lea-first.
## 8. Risques si on ne fait pas ce pivot
- Repartir dans des corrections VWB qui ne servent pas le demarrage POC
- Continuer a melanger demo, produit, veille et bricolage runtime
- Garder une documentation abondante mais peu actionnable
- Rejouer les memes erreurs de session, faute d'avoir remonte les vraies lecons au bon niveau
## 9. Sources de reference
- [docs/handoffs/2026-05-19_handoff_post_demo_GHT.md](../handoffs/2026-05-19_handoff_post_demo_GHT.md)
- [docs/handoffs/2026-05-18_handoff_consolidation.md](../handoffs/2026-05-18_handoff_consolidation.md)
- [docs/STATUS.md](../STATUS.md)
- [docs/CARTE_FONCTIONNELLE_2026-05-08.md](../CARTE_FONCTIONNELLE_2026-05-08.md)
- [docs/AUDIT_BDD_WORKFLOW_2026-05-10.md](../AUDIT_BDD_WORKFLOW_2026-05-10.md)
- [docs/QW_SUITE_MAI.md](../QW_SUITE_MAI.md)
- [docs/BENCH_T2A_DECISION_11DOSSIERS.md](../BENCH_T2A_DECISION_11DOSSIERS.md)
- [docs/AUDIT_MEMOIRE_CLAUDE_2026-05-08.md](../AUDIT_MEMOIRE_CLAUDE_2026-05-08.md)

View File

@@ -0,0 +1,67 @@
# Plan stabilisation demo Lea — cible lundi 1 juin 2026
Date de cadrage : 2026-05-25 12:44 Europe/Paris
Pilotage : Codex
Contexte : la demo client est reportee au lundi 1 juin 2026. On sort du mode rustine J-4 et on vise un systeme propre, mesurable, restaurable.
## Principes
1. Pas de restauration destructive ni suppression de modele sans inventaire et accord explicite.
2. Pas de replay live tant que les chemins pause/resume, FeedbackBus et perf ne sont pas instrumentes.
3. Les changements doivent avoir une preuve : test, commande de healthcheck, log cible, ou bench.
4. `C:\rpa_vision` reste le runtime Windows reel ; ne pas resynchroniser `agent_v0/deploy/windows_client`.
5. Les collegues repondent dans `docs/coordination/inbox_codex/` avec ACK/NACK explicite.
## P0 — Inventaire et protection Ollama
Objectif : garantir que les modeles critiques existent, sont referencables, et peuvent etre reconstruits si un tag disparait.
- Figer `ollama list`, manifests, gros blobs, `ollama show --modelfile` des modeles critiques.
- Verifier les artefacts locaux et backup : `t2a-gemma3-27b-q8_0.gguf`, `t2a-gemma3-27b-q4_k_m.gguf`, merged safetensors.
- Produire une table : tag Ollama, digest/blob, source GGUF/HF, backup, statut de reconstruction.
- Identifier les vrais manquants avec Dom si sa liste attendue depasse les 38 tags actuels.
## P0 — FeedbackBus 5004 propre
Objectif : garder la narration temps reel si elle est utile, mais sans bruit log ni service fragile.
- Corriger la cause `rpa-agent-chat.service inactive`.
- Corriger ou isoler le warning CLIP/torch au boot.
- Corriger CORS/SocketIO pour la ChatWindow Windows.
- Conserver le fallback HTTP 5005 pour `resume` / `abort`.
- Decider apres test si `LEA_FEEDBACK_BUS=1` reste actif cote Windows.
## P0 — Performance mesurable
Objectif : remplacer les intuitions par des mesures reproductibles.
- Harness build replay sans live replay : mesure avec/sans `RPA_SKIP_INTENTION_ENRICHMENT`.
- Mesure des appels VLM : modele, `num_ctx`, layers CPU/GPU, p50/p95, taux JSON valide.
- Politique de residence Ollama : `MAX_LOADED_MODELS=1`, modele VLM prechauffe, eviter les swaps texte/VLM.
- Decision documentee : `qwen2.5vl:7b-rpa` vs `qwen2.5vl:7b` vs `qwen2.5vl:3b` vs autre backend.
## P0 — Replay pause/resume robuste
Objectif : zero confusion visible dans Lea.
- La bulle supervisee ne doit plus tronquer le message.
- La bulle doit se fermer a la reprise serveur (`server_cleared`).
- Le compteur et le statut doivent refleter l'etape reelle.
- Smoke Windows obligatoire apres patch deploye.
## P1 — Hygiene runtime/deploiement
Objectif : rendre le systeme re-demarrable sans memoire orale.
- Runbook Linux : `rpa-streaming`, `ollama`, `rpa-agent-chat`.
- Runbook Windows : tache `LeaInteractive`, lock, logs, hash des fichiers deployes.
- Separateur clair : source repo vs runtime `C:\rpa_vision`.
## P1 — Pack de preuve demo
Objectif : arriver lundi avec une preuve concrete, pas seulement du code.
- Healthcheck global : Linux 5005/5004/Ollama + Windows agent.
- Bench perf avant/apres.
- Smoke replay controle, sans improvisation.
- Notes de risques restantes avec mitigation.

View File

@@ -0,0 +1,200 @@
# Protocole seance 1 micro-apprentissage Lea - 2026-05-27
## Competence cible
Premiere competence atomique:
```text
ouvrir le menu Demarrer
```
Raison: ouvrir Chrome, Word ou une recherche depend souvent de cette brique. Si Lea apprend d'abord ce geste simple, observable et verifiable, on pourra composer ensuite:
```text
ouvrir le menu Demarrer -> rechercher Chrome -> ouvrir Chrome
ouvrir le menu Demarrer -> rechercher Word -> ouvrir Word
```
On ne demarre donc pas par un scenario "ouvrir navigateur" complet. On commence plus petit.
## Duree
25 minutes maximum:
- 9 min: 3 demonstrations humaines,
- 5 min: 1 essai supervise de Lea,
- 5 min: 1 variante,
- 6 min: debrief et decision.
## Avant de commencer
1. Verifier le socle:
```bash
python3 tools/lea_micro_preflight.py
```
Verdict acceptable: tout OK, warning VLM non resident accepte.
2. Mettre Windows dans un etat simple:
- bureau visible,
- pas d'application plein ecran,
- NoMachine stable,
- presse-papiers non utilise,
- Lea connectee.
3. Ne pas ouvrir VWB, Aiva ou un workflow metier.
## Demonstrations humaines
Chaque demonstration doit etre lancee avec `Apprenez-moi`, puis arretee avec `Arreter`.
Nom de session:
```text
ouvrir le menu Demarrer
```
### Demo A - clic souris
Dom dit ce qu'il fait:
```text
J'ouvre le menu Demarrer en cliquant sur le logo Windows.
```
Actions:
1. cliquer le logo Windows,
2. attendre que le menu apparaisse,
3. verifier visuellement le champ `Rechercher`,
4. fermer avec `Echap`,
5. arreter l'enregistrement.
Postcondition:
- le champ `Rechercher` est visible.
### Demo B - touche Windows
Dom dit:
```text
J'ouvre le meme menu avec la touche Windows.
```
Actions:
1. appuyer sur `Win`,
2. attendre le menu,
3. verifier `Rechercher`,
4. fermer avec `Echap`,
5. arreter l'enregistrement.
Postcondition:
- le champ `Rechercher` est visible.
### Demo C - Win+S
Dom dit:
```text
J'ouvre directement la recherche avec Win+S.
```
Actions:
1. appuyer sur `Win+S`,
2. verifier que la zone de recherche est visible et active,
3. fermer avec `Echap`,
4. arreter l'enregistrement.
Postcondition:
- la zone de recherche est visible, idealement avec le focus.
## Essai supervise de Lea
Lea tente une methode simple, de preference `Win`.
Message attendu avant action:
```text
J'ouvre le menu Demarrer avec la touche Windows.
```
Verification attendue:
```text
Je vois le champ Rechercher, comme attendu.
```
Si elle echoue, elle s'arrete et affiche:
```text
J'essaie de : ouvrir le menu Demarrer
J'attendais : voir le champ Rechercher
Je vois : <description de l'ecran actuel>
Peux-tu : ouvrir le menu Demarrer une fois pour me montrer le geste
```
## Variante
Une seule variante pendant cette seance:
- Notepad ou une autre fenetre simple au premier plan,
- puis Lea tente d'ouvrir le menu Demarrer.
Critere de succes:
- le champ `Rechercher` devient visible malgre la fenetre au premier plan.
On ne teste pas encore DPI ou ecran secondaire pendant cette seance.
## Donnees a relever
Pour chaque demonstration et essai:
- methode: clic logo, Win, Win+S,
- fenetre active avant action,
- marqueur observe: `Rechercher`,
- resultat: succes, correction, echec,
- duree approximative,
- message affiche si blocage.
## Criteres de succes
- Lea formule la competence comme une intention, pas comme une coordonnee.
- Lea connait au moins deux methodes pour ouvrir le menu.
- Lea verifie le marqueur `Rechercher`.
- Aucun message generique ne sort: pas `un element`, pas `cette action`, pas `Validation requise`.
- Aucun replay VWB/metier n'est lance.
## Criteres d'echec
- Lea clique une coordonnee sans regarder le resultat.
- Lea dit OK alors que le menu n'est pas ouvert.
- Lea demande une aide incomprehensible.
- Lea confond menu Demarrer, bureau, navigateur ou Word.
- La capture/finalisation de session ne produit aucun artefact exploitable.
## Promotion
| Etat | Condition |
|---|---|
| OBSERVATION | au moins une demonstration capturee |
| COACHING | Lea peut tenter avec aide humaine disponible |
| AUTO_CANDIDATE | 3 succes verifies sur au moins 2 methodes |
| AUTO | pas pour cette seance; attendre DPI/ecran secondaire |
## Suite directe
Si cette seance est propre:
1. seance 2: saisir une recherche dans le menu Demarrer,
2. seance 3: ouvrir Chrome depuis le menu,
3. seance 4: ouvrir Word depuis le menu,
4. seance 5: fermer Word proprement,
5. seulement ensuite: DPI et ecran secondaire.