docs: add POC specs, handoffs, and research notes
This commit is contained in:
120
docs/handoffs/2026-05-19_handoff_fix_capture_monitor_guard.md
Normal file
120
docs/handoffs/2026-05-19_handoff_fix_capture_monitor_guard.md
Normal file
@@ -0,0 +1,120 @@
|
||||
# Handoff — Fix capture monitor aberrante + sécurisation fallback
|
||||
|
||||
**Date** : 2026-05-19
|
||||
**Branche** : `backup/post-demo-2026-05-19` (HEAD `5ea4960e6`, non commité)
|
||||
**Missions** : Claude 2 (fix initial) + Claude 2b (sécurisation fallback)
|
||||
**Bug source** : audit Léa-first runtime, blocage P0 #4 — `agent_v0/agent_v1/vision/capturer.py` accède aveuglément à `mss.monitors[1]` sans valider ses dimensions. Cas observé en démo GHT 19 mai : `mss` renvoie intermittemment `2560×60` au lieu de `2560×1600`, coords Y divisées ~27×, mémoire persistante empoisonnée.
|
||||
|
||||
## Contexte produit
|
||||
|
||||
La voie nominale `capture → replay direct → memory` repose sur des coordonnées normalisées via les dimensions de l'écran principal. Une capture acceptant des dimensions aberrantes propage des `(x_pct, y_pct)` faux jusqu'au `TargetMemoryStore` (`core/learning/target_memory_store.py`), qui stocke des fingerprints inexploitables et incrémente `fail_count` sans signal sur la cause. Le bug originel s'auto-amplifie : chaque réutilisation de la mémoire empoisonnée déclenche d'autres échecs silencieux.
|
||||
|
||||
## Fichier modifié
|
||||
|
||||
- `agent_v0/agent_v1/vision/capturer.py` (309 → 401 lignes)
|
||||
|
||||
## Fichier créé
|
||||
|
||||
- `tests/unit/test_capturer_monitor_guard.py` (10 tests)
|
||||
|
||||
## Périmètre strict
|
||||
|
||||
**Non touchés** : `executor.py`, `main.py`, `api_stream.py`, replay engine, `resolve_engine.py`, `replay_memory.py`. Le fix est intégralement contenu côté capture client. Pas de SCP vers Léa Windows réalisé.
|
||||
|
||||
## Changements code
|
||||
|
||||
### Constantes module-level
|
||||
```python
|
||||
MIN_MONITOR_WIDTH = 200
|
||||
MIN_MONITOR_HEIGHT = 200
|
||||
MONITOR_MAX_ATTEMPTS = 2
|
||||
MONITOR_RETRY_DELAY_S = 0.05
|
||||
```
|
||||
|
||||
Seuil 200 px : largement au-dessus du cas observé (60 px) et largement sous toute résolution physique légitime. Marge confortable pour ne pas rejeter une fenêtre RDP/NoMachine ré-dimensionnée. Retry 2× avec 50 ms : couvre le pattern "mss cache stale au premier appel" sans pénaliser le chemin nominal (worst-case 100 ms avant abandon).
|
||||
|
||||
### Helpers privés
|
||||
- `_is_monitor_sane(monitor) -> bool` — prédicat plausibilité dims (None → False, dict avec width/height ≥ seuils → True)
|
||||
- `_dim_str(monitor) -> str` — formatage compact `WxH` pour les logs (gère None)
|
||||
- `_acquire_safe_grab(max_attempts, retry_delay_s, allow_secondary_fallback) -> (monitor_dict | None, PIL.Image | None)` — ouvre `mss.mss()`, valide les dims, retry, fallback contrôlé, retour `(None, None)` en cas d'abandon. Logs WARNING par tentative aberrante, ERROR explicite à l'abandon avec distinction des causes.
|
||||
|
||||
### Méthodes publiques refactorées
|
||||
| Méthode | Comportement | Justification |
|
||||
|---|---|---|
|
||||
| `capture_full_context` | `_acquire_safe_grab()` → fallback secondaire **autorisé** | Heartbeat ne porte pas de coords client, un écran sain quelconque suffit |
|
||||
| `capture_dual` | `_acquire_safe_grab(allow_secondary_fallback=False)` → fail-closed | Reçoit `(x, y)` en coords composite, cropper depuis monitor secondaire produirait une image saine mais décalée |
|
||||
| `capture_active_window` (path standalone) | `_acquire_safe_grab(allow_secondary_fallback=False)` → fail-closed | `win_rect` en coords globales, même risque |
|
||||
|
||||
Signatures publiques inchangées : `""`, `{}`, `None` selon le contrat existant en cas d'erreur.
|
||||
|
||||
## Décision clé — fail-closed vs recalcul d'offsets
|
||||
|
||||
**Choix : fail-closed** sur fallback secondaire pour les méthodes coord-bearing. Pas de translation `(x - monitor.left, y - monitor.top)` car :
|
||||
1. Translation impose ensuite de vérifier inclusion du clic et de la fenêtre dans le monitor choisi, gérer les fenêtres à cheval, valider les coords positives — surface de bug supérieure à celle qu'on essaie d'éliminer.
|
||||
2. Le bug est intermittent ; refuser une capture pendant ~100 ms est acceptable, Léa reprend au prochain événement.
|
||||
3. Aligne avec `feedback_failure_is_learning.md` — un échec explicite vaut mieux qu'une réussite fausse.
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
source /home/dom/ai/rpa_vision_v3/.venv/bin/activate && \
|
||||
python -m pytest tests/unit/test_capturer_monitor_guard.py -v
|
||||
```
|
||||
|
||||
**Résultat** : `10 passed in 0.25s`
|
||||
|
||||
| # | Test | Mission | Couverture |
|
||||
|---|---|---|---|
|
||||
| 1 | `test_capture_full_context_returns_empty_when_monitor_height_aberrant` | 2 | refus dim aberrante height=60 |
|
||||
| 2 | `test_aberrant_monitor_logs_warning_with_observed_dimensions` | 2 | log WARN contient "2560" et "60" |
|
||||
| 3 | `test_capture_retries_when_first_monitor_query_is_aberrant` | 2 | retry réussi après 1er appel aberrant |
|
||||
| 4 | `test_capture_falls_back_to_secondary_monitor_when_primary_aberrant` | 2 | multi-écrans : `capture_full_context` utilise monitors[2] |
|
||||
| 5 | `test_capture_dual_returns_empty_dict_when_monitor_aberrant` | 2 | `capture_dual` retourne `{}` sur aberration |
|
||||
| 6 | `test_capture_active_window_returns_none_when_monitor_aberrant` | 2 | `capture_active_window` retourne `None` sur aberration |
|
||||
| 7 | `test_capture_full_context_succeeds_on_normal_dimensions` | 2 | non-régression chemin nominal |
|
||||
| 8 | `test_capture_dual_fails_closed_when_only_secondary_monitor_sane` | 2b | `capture_dual` refuse fallback secondaire |
|
||||
| 9 | `test_capture_active_window_fails_closed_when_only_secondary_monitor_sane` | 2b | `capture_active_window` refuse fallback secondaire |
|
||||
| 10 | `test_capture_full_context_still_uses_secondary_fallback` | 2b | non-régression : heartbeat accepte toujours le fallback |
|
||||
|
||||
Cycle TDD respecté pour tous les RED (1, 3, 5, 8) : test rouge vu avant implémentation. Tests 2, 4, 6, 7, 9, 10 ont validé une propriété exercée par l'implémentation déjà en place mais distincte du test précédent.
|
||||
|
||||
## Logs runtime attendus
|
||||
|
||||
**Cas nominal** : aucun log de cette garde (silencieux).
|
||||
|
||||
**Cas dim aberrante avec retry réussi** :
|
||||
```
|
||||
WARNING agent_v0.agent_v1.vision.capturer Monitor[1] dims aberrantes (2560x60, seuil 200x200) — attempt 1/2
|
||||
WARNING agent_v0.agent_v1.vision.capturer Capture fallback : monitor[1] dim=2560x1600, attempt=2
|
||||
```
|
||||
|
||||
**Cas fallback secondaire (heartbeat)** :
|
||||
```
|
||||
WARNING ... Monitor[1] dims aberrantes (2560x60, seuil 200x200) — attempt 1/2
|
||||
WARNING ... Capture fallback : monitor[2] dim=1920x1080, attempt=1
|
||||
```
|
||||
|
||||
**Cas fail-closed (capture_dual / capture_active_window avec secondaire dispo)** :
|
||||
```
|
||||
WARNING ... Monitor[1] dims aberrantes (2560x60, seuil 200x200) — attempt 1/2
|
||||
WARNING ... Monitor[2] sain (1920x1080) mais fallback secondaire refusé (allow_secondary_fallback=False) — capture cohérente des coords impossible
|
||||
ERROR ... Capture abandonnée : monitor[1] aberrant après 2 tentatives (dernier vu 2560x60) et fallback secondaire désactivé pour préserver la cohérence des coordonnées
|
||||
```
|
||||
|
||||
**Cas abandon total** :
|
||||
```
|
||||
ERROR ... Aucun monitor avec dims plausibles trouvé après 2 tentatives (dernier vu : 2560x60, seuil 200x200) — capture abandonnée
|
||||
```
|
||||
|
||||
## Points ouverts (à tracer post-déploiement)
|
||||
|
||||
1. **Seuil 200 px choisi par jugement** — pas par mesure empirique sur l'éventail des dims légitimes (RDP, NoMachine windowed, multi-écran portrait). À relever si un faux rejet apparaît en prod.
|
||||
2. **Reproduction du bug réel non testée** — les 10 tests utilisent des mocks `mss`. La cause exacte côté mss reste non identifiée. Cette garde **protège** sans **expliquer**. À confirmer en redéployant sur la machine Windows Léa.
|
||||
3. **SCP vers Léa Windows non fait** — conformément à `feedback_scp_auto_modif_client_windows.md`, le SCP vers `dom@192.168.1.11` est attendu après toute modif `agent_v0/agent_v1/**`. À faire avant le prochain run réel.
|
||||
4. **Suivi côté serveur potentiellement nécessaire** — si `capture_full_context` (heartbeat) commence à retourner une image issue d'un monitor secondaire en cas de panne intermittente du primary, et si le serveur réutilise ce heartbeat pour pré-check sur des coords (`/resolve_target` fallback heartbeat), la même incohérence coord/image pourrait apparaître côté serveur. **Hors périmètre** missions 2/2b. À tracer comme follow-up éventuel.
|
||||
5. **Pas de translation x/y dans `capture_dual`/`capture_active_window`** — si un jour on voulait supporter le fallback secondaire proprement, ce serait un chantier séparé (calcul `(x - monitor.left, y - monitor.top)`, validation inclusion, gestion fenêtres à cheval).
|
||||
6. **Couverture `capture_active_window` quand `full_img` est fourni par l'appelant** — la garde s'applique uniquement au path standalone (sans `full_img`). Le cas le plus fréquent (appel depuis `capture_dual` avec `full_img=img`) est implicitement gardé via la garde de `capture_dual`. Mais un autre appelant qui fournirait un `full_img` issu d'une capture non gardée court-circuiterait la défense. Pas d'appelant identifié actuellement.
|
||||
|
||||
## Référence audit
|
||||
|
||||
Ce fix résout le blocage **P0 #4** de `docs/AUDIT_LEA_FIRST_RUNTIME_2026-05-19.md`. Les blocages P0 #1 (`record_human_correction` cassé), #2 (`build_workflow_replay` orphelin), #3 (memory gated sur `window_title`) restent ouverts.
|
||||
113
docs/handoffs/2026-05-19_handoff_post_demo_GHT.md
Normal file
113
docs/handoffs/2026-05-19_handoff_post_demo_GHT.md
Normal file
@@ -0,0 +1,113 @@
|
||||
# Handoff — Post-démo GHT 2026-05-19
|
||||
|
||||
## TL;DR
|
||||
|
||||
✅ **Démo vidéo enregistrée en bout en bout** après une session de 14h (18-19 mai) et **15 jours de bug-chasing** depuis le 5 mai.
|
||||
|
||||
⚠️ **Retour d'expérience amer** : on est partis d'un système moins mature mais qui **fonctionnait** (état tag `demo-stable-2026-05-12`, branche `demo/ght-2026-05-08`) et on a dérivé via une cascade de modifs locales jusqu'à un système instable. La démo enregistrée a fonctionné **grâce à des contournements**, pas grâce à une vraie résolution des bugs.
|
||||
|
||||
🎯 **Objectif post-démo** : consolider, identifier les vrais bugs racines, restaurer un état stable utilisable pour les prochaines démos sans devoir refaire 14h de bricolage.
|
||||
|
||||
## État final livré
|
||||
|
||||
- **Vidéo démo** : enregistrée et utilisable
|
||||
- **Workflow** : `Demo_urgence_3_db` (`wf_483910cdd851_1778750587`) — 46 steps
|
||||
- **Branche backup git** : `backup/post-demo-2026-05-19` → commit `5ea4960e6` (poussée sur gitea)
|
||||
- **Tarball complet** : `/home/dom/ai/_archives/rpa_vision_v3_post_demo_20260519_142940.tar.gz` (8.9 Go, sha256 `7ab84f22d5a45b7880cad4efb4466f9e320f3e1e33218ceee267fc93fe7631af`)
|
||||
|
||||
## Chronologie résumée de la session (18-19 mai)
|
||||
|
||||
### 18 mai
|
||||
1. Création **page AIVA-URGENCE** autonome (`docs/clients/ght_sud_95/aiva_urgence/`) — interface médicale pour la démo, design dark
|
||||
2. Intégration AIVA dans le workflow : 6 nouveaux steps insérés (ord 15-20) entre `llm_generate` et `Win+D`
|
||||
3. Bug **NPM Basic Auth** sur `urgence.labs.laurinebazin.design` → bypass via `location ^~ /aiva-urgence/ auth_basic off;` directement dans `proxy_host/10.conf` (modif hors git, sera écrasée si UI NPM touchée)
|
||||
4. Bug **`pause_for_human` skip silencieux en mode autonome** → fix `safety_checks` avec `required: false` sur step 1
|
||||
5. Bug **frontend cache** : Ctrl+Shift+R obligatoire après chaque modif DB pour que VWB envoie le workflow à jour
|
||||
6. Fix **`api_stream.py:3013`** — enrichir le payload `replay_paused/pause_message/replay_id` dès le premier polling `/replay/next` (sinon gap 1-2s)
|
||||
7. Création `scripts/cancel-replays.sh` — workaround pour purger les queues serveur (bug Stop VWB)
|
||||
|
||||
### 19 mai
|
||||
8. **Merge workflow `linux_db`** dans Demo_urgence_3_db (suppression ord 36-46, insertion 9 steps de linux_db) via agent
|
||||
9. **Bypass LLM** : `_handle_t2a_decision_action` + `_handle_llm_generate_action` acceptent maintenant `static_result` / `static_text` → décision déterministe UHCD pour MOREL Catherine (court-circuit Ollama)
|
||||
10. **Bug `delay_before/delay_after` jamais lus** au runtime → ajout step `wait` explicite + lift `duration_ms` dans `dag_execute.py`
|
||||
11. **Bug coord côté Léa** : `actual_position Y` divisé par ~27 sur certains clics (mapping client utilise dim écran tronquée `2560×60` au lieu de `2560×1600`)
|
||||
12. **Bug VWB recapture anchor** : "Recapture" via UI ne régénère PAS le PNG (les 2 anchors `anchor_d467a5411722` et `anchor_bfbffbb47be7` sont **bit-à-bit identiques** alors que capturés à 8 jours d'intervalle)
|
||||
13. **Bug Léa état mémoire** : la bulle paused n'apparaît plus dans le chat après plusieurs replays consécutifs → résolu par restart Léa Windows
|
||||
14. Solution pour NoMachine : remplacé le double-clic auto par `pause_for_human` → Dom clique manuellement pendant l'enregistrement
|
||||
|
||||
## Bugs racines identifiés (à traiter post-démo, par ordre de gravité)
|
||||
|
||||
### 🔴 P0 — Bug "recapture anchor ne régénère pas le PNG" (VWB)
|
||||
**Symptôme** : à chaque modif, "régression mystérieuse". L'anchor recapturé pointe sur la mauvaise icône car le PNG reste l'ancien.
|
||||
**Audit** : `visual_workflow_builder/backend/api_v3/capture.py` — chercher si `image_path` est défini AVANT le screenshot, ou si la fonction réutilise un fichier existant.
|
||||
**Impact** : explique 80% des "ça marchait hier" et des régressions silencieuses entre démos.
|
||||
|
||||
### 🔴 P0 — Bug "Stop VWB ne purge pas la queue serveur"
|
||||
**Symptôme** : relance d'un replay = celui-ci hérite des actions en attente du précédent → Léa reprend au milieu.
|
||||
**Workaround actuel** : `./scripts/cancel-replays.sh` manuel.
|
||||
**Vrai fix** : VWB doit appeler `POST /api/v1/traces/stream/replay/<id>/cancel` quand on clique Stop.
|
||||
|
||||
### 🔴 P0 — Bug coord côté Léa client (mapping Y cassé sur capture tronquée)
|
||||
**Symptôme** : `actual_position Y = 0.0099` au lieu de `0.265` → clic en haut de l'écran au lieu de la cible.
|
||||
**Cause** : `mss.monitors[1]` retourne intermittemment `2560×60` au lieu de `2560×1600` → Léa map `y_pct * 60 = 16 px`.
|
||||
**Audit** : `agent_v0/agent_v1/core/executor.py:606-617` — ajouter fallback dim minimale (rejeter si `height < 200`).
|
||||
|
||||
### ⚠️ P1 — Léa client accumule un état mémoire dégradé
|
||||
**Symptôme** : après plusieurs pauses consécutives, la bulle paused n'apparaît plus (chat vide alors que le serveur envoie bien `replay_paused: true`).
|
||||
**Workaround** : restart Léa Windows.
|
||||
**Vrai fix** : reset propre de `_last_pause_msg_shown`, `_chat_window_ref`, état Tkinter à chaque fin de replay (côté `main.py`).
|
||||
|
||||
### ⚠️ P1 — `delay_before` / `delay_after` ignorés au runtime
|
||||
**Symptôme** : on peut configurer ces champs en DB mais Léa ne les lit pas.
|
||||
**Fix partiel appliqué** : `dag_execute.py` lift `duration_ms` pour les actions `wait`/`wait_for_anchor`.
|
||||
**Vrai fix** : faire de même pour `delay_before` et `delay_after` côté executor.py (généraliser).
|
||||
|
||||
### ⚠️ P1 — Léa client interprète `action=null + replay_paused=true` comme "fin du replay"
|
||||
**Symptôme** : main.py désactive `_replay_active` à tort quand le replay est en pause → cleanup UI + bulle invisible.
|
||||
**Fix proposé** : `executor.py:1875` retourner `True` (au lieu de `False`) quand `replay_paused` est traité.
|
||||
**Status** : non appliqué (nécessite SCP + restart Léa Windows).
|
||||
|
||||
### ⚠️ P2 — Bug VWB frontend cache
|
||||
**Symptôme** : après modif DB, le frontend continue à envoyer l'ancienne version. Ctrl+Shift+R obligatoire.
|
||||
**Vrai fix** : invalidation cache automatique côté React quand workflow modifié serveur-side.
|
||||
|
||||
## Leçons de méthode (autocritique honnête)
|
||||
|
||||
1. **15 jours de dérive** : on a accumulé des modifs locales sans valider à chaque étape qu'on ne dégradait pas l'existant. CLAUDE.md disait "chirurgie itérative supervisée", on a fait l'inverse à plusieurs reprises.
|
||||
2. **Pas de tests de non-régression entre démos** : à chaque "ça marchait hier", on découvrait par hasard qu'un truc avait changé. Manque de smoke-test reproductible.
|
||||
3. **Bug VWB recapture anchor non détecté pendant 15 jours** : la cause racine n°1 des régressions silencieuses était invisible. Aurait dû être trouvée plus tôt par un audit "diff PNG anchor avant/après recapture".
|
||||
4. **Workarounds empilés** : chaque bug a généré un workaround (script cancel-replays.sh, bypass LLM static, pause humaine NoMachine, etc.) au lieu de fixer la cause. Dette technique accumulée.
|
||||
5. **Recapture en aveugle** : Dom a recapturé plusieurs anchors en pensant fixer le bug, alors que le bug était VWB côté capture (pas Dom).
|
||||
|
||||
## État technique en sortie de session
|
||||
|
||||
- **Branche actuelle** : `feature/qw-suite-mai` (avec toutes les modifs uncommitted de la session)
|
||||
- **Branche backup** : `backup/post-demo-2026-05-19` (commit groupé, poussé sur gitea)
|
||||
- **Référence "ça marchait"** : tag `demo-stable-2026-05-12` (commit `2eeaa806b`), branche `demo/ght-2026-05-08` (commit `56e869c46`)
|
||||
- **Services actifs** : streaming (5005), VWB backend (5002), VWB frontend (3002), dashboard (5001), worker (5099), agent-chat (5004)
|
||||
- **Bypass LLM actif** dans `replay_engine.py` : les steps 12/13/14 du workflow utilisent `static_result`/`static_text` → décision UHCD MOREL hardcodée
|
||||
- **NPM bypass auth** actif dans `proxy_host/10.conf` (sera écrasé si UI NPM touchée)
|
||||
|
||||
## Sauvegardes
|
||||
|
||||
| Type | Localisation | Détails |
|
||||
|------|--------------|---------|
|
||||
| Tarball | `/home/dom/ai/_archives/rpa_vision_v3_post_demo_20260519_142940.tar.gz` | 8.9 Go, sha256 vérifié |
|
||||
| Branche git | `backup/post-demo-2026-05-19` sur gitea | commit `5ea4960e6`, 627 fichiers incluant 468 anchors |
|
||||
| Backups DB | `visual_workflow_builder/backend/instance/workflows.db.bak.*` | ~12 .bak DB de la session (chaque modif majeure) |
|
||||
|
||||
## Prochaine session — priorités proposées
|
||||
|
||||
1. **Comparer avec `demo/ght-2026-05-08`** : identifier ce qui a vraiment régressé depuis l'état "ça marchait" (mais qui était moins mature)
|
||||
2. **Fixer le bug VWB recapture anchor** (P0) — c'est le boss final, il explique la majorité des régressions silencieuses
|
||||
3. **Fixer le bug Stop VWB ne purge pas la queue** (P0) — supprime un workaround manuel
|
||||
4. **Réintégrer le fix `executor.py:1875` (return True sur replay_paused) côté Léa** + SCP + restart Léa Windows
|
||||
5. **Smoke-test reproductible** : script qui rejoue Demo_urgence_3_db de bout en bout et compare l'état attendu à chaque step (au lieu de tester manuellement)
|
||||
|
||||
## Pointeurs utiles
|
||||
|
||||
- Mémoire projet : `/home/dom/.claude/projects/-home-dom-ai-rpa-vision-v3/memory/MEMORY.md`
|
||||
- CLAUDE.md projet : `/home/dom/ai/rpa_vision_v3/CLAUDE.md` (règles de méthode)
|
||||
- Reset replays : `./scripts/cancel-replays.sh`
|
||||
- Mockup AIVA-URGENCE : `docs/clients/ght_sud_95/aiva_urgence/` (port 8765, exposé via `https://urgence.labs.laurinebazin.design/aiva-urgence/`)
|
||||
- Workflow ID démo : `wf_483910cdd851_1778750587`
|
||||
138
docs/handoffs/2026-05-20_handoff_claude_horizon1_lea_first.md
Normal file
138
docs/handoffs/2026-05-20_handoff_claude_horizon1_lea_first.md
Normal file
@@ -0,0 +1,138 @@
|
||||
# Handoff Claude — Horizon 1 Léa-first
|
||||
|
||||
**Date** : 2026-05-20
|
||||
**Branche** : `backup/post-demo-2026-05-19` (HEAD `5ea4960e6`)
|
||||
**Session** : sessions du 19-20 mai post-démo GHT
|
||||
|
||||
## Contexte
|
||||
|
||||
Horizon 1 = pivot Léa-first post-démo GHT. Mission globale comprise : auditer l'état réel du runtime `capture → replay direct → memory`, identifier et corriger ce qui empêche cette voie d'être nominale, préparer la validation client. Cadre : pas de refonte large, pas de retour sur VWB comme outil central, chirurgie supervisée.
|
||||
|
||||
Le travail a été découpé par Dom en missions numérotées (1, 2, 2b, 3, 4, 5) avec périmètres serrés et interdits explicites. Ce handoff couvre uniquement ma contribution sur ces missions.
|
||||
|
||||
## Travaux réalisés
|
||||
|
||||
### Audits (lecture seule, sans modification de code)
|
||||
|
||||
| Mission | Objectif | Livrable |
|
||||
|---|---|---|
|
||||
| Préliminaire | Inventaire factuel des 15 jours pré-démo GHT (ce qui marche / ce qui casse) | `docs/LESSONS_LEARNED_GHT_2026-05.md` |
|
||||
| 1 | 10 blocages runtime Léa-first (capture / replay direct / memory) | `docs/AUDIT_LEA_FIRST_RUNTIME_2026-05-19.md` |
|
||||
| 3 | Cartographie de la perte de `window_title` dans le pipeline mémoire | `docs/AUDIT_WINDOW_TITLE_MEMORY_PATH_2026-05-19.md` |
|
||||
| 4 | Point d'intégration agent le plus petit pour le contrat `/finalize` enrichi | `docs/AUDIT_FINALIZE_CONTRACT_INTEGRATION_2026-05-20.md` |
|
||||
| 5 | Préparation validation réelle Windows (fichiers à déployer + smoke test) | `docs/SMOKE_TEST_FINALIZE_REPLAY_2026-05-20.md` |
|
||||
|
||||
### Modifications de code
|
||||
|
||||
**Faites par moi (missions 2 + 2b)** :
|
||||
- `agent_v0/agent_v1/vision/capturer.py` — ajout garde dimensions monitor :
|
||||
- constantes module-level (`MIN_MONITOR_WIDTH=200`, `MIN_MONITOR_HEIGHT=200`, `MONITOR_MAX_ATTEMPTS=2`, `MONITOR_RETRY_DELAY_S=0.05`)
|
||||
- helpers `_is_monitor_sane`, `_dim_str`, `_acquire_safe_grab(allow_secondary_fallback)`
|
||||
- refactor `capture_full_context` (fallback secondaire autorisé)
|
||||
- refactor `capture_dual` (fail-closed sur fallback secondaire)
|
||||
- refactor `capture_active_window` path standalone (fail-closed)
|
||||
- `tests/unit/test_capturer_monitor_guard.py` — CRÉÉ, 10 tests TDD
|
||||
|
||||
Handoff de ce fix : `docs/handoffs/2026-05-19_handoff_fix_capture_monitor_guard.md`.
|
||||
|
||||
**Constatées dans la branche, NON faites par moi** (apparues entre mes missions, probablement faites dans une session parallèle) :
|
||||
- `agent_v0/agent_v1/main.py` — câblage `set_on_finalize_result` + `_on_finalize_result` + import `dispatch_finalize_result`
|
||||
- `agent_v0/agent_v1/network/streamer.py` — attribut + setter + invocation `_on_finalize_result` dans `_finalize_session`
|
||||
- `agent_v0/agent_v1/ui/smart_tray.py` — méthode `offer_finalize_replay` + `_launch_replay_request`
|
||||
- `agent_v0/agent_v1/finalize_contract.py` — NOUVEAU fichier (untracked)
|
||||
- `agent_v0/agent_v1/core/executor.py` — modifié (origine antérieure, hors scope mes missions)
|
||||
|
||||
### Validations / tests
|
||||
|
||||
| Test | Commande | Résultat |
|
||||
|---|---|---|
|
||||
| Garde monitor (10 tests TDD) | `source .venv/bin/activate && python -m pytest tests/unit/test_capturer_monitor_guard.py -v` | `10 passed in 0.25s` |
|
||||
| Import sanity du module modifié | `python -c "from agent_v0.agent_v1.vision.capturer import VisionCapturer, _acquire_safe_grab, _is_monitor_sane, MIN_MONITOR_WIDTH, MIN_MONITOR_HEIGHT, MONITOR_MAX_ATTEMPTS, MONITOR_RETRY_DELAY_S"` | `Import OK ; seuils=200x200, retries=2, delay=0.05s` |
|
||||
|
||||
Aucun autre test exécuté (suite complète projet, tests intégration, tests Windows réel).
|
||||
|
||||
## Fichiers touchés (effectivement modifiés par moi)
|
||||
|
||||
```
|
||||
agent_v0/agent_v1/vision/capturer.py (modifié — garde monitor)
|
||||
tests/unit/test_capturer_monitor_guard.py (créé — 10 tests)
|
||||
```
|
||||
|
||||
Plus les 6 documents listés en section Audits ci-dessus.
|
||||
|
||||
**Aucune autre modification de code de ma part.** Les autres modifs visibles dans `git status` (main.py, streamer.py, smart_tray.py, finalize_contract.py, executor.py) ne sont pas de mon fait.
|
||||
|
||||
## Tests exécutés
|
||||
|
||||
```bash
|
||||
source /home/dom/ai/rpa_vision_v3/.venv/bin/activate && \
|
||||
python -m pytest tests/unit/test_capturer_monitor_guard.py -v
|
||||
```
|
||||
|
||||
Résultat : **10 passed in 0.25s** (rejet dims aberrantes, log WARNING avec dims observées, retry après aberration, fallback monitor secondaire pour `capture_full_context`, fail-closed sur fallback secondaire pour `capture_dual` et `capture_active_window`, non-régression dim normale).
|
||||
|
||||
Cycle TDD respecté : RED observé avant chaque GREEN sur les 4 tests qui ont fait l'objet d'une implémentation neuve (tests 1, 3, 5, 8).
|
||||
|
||||
## Points ouverts
|
||||
|
||||
### Bugs P0 identifiés mais NON fixés
|
||||
|
||||
| # | Origine | Statut |
|
||||
|---|---|---|
|
||||
| P0 #1 audit Léa-first | `record_human_correction` double bug (import inexistant + signature obsolète) | **non fixé** |
|
||||
| P0 #2 audit Léa-first | `build_workflow_replay` orphelin (0 caller runtime) | **non fixé** — note : pertinence à reconsidérer maintenant que le contrat `/finalize` enrichi semble couvrir le besoin |
|
||||
| P0 #3 audit Léa-first / Mission 3 | `window_title` perdu : asymétrie écriture top-level vs lecture target_spec (`stream_processor.py:1545` vs `:1590-1601`) | **non fixé** |
|
||||
| P0 #3 audit Léa-first / Mission 3 | Fallback `expected_window_before` morte dans `api_stream.py:3636` (cherche dans target_spec, n'est jamais là) | **non fixé** |
|
||||
| P0 #4 audit Léa-first | `mss.monitors[1]` aveugle aux dims aberrantes | ✅ **FIXÉ** missions 2 + 2b |
|
||||
|
||||
### Validations Windows en attente
|
||||
|
||||
| Item | Statut |
|
||||
|---|---|
|
||||
| SCP des 5 fichiers vers `dom@192.168.1.11:C:/rpa_vision/agent_v1/` (capturer.py, finalize_contract.py, streamer.py, smart_tray.py, main.py) | **non fait** |
|
||||
| Reproduction réelle du bug mss monitors aberrant | **non vérifié** (la garde protège sans expliquer la cause exacte) |
|
||||
| Smoke test 5 minutes `enregistrement → finalize → proposition → replay-session` sur Léa Windows | **non fait** |
|
||||
| Contrat serveur `/finalize` enrichi renvoie bien `{replay_ready, replay_request, replay_launch}` | **non vérifié** (audité côté agent uniquement, jamais déclenché en condition réelle) |
|
||||
|
||||
### État git
|
||||
|
||||
- 5 fichiers modifiés non committés (`capturer.py` par moi ; `main.py`, `streamer.py`, `smart_tray.py`, `executor.py` non par moi)
|
||||
- 1 fichier untracked (`finalize_contract.py`, non par moi)
|
||||
- 6 documents créés dans `docs/` et `docs/handoffs/` (par moi, non committés)
|
||||
|
||||
## Risques / hypothèses
|
||||
|
||||
### Sur le déploiement et la synchro client Windows
|
||||
|
||||
- **Hypothèse** : le canal de déploiement Windows reste le `sshpass scp` manuel fichier par fichier vers `C:/rpa_vision/agent_v1/`, conforme à `memory/feedback_scp_auto_modif_client_windows.md`. **Non vérifié** : aucun script SCP automatique n'est présent dans le repo, et le dossier `agent_v0/deploy/windows_client/` est obsolète de 2 à 7 semaines selon les fichiers (sert au setup initial, pas à l'incrémental).
|
||||
- **Risque critique** : `finalize_contract.py` est un fichier neuf untracked. Le réflexe "je SCP les fichiers modifiés" ne le couvre pas. **Si oublié → ImportError au démarrage Léa, agent ne démarre pas**.
|
||||
- **Risque** : SCP non atomique. Si Léa est relancée entre 2 SCP, état incohérent possible. Mitigation : SCP les 5 fichiers d'abord, **puis** relancer Léa.
|
||||
- **Hypothèse** : token `RPA_API_TOKEN` est exporté côté session Windows. **Non vérifié** depuis cette session. Sans token → `register` et `finalize` retournent 401 silencieusement.
|
||||
|
||||
### Sur le contrat `/finalize` enrichi
|
||||
|
||||
- **Observé** : le câblage agent-side consomme un contrat `{replay_ready, replay_request, replay_launch}` (avec `replay_launch.status` ∈ {`started`, `failed`}). **Non vérifié** : le serveur Linux retourne effectivement ce contrat. Si le serveur renvoie encore l'ancien payload, le smoke test s'arrêtera silencieusement après l'étape "Session finalisée" sans crash ni proposition.
|
||||
|
||||
### Sur le fix monitor
|
||||
|
||||
- **Fait** : la garde protège contre dim aberrante via mocks. **Non vérifié** sur Léa Windows réelle (pas de SCP). La cause exacte côté `mss` reste non identifiée — cette garde **protège sans expliquer**.
|
||||
- **Hypothèse** : seuil 200 px choisi par jugement, pas par mesure empirique sur l'éventail des dims légitimes. À relever si un faux rejet apparaît en prod.
|
||||
|
||||
## Ce que je recommande pour la suite
|
||||
|
||||
1. **Committer `finalize_contract.py` et les 5 fichiers modifiés** avant tout SCP. Un fichier untracked qui disparaît dans un `git stash` ou `git checkout` casserait silencieusement Léa au prochain démarrage. Un seul commit groupé `feat(agent): câblage contrat /finalize enrichi + garde dims monitor` aligne aussi les deux chantiers Horizon 1.
|
||||
|
||||
2. **Smoke test 5 min sur Léa Windows en suivant `docs/SMOKE_TEST_FINALIZE_REPLAY_2026-05-20.md`** avant tout autre développement. Risque P0 : tant qu'on n'a pas vu le flux complet `enregistrement → finalize → proposition → replay-session` tourner sur Léa réelle, on ne sait pas si le contrat serveur est bien aligné avec le câblage agent.
|
||||
|
||||
3. **Fixer les bugs P0 #1 et #3 (Mission 3) dans une mission courte dédiée** :
|
||||
- `record_human_correction` (2 lignes : import + signature)
|
||||
- `expected_window_before` fallback (1 ligne dans `api_stream.py:3636` : `action.get(...) or _tspec.get(...)` au lieu de `_tspec.get(...) or _tspec.get(...)`)
|
||||
Ces 3 lignes débloquent l'apprentissage supervisé et la fallback mémoire, sans dépendre du run Windows.
|
||||
|
||||
4. **Reconsidérer le statut de P0 #2 (`build_workflow_replay` orphelin)** maintenant que le contrat `/finalize` enrichi expose `replay_request`. Hypothèse : le besoin du pont capture→replay-direct est résolu par le nouveau contrat. Si vrai → supprimer `workflow_replay.py` (code mort) ou le marquer explicitement obsolète. À trancher avant prochaine session sur le sujet.
|
||||
|
||||
5. **Ne pas attaquer le bug P0 #3 racine (window_title posé top-level au lieu de target_spec dans `stream_processor.py:1545`) sans confirmation produit du contrat mémoire**. La correction "rapide" (propager dans target_spec) marche mais n'élimine pas le doublon top-level / target_spec présent dans tout le code. Mieux : décider d'abord si la signature d'écran reste `sha256(window_title)` ou évolue (référence `last_window_info` au niveau session, par exemple).
|
||||
|
||||
---
|
||||
|
||||
**Conformité aux contraintes** : pas de réécriture historique projet, VWB mentionné une seule fois (recommandation 4, comparaison de pont), pas de proposition de refonte, factuel, court. Aucune modification de code dans cette mission handoff.
|
||||
142
docs/handoffs/2026-05-20_handoff_horizon1_lea_first.md
Normal file
142
docs/handoffs/2026-05-20_handoff_horizon1_lea_first.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# Handoff Horizon 1 — Lea-first
|
||||
|
||||
Date : 2026-05-20
|
||||
Owner : Codex
|
||||
Contexte : remise en ordre du coeur produit `Lea-first` en excluant `VWB` du chemin nominal court terme.
|
||||
|
||||
## 1. Ligne produit retenue
|
||||
|
||||
- Coeur produit court terme : `capture -> replay direct -> verification -> memory`
|
||||
- `VWB` n'est pas la reference produit
|
||||
- `TargetMemoryStore` est la boucle d'apprentissage utile pour Horizon 1
|
||||
- La voie `shadow -> WorkflowIR -> ExecutionPlan` reste une direction moyen terme, pas la voie nominale actuelle
|
||||
|
||||
## 2. Tickets traites
|
||||
|
||||
### T1 — correction humaine -> mémoire persistante
|
||||
|
||||
Fichiers :
|
||||
- `agent_v0/server_v1/replay_learner.py`
|
||||
- `tests/unit/test_policy_grounding_recovery_learning.py`
|
||||
|
||||
Effet :
|
||||
- `record_human_correction()` repersiste bien dans la mémoire cible
|
||||
- fallback `window_title` amélioré
|
||||
|
||||
### T2 — pause/reprise replay côté agent
|
||||
|
||||
Fichiers :
|
||||
- `agent_v0/agent_v1/core/executor.py`
|
||||
- `agent_v0/agent_v1/main.py`
|
||||
- `tests/unit/test_agent_v1_replay_pause_state.py`
|
||||
|
||||
Effet :
|
||||
- `replay_paused=true` ne coupe plus prématurément le mode replay
|
||||
|
||||
### T3 — contrat `window_title` pour la mémoire
|
||||
|
||||
Fichiers :
|
||||
- `agent_v0/server_v1/stream_processor.py`
|
||||
- `agent_v0/server_v1/api_stream.py`
|
||||
- `tests/unit/test_window_title_memory_path.py`
|
||||
|
||||
Effet :
|
||||
- le flux Lea-first propage `window_title` jusque dans les chemins mémoire importants
|
||||
|
||||
### T4 — chaînage produit `finalize -> replay-session`
|
||||
|
||||
Fichiers :
|
||||
- `agent_v0/server_v1/api_stream.py`
|
||||
- `tests/integration/test_finalize_replay_chain.py`
|
||||
|
||||
Effet :
|
||||
- `POST /api/v1/traces/stream/finalize` reste compatible
|
||||
- expose maintenant `replay_ready` et `replay_request`
|
||||
- peut lancer un replay direct avec `launch_replay=true`
|
||||
- si le lancement échoue, la finalisation reste un succès exploitable
|
||||
|
||||
### T5 — intégration agent du contrat `finalize`
|
||||
|
||||
Fichiers :
|
||||
- `agent_v0/agent_v1/network/streamer.py`
|
||||
- `agent_v0/agent_v1/ui/smart_tray.py`
|
||||
- `agent_v0/agent_v1/main.py`
|
||||
- `agent_v0/agent_v1/finalize_contract.py`
|
||||
- `tests/unit/test_agent_finalize_replay_contract.py`
|
||||
- `tests/integration/test_client_server_compat.py`
|
||||
|
||||
Effet :
|
||||
- `TraceStreamer` remonte le payload JSON de `/finalize`
|
||||
- `AgentV1` route ce payload vers une logique légère dédiée
|
||||
- le systray propose un test immédiat avec consentement humain
|
||||
- le lancement de test passe par `POST /api/v1/traces/stream/replay-session`
|
||||
- on ne réutilise pas `_launch_replay()` car cette méthode cible `/replay/start` avec `workflow_id`
|
||||
|
||||
## 3. Tests verts
|
||||
|
||||
- `pytest -q tests/unit/test_agent_v1_replay_pause_state.py`
|
||||
- `pytest -q tests/unit/test_window_title_memory_path.py`
|
||||
- `pytest -q tests/unit/test_agent_finalize_replay_contract.py`
|
||||
- `pytest -q tests/integration/test_client_server_compat.py -k finalize`
|
||||
- `pytest -q tests/integration/test_finalize_replay_chain.py`
|
||||
- `pytest -q tests/unit/test_capturer_monitor_guard.py`
|
||||
- `pytest -q tests/unit/test_target_memory_store.py`
|
||||
- `pytest -q tests/unit/test_policy_grounding_recovery_learning.py -k 'ReplayLearner and human_correction'`
|
||||
|
||||
Note :
|
||||
- le fichier complet `tests/unit/test_policy_grounding_recovery_learning.py` reste non portable localement à cause de `pynput`
|
||||
|
||||
## 4. Etat du worktree
|
||||
|
||||
Modifs runtime principales en cours :
|
||||
- `agent_v0/agent_v1/core/executor.py`
|
||||
- `agent_v0/agent_v1/main.py`
|
||||
- `agent_v0/agent_v1/network/streamer.py`
|
||||
- `agent_v0/agent_v1/ui/smart_tray.py`
|
||||
- `agent_v0/agent_v1/vision/capturer.py`
|
||||
- `agent_v0/server_v1/api_stream.py`
|
||||
- `agent_v0/server_v1/replay_learner.py`
|
||||
- `agent_v0/server_v1/stream_processor.py`
|
||||
- `tests/integration/test_client_server_compat.py`
|
||||
- `tests/unit/test_policy_grounding_recovery_learning.py`
|
||||
|
||||
Nouveaux fichiers runtime/tests :
|
||||
- `agent_v0/agent_v1/finalize_contract.py`
|
||||
- `tests/integration/test_finalize_replay_chain.py`
|
||||
- `tests/unit/test_agent_finalize_replay_contract.py`
|
||||
- `tests/unit/test_agent_v1_replay_pause_state.py`
|
||||
- `tests/unit/test_capturer_monitor_guard.py`
|
||||
- `tests/unit/test_window_title_memory_path.py`
|
||||
|
||||
Fichiers hors-scope a ne pas embarquer par reflexe :
|
||||
- `visual_workflow_builder/backend/instance/workflows.db`
|
||||
- docs d'audit/handoff/plan si on veut un commit runtime pur
|
||||
- `.remember/*`
|
||||
|
||||
## 5. Recommandation de commit
|
||||
|
||||
Point de commit pertinent :
|
||||
- un commit runtime/tests cohérent `Horizon 1 Lea-first`
|
||||
|
||||
Message suggéré :
|
||||
- `lea-first: stabilize direct replay and finalize contract`
|
||||
|
||||
## 6. Prochain objectif
|
||||
|
||||
Ne pas ouvrir un nouveau chantier code tout de suite.
|
||||
|
||||
Priorité suivante :
|
||||
- validation réelle du flux :
|
||||
`fin enregistrement -> finalize -> proposition utilisateur -> replay-session`
|
||||
|
||||
Mission de lecture utile à déléguer :
|
||||
- vérifier le déploiement Windows effectif des fichiers modifiés
|
||||
- produire une checklist de smoke test réel de 5 minutes
|
||||
|
||||
## 7. Décision de reprise
|
||||
|
||||
Si nouvelle session :
|
||||
- repartir à partir de ce handoff
|
||||
- considérer le bloc `serveur + agent + tests finalize` comme base de référence
|
||||
- ne pas revenir sur `VWB`
|
||||
- passer en mode `validation réelle / déploiement / smoke test`
|
||||
100
docs/handoffs/2026-05-23_handoff_codex_lea_replay_resume.md
Normal file
100
docs/handoffs/2026-05-23_handoff_codex_lea_replay_resume.md
Normal file
@@ -0,0 +1,100 @@
|
||||
Contexte
|
||||
- Projet : `rpa_vision_v3`
|
||||
- Poste Windows de démo : `dom@192.168.1.11`
|
||||
- Léa Windows poll le serveur Linux `192.168.1.40:5005`
|
||||
- Coordination Claude/Codex via `docs/coordination/`
|
||||
|
||||
Direction produit
|
||||
- Ne pas dériver vers une simple “boîte à clic”.
|
||||
- Cible produit : `capture brute -> post-traitement -> workflow différé compilé -> exécution supervisable`.
|
||||
- Le `replay-session` direct reste utile pour smoke/debug, mais n’est pas la voie produit finale.
|
||||
- Les “réflexes” (`Enregistrer`, `Ouvrir`, `Copier`, etc.) doivent idéalement devenir des primitives robustes, pas des chorégraphies visuelles fragiles.
|
||||
|
||||
État code important déjà en place
|
||||
- `finalize -> replay-session` validé.
|
||||
- setup Windows durci par `verify_screen`.
|
||||
- propagation `expected_window_before` côté serveur.
|
||||
- relaxation ciblée du seuil pour `switch_tab`.
|
||||
- garde drift `anchor-template`.
|
||||
- handler runtime popup `Confirmer l'enregistrement -> Oui` ajouté côté agent dans `executor.py`.
|
||||
- nouveau patch grounding côté agent :
|
||||
- rejet des rects système / taskbar
|
||||
- validation visuelle du crop fenêtre avant usage
|
||||
- fallback plein écran si le crop ne matche pas visuellement
|
||||
|
||||
Derniers fichiers touchés
|
||||
- `agent_v0/agent_v1/core/executor.py`
|
||||
- `agent_v0/agent_v1/core/grounding.py`
|
||||
- `tests/unit/test_executor_verify_window_guard.py`
|
||||
- `tests/unit/test_policy_grounding_recovery_learning.py`
|
||||
|
||||
Validation locale récente
|
||||
- `./.venv/bin/pytest -q tests/unit/test_executor_verify_window_guard.py`
|
||||
- `./.venv/bin/pytest -q tests/unit/test_policy_grounding_recovery_learning.py -k GroundingEngine`
|
||||
- `python3 -m py_compile agent_v0/agent_v1/core/executor.py`
|
||||
- `python3 -m py_compile agent_v0/agent_v1/core/grounding.py tests/unit/test_policy_grounding_recovery_learning.py`
|
||||
|
||||
Déploiement Windows récent
|
||||
- `C:\\rpa_vision\\agent_v1\\core\\executor.py` mis à jour
|
||||
- `C:\\rpa_vision\\agent_v1\\core\\grounding.py` mis à jour
|
||||
- `py_compile` Windows OK pour ces fichiers
|
||||
|
||||
Problème infrastructure découvert
|
||||
- Le serveur Linux n’utilise pas réellement le GPU actuellement.
|
||||
- Symptômes :
|
||||
- `nvidia-smi` échoue avec `Driver/library version mismatch`
|
||||
- module noyau NVIDIA `580.126.09`
|
||||
- libs userspace `580.159.03`
|
||||
- PyTorch `.venv` : `cuda_available=False`
|
||||
- Conséquence :
|
||||
- une partie des résolutions vision reste CPU-bound
|
||||
- les `Server resolve timeout` à 30s sont fortement amplifiés
|
||||
- Correctif probable infra :
|
||||
- reboot Linux pour réaligner driver chargé / libs
|
||||
- sinon réparation driver NVIDIA
|
||||
|
||||
Replays live récents
|
||||
- `replay_sess_ebb4d998`
|
||||
- a servi à valider le besoin du handler popup overwrite
|
||||
- `replay_sess_3c56b8f2`
|
||||
- lancé avec mauvais `machine_id=bg_DESKTOP-58D5CAC_windows`
|
||||
- non consommé par Léa
|
||||
- `replay_sess_595c4947`
|
||||
- lancé avec le bon `machine_id=DESKTOP-58D5CAC_windows`
|
||||
- bien consommé par Léa
|
||||
|
||||
État exact du replay courant `replay_sess_595c4947`
|
||||
- `status=running`
|
||||
- `completed_actions=11/17`
|
||||
- setup passé
|
||||
- saisie `test` passée
|
||||
- nouveau grounding visuel actif, preuve log :
|
||||
- `Grounding fenêtre validé visuellement via 'test'`
|
||||
- point de casse courant :
|
||||
- action `act_raw_74e4e5ec` = clic onglet `Enregistrer sous`
|
||||
- retry puis `som_anchor_match score=0.74`
|
||||
- clic exécuté
|
||||
- `POST-VÉRIF TIMEOUT : 'rpa_vision : Explorateur de fichiers' ≠ '*test - Bloc-notes'`
|
||||
- action suivante `act_raw_022cb97c` se bloque immédiatement car fenêtre actuelle = `rpa_vision : Explorateur de fichiers`
|
||||
- Léa repasse en apprentissage supervisé
|
||||
|
||||
Important
|
||||
- Le handler popup overwrite `Oui/Non` n’a pas encore été réellement exercé sur ce run.
|
||||
- Le blocage actuel est plus tôt : dérive `Enregistrer sous -> Explorateur`.
|
||||
- Je n’ai pas de trace d’un `Ctrl+C` dans ce replay courant.
|
||||
|
||||
Coordination Claude
|
||||
- Brief ouvert :
|
||||
- `docs/coordination/inbox_claude/2026-05-23_1024_codex-to-claude_notepad-saveas-explorer-drift.md`
|
||||
- Réponse attendue dans :
|
||||
- `docs/coordination/inbox_codex/`
|
||||
|
||||
Actions recommandées pour reprise
|
||||
1. Lire le brief Claude ci-dessus et sa réponse si elle existe.
|
||||
2. Vérifier si la machine Windows a bien redémarré Léa proprement.
|
||||
3. Vérifier l’état du replay courant `replay_sess_595c4947`.
|
||||
4. Si le run est abandonné après reboot, relancer un nouveau `POST /replay-session` avec :
|
||||
- `session_id=sess_20260520T102916_066851`
|
||||
- `machine_id=DESKTOP-58D5CAC_windows`
|
||||
5. Continuer le diagnostic uniquement sur la dérive `Enregistrer sous -> Explorateur`.
|
||||
6. Garder en tête le problème infra GPU, mais ne pas le mélanger avec le bug fonctionnel de ce replay.
|
||||
@@ -0,0 +1,142 @@
|
||||
# Handoff Codex — LeaBench / Grounding / Supervision equipe
|
||||
|
||||
Date : 2026-05-24 22:06 Europe/Paris
|
||||
Auteur : Codex
|
||||
Statut memoire Codex : `OK`, mais handoff ecrit pour reprise propre ou nouvelle session.
|
||||
|
||||
## Position projet
|
||||
|
||||
Lea ne doit pas etre une boite a clics. Direction maintenue :
|
||||
|
||||
`observe -> verifier preconditions -> agir -> stabiliser -> juger -> apprendre uniquement sur preuve saine`
|
||||
|
||||
Decisions non negociables :
|
||||
- cloud models = analyse offline uniquement, apres anonymisation explicite ;
|
||||
- runtime Lea reste controle par notre code ;
|
||||
- aucun modele externe ne prend le controle direct de Windows ;
|
||||
- corrections humaines et memory ne sont apprises que si coordonnees et contexte sont sains ;
|
||||
- pas de branchement runtime experimental sans tests et rollback.
|
||||
|
||||
## Commits recents importants
|
||||
|
||||
- `debd7b423 feat(evaluation): add local Ollama LeaBench adapter`
|
||||
- `6544ebe3f feat(evaluation): add 16 LeaBench cases from replay failures`
|
||||
- `10136f0ee feat(agent): add standalone anchor-relative resolver`
|
||||
- `054279feb feat(evaluation): add LeaBench model prompt packs`
|
||||
- `ea1f57afb feat(evaluation): add LeaBench computer-use scorer`
|
||||
- `345762330 fix(agent): respect server visual reject before text fallback`
|
||||
- `b1b32187b fix(agent): P0.6 guard human corrections`
|
||||
- `ad24d16d8 fix(executor): P0.9 double-check stabilité post-transition fenêtre`
|
||||
|
||||
## Etat code
|
||||
|
||||
LeaBench :
|
||||
- `core/evaluation/computer_use_bench.py`
|
||||
- `tools/lea_bench.py`
|
||||
- `benchmarks/computer_use/cases/notepad_replay_failures_2026-05-24.jsonl`
|
||||
- `benchmarks/computer_use/cases/leabench_extended_2026-05-24.jsonl`
|
||||
- 4 cas Notepad initiaux + 16 cas etendus = 20 cas total.
|
||||
- Les 16 cas etendus ont `screenshot_path` reels et sont valides.
|
||||
|
||||
Prompt packs :
|
||||
- `--write-prompt-pack` ajoute a LeaBench.
|
||||
- Le prompt pack ne fuite pas `expectation` ni `click_region`.
|
||||
|
||||
Adaptateur Ollama local :
|
||||
- `core/evaluation/ollama_lea_bench_adapter.py`
|
||||
- `tools/lea_bench_ollama.py`
|
||||
- tests mockes dans `tests/unit/test_ollama_lea_bench_adapter.py`
|
||||
- aucun run live Ollama n'a ete lance apres implementation, pour eviter contention GPU/Ollama pendant Lea.
|
||||
|
||||
Anchor relative :
|
||||
- `agent_v0/agent_v1/core/anchor_relative.py`
|
||||
- `agent_v0/agent_v1/core/anchor_catalog.py`
|
||||
- `tests/unit/test_anchor_relative.py`
|
||||
- Phase 1 standalone acceptee et committee.
|
||||
- Pas de branchement `executor.py`.
|
||||
- Garde Codex ajoute : `target_out_of_bounds`.
|
||||
|
||||
## Verifications passees
|
||||
|
||||
Commandes importantes deja passees :
|
||||
|
||||
```bash
|
||||
python3 -m pytest -q tests/unit/test_computer_use_bench.py tests/unit/test_ollama_lea_bench_adapter.py tests/unit/test_anchor_relative.py
|
||||
python3 -m py_compile core/evaluation/ollama_lea_bench_adapter.py tools/lea_bench_ollama.py
|
||||
python3 tools/lea_bench.py --cases benchmarks/computer_use/cases/notepad_replay_failures_2026-05-24.jsonl --repo-root . --json
|
||||
python3 tools/lea_bench.py --cases benchmarks/computer_use/cases/leabench_extended_2026-05-24.jsonl --repo-root . --json
|
||||
```
|
||||
|
||||
Resultats :
|
||||
- 25 tests verts sur les 3 modules.
|
||||
- 4 cas Notepad valides.
|
||||
- 16 cas etendus valides.
|
||||
- baseline all-abstain sur 16 cas : 10/16 correct, 0 dangereux.
|
||||
|
||||
## Coordination lue
|
||||
|
||||
Claude :
|
||||
- `2026-05-24_2230_claude-to-codex_qwen-leabench-prompt-spec.md`
|
||||
- `2026-05-24_2230_claude-to-codex_anchor-relative-phase1-result.md`
|
||||
- `2026-05-24_2230_claude-to-codex_leabench-cases-enrichis.md`
|
||||
|
||||
Gemini :
|
||||
- `2026-05-24_2315_gemini-to-codex_leabench-adapters-and-cases-v1.md`
|
||||
- `2026-05-24_2345_gemini-to-codex_cloud-adapters-privacy-spec.md`
|
||||
- `2026-05-24_2355_gemini-to-codex_continual-learning-alignment.md`
|
||||
|
||||
Messages envoyes :
|
||||
- `docs/coordination/inbox_claude/2026-05-24_2206_codex-to-claude_memory-health-check-and-handoff.md`
|
||||
- `docs/coordination/outbox_gemini/2026-05-24_2206_codex-to-gemini_memory-health-check-and-handoff.md`
|
||||
- `docs/coordination/outbox_gemini/2026-05-24_2208_codex-to-gemini_quality-frame-source-discipline.md`
|
||||
|
||||
## Points de vigilance
|
||||
|
||||
Deploiement Léa Windows :
|
||||
- Verifie le 2026-05-24 vers 22:18 : `C:\rpa_vision\agent_v1\core\executor.py` date du 24/05 20:24, taille 176068 bytes.
|
||||
- Marqueurs absents cote Windows : `skip_text_fallback_after_server_reject`, `drain_guard_s`, `below_threshold`.
|
||||
- Conclusion : `b1b32187b` P0.6 et `345762330` R1 ne sont pas deployes cote client Windows.
|
||||
- Ne pas relancer de replay live avant backup + SCP du `agent_v0/agent_v1/core/executor.py` local actuel vers Windows, puis relance Lea.
|
||||
|
||||
Gemini cloud/privacy :
|
||||
- Ne pas accepter comme verite les IDs API `gpt-5.5`, `claude-opus-4.7`, etc. sans verification officielle.
|
||||
- Distinguer vision offline vs computer-use natif vs runtime Lea.
|
||||
- Ne pas coder d'adaptateur cloud maintenant.
|
||||
- Regle imposee a Gemini : chaque claim doit etre classe `SOURCE_OFFICIELLE_VERIFIEE`, `SOURCE_PRIMAIRE_NON_OFFICIELLE`, `HYPOTHESE`, `PROPOSITION_PROJET` ou `A_VERIFIER`.
|
||||
- Toute mention de modele/API/benchmark sans source officielle reste non decision-ready.
|
||||
|
||||
GPU/Ollama :
|
||||
- Ne pas lancer `tools/lea_bench_ollama.py` si Lea est active.
|
||||
- Lancer uniquement quand Dom confirme que Lea est idle.
|
||||
|
||||
Git :
|
||||
- Beaucoup de docs non suivis dans `docs/`, `docs/coordination/`, `docs/recherche/`.
|
||||
- Ne pas nettoyer/revert.
|
||||
- Les commits techniques recents sont propres ; les docs coordination restent souvent untracked volontairement.
|
||||
|
||||
## Prochaine action recommandee
|
||||
|
||||
Si Dom confirme que Lea est idle :
|
||||
|
||||
```bash
|
||||
python3 tools/lea_bench_ollama.py \
|
||||
--cases benchmarks/computer_use/cases/leabench_extended_2026-05-24.jsonl \
|
||||
--repo-root . \
|
||||
--model qwen2.5vl:7b-rpa \
|
||||
--output benchmarks/computer_use/predictions/qwen25vl_extended_2026-05-24.jsonl
|
||||
|
||||
python3 tools/lea_bench.py \
|
||||
--cases benchmarks/computer_use/cases/leabench_extended_2026-05-24.jsonl \
|
||||
--repo-root . \
|
||||
--predictions benchmarks/computer_use/predictions/qwen25vl_extended_2026-05-24.jsonl \
|
||||
--json
|
||||
```
|
||||
|
||||
Sinon :
|
||||
- attendre les reponses memory-health de Claude et Gemini ;
|
||||
- preparer Phase 2 `GroundingGuard` sur design/test plan uniquement ;
|
||||
- ne pas brancher runtime avant arbitrage.
|
||||
|
||||
## Resume court pour reprise
|
||||
|
||||
On a stabilise l'axe evaluation avant de continuer a corriger au feeling. LeaBench existe, il a 20 cas reels, un prompt pack neutre, et un adaptateur Ollama local teste sans GPU. `anchor_relative` existe en Phase 1 standalone. Prochaine decision : lancer Qwen local quand Lea est idle, puis utiliser le score pour decider quoi brancher dans `GroundingGuard`.
|
||||
@@ -0,0 +1,127 @@
|
||||
# Handoff Claude — Phase 2 Notepad live réussi, passage session fraîche
|
||||
|
||||
- **Date** : 2026-05-25 09:10
|
||||
- **Auteur** : Claude (session 18h→09h, ~15h continue)
|
||||
- **Contexte** : live Bloc-notes `replay_sess_e96e5822` réussi 18/18, dialog handler runtime validé en prod. Dom demande session fraîche avant Phase 2 wiring.
|
||||
|
||||
## État mémoire honnête (au moment du handoff)
|
||||
|
||||
**Solide** :
|
||||
- Modèle Mandat/Protocoles/Scènes v0.3 (vocabulaire complet, boucle 8 étapes, contrat d'action)
|
||||
- 4 découvertes structurantes (D1 source/deploy, D2 expected_state mort, D3 single in-flight, D4 LearningManager dormant)
|
||||
- 3 dataclasses créées hier (Trace, SceneExpected, Precondition+Recovery) — commit `7bb8d543a`
|
||||
- Discipline rollback (tags, .bak Windows, sshpass `'loli'`)
|
||||
- Contraintes Codex (4 fichiers en lecture seule)
|
||||
- Pipeline de coordination (inbox_claude/inbox_codex)
|
||||
|
||||
**Friction qui commence** :
|
||||
- Précision sur les `file:line` exacts (re-grep nécessaire)
|
||||
- Détail diff par diff des 14 commits
|
||||
- Détails fins des 7 tests manquants WP4
|
||||
|
||||
**Recommandation Claude** : session fraîche maintenant = la bonne décision. Confiance baisse sur les détails fins après ~15h continue.
|
||||
|
||||
## Décisions conceptuelles à conserver
|
||||
|
||||
1. **Léa est mandatée, pas commandée** : reçoit une fin, choisit le chemin, qualifie le retour.
|
||||
2. **Un protocole est une grammaire d'action autour d'une intention** (≠ workflow scripté).
|
||||
3. **Autonomie d'initiative, pas d'entêtement** + délégation tutorée 5 niveaux (N0 observation → N4 autonomie habituelle, contextuel selon protocole/app/client/tuteur/période).
|
||||
4. **Précondition = état attendu vérifiable avant l'action** (formulation Dom).
|
||||
5. **Priorité protocoles** : mieux connu → moins risqué → plus court.
|
||||
6. **Apprentissage uniquement sur résultat qualifié** ; désapprentissage gradué (réduire confiance / restreindre périmètre / quarantaine / supprimer).
|
||||
7. **Méta-cognition minimale** : 4 critères agrégés (score / ancre / scène / prédiction) → AGIR / DEMANDER / ABSTENTION.
|
||||
8. **Rejet sémantique domine fallbacks opportunistes** (règle d'or — déjà gagnée pour close_tab via commit `345762330`).
|
||||
|
||||
## Workpacks produits ce matin (à intégrer)
|
||||
|
||||
| ID | Sujet | Livrable inbox_codex | Conclusion clé |
|
||||
|---|---|---|---|
|
||||
| WP1 (0905) | Inventaire source vs deploy | `2026-05-25_0905_WP1-inventaire-source-deploy.md` | **Risque CRITIQUE** : 9 fichiers divergents, 50% codebase deploy obsolète de 20j. NE PAS RESYNC avant démo. Porter d'abord `monitor_resolution` deploy→source. |
|
||||
| WP2 (0905) | SceneExpected wiring | `2026-05-25_0905_WP2-scene-expected-wiring.md` | Point injection : `_attach_scene_expected()` dans stream_processor.py l.1368. Plan B (hors zone interdite Codex) recommandé passe 1. Flag `RPA_SCENE_EXPECTED` OFF. |
|
||||
| WP3 (0905) | expected_state → Precondition | `2026-05-25_0905_WP3-expected-state-precondition.md` | Mapping Notepad : `Precondition(window_title_must_contain=["Sans titre","Untitled"])` + `Recovery(Ctrl+N, wait 400ms)`. Nouveau module isolé `precondition_inference.py`. Flag `RPA_PRECONDITION_INFER`. |
|
||||
| WP4 (0905) | Single in-flight tests + factorisation | `2026-05-25_0905_WP4-single-inflight-tests-factorisation.md` | Helper `_find_in_flight_action()` remplace blocs api_stream.py:3074-3095 et 3138-3159. 3 tests critiques (1 vert, 1 xfail attendu, 1 limitation Q7). |
|
||||
|
||||
## Documents stratégiques à relire au redémarrage
|
||||
|
||||
Dans cet ordre :
|
||||
|
||||
1. `docs/architecture/MODELE_MANDAT_PROTOCOLS_LEA_2026-05-25_v0.3_ARBITRAGES_DOM.md` — modèle de base
|
||||
2. `docs/architecture/CARTOGRAPHIE_BRIQUES_MANDAT_PROTOCOLS_2026-05-25.md` — carto initiale Codex
|
||||
3. `docs/plans/PLAN_PHASE2_TRACE_MANDAT_PROTOCOLS_2026-05-25.md` — plan d'exécution Phase 2
|
||||
4. `docs/coordination/inbox_codex/2026-05-25_0626_claude-to-codex_rapport-complet-phase-attente.md` — vue d'ensemble pour reprise
|
||||
5. `docs/coordination/inbox_codex/2026-05-25_0905_claude-to-codex_WP{1,2,3,4}*.md` — les 4 derniers WP
|
||||
6. `docs/coordination/inbox_claude/2026-05-25_0855_codex-to-claude_live-notepad-success-speed-followup.md` — preuve live + 3 axes follow-up
|
||||
|
||||
## Commits Phase 2 / cognition (état branche `backup/post-demo-2026-05-19`)
|
||||
|
||||
```
|
||||
7bb8d543a feat(cognition): dataclasses Trace + SceneExpected + Precondition (Phase 2.1) ← Claude
|
||||
[commits Codex Phase 2.0 grounding + précondition Notepad + single in-flight]
|
||||
debd7b423 feat(evaluation): add local Ollama LeaBench adapter ← Codex
|
||||
6544ebe3f feat(evaluation): add 16 LeaBench cases from replay failures ← Claude
|
||||
10136f0ee feat(agent): add standalone anchor-relative resolver ← Claude
|
||||
054279feb feat(evaluation): add LeaBench model prompt packs ← Codex
|
||||
ea1f57afb feat(evaluation): add LeaBench computer-use scorer ← Codex
|
||||
345762330 fix(agent): respect server visual reject before text fallback ← Codex
|
||||
b1b32187b fix(agent): P0.6 guard human corrections ← Codex
|
||||
ad24d16d8 fix(executor): P0.9 double-check stabilité post-transition fenêtre ← Claude
|
||||
a76f3db68 feat(executor): P1 DialogResolver serveur en fallback ← Claude
|
||||
9a029a221 fix(executor): timeout 120→30s ← Claude
|
||||
5ed1810ef fix(memory): rejeter coords (0,0) et hors [0,1] ← Claude
|
||||
c9878f0a7 fix(validator-v2): override success=False uniquement sur TERMINATE
|
||||
```
|
||||
|
||||
Tags rollback récents : `rollback/pre-cognition-dataclasses-2026-05-25_0610`, et tous les tags P0.x/P1 d'hier.
|
||||
|
||||
## Risques restants
|
||||
|
||||
1. **Désynchronisation source/deploy** (D1) : critique, ne pas resync avant démo. Porter `monitor_resolution` deploy→source en priorité quand Codex libère executor.py.
|
||||
2. **Race lock 3349/3470** (D3) : commentaire "race bénigne" accepte le double dispatch. Faible risque démo (Léa unique), à traiter post-démo.
|
||||
3. **`expected_state` mort** (D2) : produit par gemma4 mais jamais lu. WP3 propose le wiring sans gros refactor.
|
||||
4. **autonomous_planner orphelin** (D4) : 1019 LOC, endpoints HTTP 410. À archiver post-démo.
|
||||
5. **Fixtures `replay_failures/` non versionnées** : si purgé, LeaBench casse. Décision Dom : versionner post-démo.
|
||||
|
||||
## Ce que Claude doit faire dans la prochaine session
|
||||
|
||||
1. **Relire les 6 documents stratégiques ci-dessus** (15 min)
|
||||
2. **Vérifier l'état d'avancement Codex** sur le test live `replay_sess_e96e5822` + 3 axes follow-up (perf, trimming, test offline)
|
||||
3. **Attendre arbitrage Codex** sur l'ordre d'intégration des 4 WP avant tout patch
|
||||
4. **Respecter les 4 fichiers en lecture seule** : `executor.py`, `api_stream.py`, `replay_engine.py`, `grounding.py` (tant que Codex n'a pas explicitement libéré)
|
||||
5. **Continuer la discipline rollback** : tag avant chaque modif, commit atomique, tests verts avant
|
||||
6. Si patch validé par Codex : utiliser sshpass `SSHPASS='loli' sshpass -e scp/ssh dom@192.168.1.11` pour SCP Windows
|
||||
|
||||
## Ce que Claude ne doit PAS faire
|
||||
|
||||
- ❌ Modifier runtime sans accord explicite Codex
|
||||
- ❌ Toucher aux 4 fichiers interdits tant que Codex pilote
|
||||
- ❌ Réveiller `autonomous_planner`, `ORALoop`, `LearningManager` (modules dormants identifiés)
|
||||
- ❌ Refactor `report_action_result` (700 lignes, 4 écritures, fragile)
|
||||
- ❌ Refactor `resolve_engine._resolve_target_sync` (cascade VLM)
|
||||
- ❌ Resync brutale source/deploy avant démo
|
||||
- ❌ Activer `DialogResolver` serveur en live alors qu'il est déjà OK côté Léa
|
||||
- ❌ Modifier schéma `target_memory.db` (5 backups en prod)
|
||||
- ❌ Spawner d'agents pour du brainstorming si question est ciblée (overkill — réservé aux explorations larges et workpacks parallèles)
|
||||
|
||||
## Infos opérationnelles
|
||||
|
||||
- **Démo DPI** : `http://192.168.1.40:8765/` (Easily, pour tests futurs post-Bloc-notes)
|
||||
- **Léa Windows** : 192.168.1.11, SSH password `loli`, exec via sshpass
|
||||
- **rpa-streaming** : systemd user sur Linux, port 5005
|
||||
- **Branche** : `backup/post-demo-2026-05-19`
|
||||
- **DB target_memory** : `/home/dom/ai/rpa_vision_v3/data/learning/target_memory.db` (25 entrées valides, 0 poison (0,0))
|
||||
|
||||
## Inventaire complet des messages coordination 2026-05-24 → 2026-05-25
|
||||
|
||||
**inbox_claude/** (de Codex à Claude) : 25 messages depuis 2026-05-23 (le vieux `notepad-saveas-explorer-drift` reste open en option B, classé non-actionable).
|
||||
|
||||
**inbox_codex/** (de Claude à Codex) : ~30 messages depuis 2026-05-23.
|
||||
|
||||
Trop pour les lister, mais les plus récents (24h) :
|
||||
- 13 messages de 2026-05-24 18h → 22h (P0.6 à P1, R1, anchor_relative, LeaBench cases, Qwen spec, GroundingGuard, observations Dom)
|
||||
- 12 messages de 2026-05-25 02h → 09h (brainstorming Mandat/Protocoles v0.2/v0.3, cartographies A1-A4 + carto complémentaire, dataclasses cognitives, 4 WP, rapport phase attente)
|
||||
|
||||
---
|
||||
|
||||
**Statut handoff** : prêt pour redémarrage session fraîche. Bonne reprise.
|
||||
|
||||
Auteur : Claude
|
||||
261
docs/handoffs/2026-05-25_handoff_codex_notepad_success_phase2.md
Normal file
261
docs/handoffs/2026-05-25_handoff_codex_notepad_success_phase2.md
Normal file
@@ -0,0 +1,261 @@
|
||||
# Handoff Codex — Notepad success / Phase 2 cognitive
|
||||
|
||||
Date : 2026-05-25 09:04 Europe/Paris
|
||||
Auteur : Codex
|
||||
Statut memoire Codex : OK pour supervision, mais session fraiche recommandee avant nouvelle phase de programmation lourde.
|
||||
|
||||
## TL;DR
|
||||
|
||||
Le test live Bloc-notes est passe de bout en bout.
|
||||
|
||||
- Replay : `replay_sess_e96e5822`
|
||||
- Source : `sess_20260520T102916_066851`
|
||||
- Machine : `DESKTOP-58D5CAC_windows`
|
||||
- Resultat live : `18/18`, `0` echec, `0` retry, `0` non-verifie
|
||||
- Point critique valide : dialogue Windows `Confirmer l'enregistrement` absorbe sans aide humaine
|
||||
- Signal cle : `warning='runtime_dialog_handled_post_verify'`
|
||||
|
||||
Conclusion produit : le scenario n'est plus seulement une boite a clic. Lea a reussi a poursuivre son intention d'enregistrement malgre un dialogue systeme connu.
|
||||
|
||||
## Position projet a conserver
|
||||
|
||||
Lea doit etre pilotee comme un collaborateur visuel :
|
||||
|
||||
`mandat -> intention -> scene attendue -> precondition -> action -> retour observe -> apprentissage sain`
|
||||
|
||||
Principes non negociables :
|
||||
|
||||
- Ne pas traiter Lea comme un replay de pixels.
|
||||
- Verifier l'etat reel avant les gestes sensibles.
|
||||
- Ne pas apprendre depuis un succes douteux ou une correction humaine parasite.
|
||||
- Les dialogues connus doivent etre absorbes dans la fenetre active, avec verification que le dialogue disparait.
|
||||
- Les dialogues inconnus doivent produire du doute type et une demande d'aide, pas un clic opportuniste.
|
||||
- Claude doit etre delegue largement avant toute phase longue ; Codex garde supervision, arbitrage, integration et live.
|
||||
|
||||
Directive persistante ajoutee :
|
||||
|
||||
- `docs/coordination/CODEX_MEMO_STRATEGIE_SUPERVISION_2026-05-24.md`
|
||||
|
||||
## Travail realise depuis le precedent handoff
|
||||
|
||||
### Correctifs runtime / tests locaux
|
||||
|
||||
Fichiers modifies cote Codex :
|
||||
|
||||
- `agent_v0/agent_v1/core/executor.py`
|
||||
- `agent_v0/agent_v1/core/grounding.py`
|
||||
- `agent_v0/server_v1/api_stream.py`
|
||||
- `agent_v0/server_v1/replay_engine.py`
|
||||
- `tests/integration/test_replay_session_trim_neutral.py`
|
||||
- `tests/unit/test_env_setup.py`
|
||||
- `tests/unit/test_executor_verify_window_guard.py`
|
||||
- `tests/unit/test_grounding_engine.py`
|
||||
|
||||
Points fonctionnels :
|
||||
|
||||
- Grounding : respecte les rejets serveur explicites, notamment les rejets `close_tab_*`, `drift_*`, `below_threshold`.
|
||||
- Replay setup Notepad : ouverture d'un document vierge avec `Ctrl+N` et verification de scene Bloc-notes.
|
||||
- API replay : garde single in-flight partielle pour eviter plusieurs actions concurrentes.
|
||||
- Executor Windows : handler de dialogue runtime connu revu pour travailler dans la fenetre active, cliquer le bouton attendu, puis verifier que la fenetre a change.
|
||||
|
||||
Tests passes :
|
||||
|
||||
```bash
|
||||
.venv/bin/python -m py_compile agent_v0/agent_v1/core/executor.py tests/unit/test_executor_verify_window_guard.py
|
||||
.venv/bin/python -m pytest -q tests/unit/test_executor_verify_window_guard.py
|
||||
```
|
||||
|
||||
Resultat : tests `test_executor_verify_window_guard.py` verts.
|
||||
|
||||
Note : `python3 -m pytest` systeme echoue car `pynput` absent ; utiliser `.venv/bin/python`.
|
||||
|
||||
### Deploiement Windows
|
||||
|
||||
Deploiements effectues vers Lea Windows :
|
||||
|
||||
- `C:\rpa_vision\agent_v1\core\grounding.py`
|
||||
- `C:\rpa_vision\agent_v1\core\executor.py`
|
||||
|
||||
Verifications :
|
||||
|
||||
- `python -m py_compile C:\rpa_vision\agent_v1\core\executor.py` OK cote Windows.
|
||||
- `grounding.py` egalement compile OK apres SCP precedent.
|
||||
- Lea a ete relancee par Dom avant le live test.
|
||||
|
||||
Attention : SSH a ensuite echoue avec `Too many authentication failures`; ne pas supposer que SSH est disponible sans corriger l'auth.
|
||||
|
||||
## Resultat live important
|
||||
|
||||
Ancien replay annule proprement :
|
||||
|
||||
- `replay_sess_37dd7cdf` -> `cancelled`
|
||||
- verification : `active=0`
|
||||
|
||||
Nouveau replay propre :
|
||||
|
||||
- `replay_sess_e96e5822`
|
||||
- lance apres redemarrage Lea et focus ecran 1
|
||||
- termine avec succes selon logs :
|
||||
- `Replay replay_sess_e96e5822 termine avec succes : 18/18 actions`
|
||||
- metriques : `4 resolves [anchor_template=1, grounding_vlm=1, semantic_close_tab_hotkey=1, som_anchor_match=1] score_moy=0.94 temps_moy=10755ms`
|
||||
|
||||
Point critique :
|
||||
|
||||
- action : `act_raw_a8dbaaac`
|
||||
- intention : enregistrer le document dans `Enregistrer sous`
|
||||
- dialogue apparu : `Confirmer l'enregistrement`
|
||||
- serveur OCR n'a pas trouve `Oui` via OCR-only
|
||||
- agent/runtime a quand meme gere le dialogue
|
||||
- report :
|
||||
- `success=True`
|
||||
- `warning='runtime_dialog_handled_post_verify'`
|
||||
- `resolution_method='anchor_template'`
|
||||
|
||||
Interprétation :
|
||||
|
||||
- La brique "dialogue connu dans fenetre active + verification post-clic" fonctionne sur le cas Notepad.
|
||||
- Le comportement doit maintenant devenir un test offline, pas rester une anecdote live.
|
||||
|
||||
## Problemes observes pendant le live
|
||||
|
||||
### Performance
|
||||
|
||||
Le demarrage et l'execution sont trop lents.
|
||||
|
||||
Observations :
|
||||
|
||||
- Environ 60 s entre preparation et demarrage effectif.
|
||||
- Premier dispatch double :
|
||||
- deux `DISPATCH act_setup_sess_open_run` quasiment simultanes.
|
||||
- puis `dispatch_orphan_resent` a 50 s.
|
||||
- Resolution moyenne loggee : environ `10755ms` par resolve.
|
||||
|
||||
Priorite prochaine : mesurer separement build replay, dispatch, attente report agent, resolve VLM/OCR/template.
|
||||
|
||||
### Single in-flight incomplet
|
||||
|
||||
Le live confirme les objections Claude :
|
||||
|
||||
- double dispatch initial encore visible ;
|
||||
- la garde single in-flight ne couvre pas toute la fenetre de race ;
|
||||
- ajouter tests avant refactor.
|
||||
|
||||
WP4 Claude recommande :
|
||||
|
||||
- tests d'abord ;
|
||||
- helper `_find_in_flight_action(session_id, machine_id, replay_id)`;
|
||||
- test concurrent probablement `xfail` tant que la race n'est pas corrigee proprement.
|
||||
|
||||
### Trimming hors objectif
|
||||
|
||||
Le replay a termine une derniere action `ouvrir le lien vers le dossier specifie`.
|
||||
|
||||
Ce n'est pas un echec du live, mais c'est hors mandat "saisir et enregistrer un texte".
|
||||
|
||||
Conclusion : le trimming doit etre pilote par objectif/intention, pas seulement par fin brute du recording.
|
||||
|
||||
### Source/deploy a clarifier
|
||||
|
||||
Claude WP1 signale une divergence massive entre :
|
||||
|
||||
- `agent_v0/agent_v1/`
|
||||
- `agent_v0/deploy/windows_client/agent_v1/`
|
||||
|
||||
Mais le live valide semble utiliser `C:\rpa_vision\agent_v1\...`.
|
||||
|
||||
Ne pas lancer de resync massif avant verification du chemin reel d'execution Windows.
|
||||
|
||||
Action prochaine :
|
||||
|
||||
- confirmer le `CommandLine` du process Windows ;
|
||||
- exposer ou logger un `AGENT_VERSION` avec hash/timestamp ;
|
||||
- documenter une politique unique de deploiement.
|
||||
|
||||
## Coordination lue / envoyee
|
||||
|
||||
Retours Claude lus :
|
||||
|
||||
- `docs/coordination/inbox_codex/2026-05-25_0626_claude-to-codex_rapport-complet-phase-attente.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-25_0640_claude-to-codex_carto-complementaire-agent_chat-WM-ORA.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-25_0610_claude-to-codex_synthese-workpacks-A-B-C.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-25_0905_claude-to-codex_WP1-inventaire-source-deploy.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-25_0905_claude-to-codex_WP2-scene-expected-wiring.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-25_0905_claude-to-codex_WP3-expected-state-precondition.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-25_0905_claude-to-codex_WP4-single-inflight-tests-factorisation.md`
|
||||
|
||||
Messages Codex envoyes a Claude :
|
||||
|
||||
- `docs/coordination/inbox_claude/2026-05-25_0845_codex-to-claude_delegation-max-phase2-supervision.md`
|
||||
- `docs/coordination/inbox_claude/2026-05-25_0855_codex-to-claude_live-notepad-success-speed-followup.md`
|
||||
- `docs/coordination/inbox_claude/2026-05-25_0904_codex-to-claude_handoff-session-fraiche.md`
|
||||
|
||||
Claude doit produire son handoff miroir dans `docs/handoffs/`.
|
||||
|
||||
## Arbitrage courant
|
||||
|
||||
Ordre recommande pour prochaine session :
|
||||
|
||||
1. Lire ce handoff puis lire le handoff Claude miroir.
|
||||
2. Verifier `git status` et ne rien revert.
|
||||
3. Figer le succes live par un test offline minimal sur `runtime_dialog_handled_post_verify`.
|
||||
4. Traiter performance/dispatch :
|
||||
- ajouter les tests WP4 critiques ;
|
||||
- factoriser seulement apres tests ;
|
||||
- mesurer build/dispatch/resolve.
|
||||
5. Ensuite seulement brancher transport inerte `SceneExpected` / `Precondition` cote serveur, flag OFF par defaut.
|
||||
6. Ne pas activer de blocage runtime `scene_expected.required=true` tant que les tests et le chemin Windows reel ne sont pas clarifies.
|
||||
|
||||
Ce qu'il ne faut pas faire au redemarrage :
|
||||
|
||||
- Pas de resync massif `deploy/windows_client` avant verification.
|
||||
- Pas de refactor large `api_stream.report_action_result`.
|
||||
- Pas de reveil `autonomous_planner`, `ORALoop`, `LearningManager`.
|
||||
- Pas de nouveau replay live avant d'avoir decide si on mesure performance ou si on teste une correction.
|
||||
- Pas de commit composite melangeant runtime, docs et experiences.
|
||||
|
||||
## Git / etat worktree
|
||||
|
||||
Worktree sale attendu. Ne pas nettoyer automatiquement.
|
||||
|
||||
Modifies techniques connus :
|
||||
|
||||
- `agent_v0/agent_v1/core/executor.py`
|
||||
- `agent_v0/agent_v1/core/grounding.py`
|
||||
- `agent_v0/server_v1/api_stream.py`
|
||||
- `agent_v0/server_v1/replay_engine.py`
|
||||
- `tests/integration/test_replay_session_trim_neutral.py`
|
||||
- `tests/unit/test_env_setup.py`
|
||||
- `tests/unit/test_executor_verify_window_guard.py`
|
||||
- `tests/unit/test_grounding_engine.py`
|
||||
|
||||
Nombreux docs non suivis dans `docs/`, `docs/coordination/`, `docs/recherche/`, `docs/plans/`, `docs/architecture/`.
|
||||
|
||||
Ne pas les supprimer ; ce sont des artefacts de coordination et recherche.
|
||||
|
||||
## Commandes utiles
|
||||
|
||||
Lister replays actifs :
|
||||
|
||||
```bash
|
||||
TOKEN=$(grep '^RPA_API_TOKEN=' .env.local | cut -d= -f2- | tr -d "'\"")
|
||||
curl -sS -H "Authorization: Bearer $TOKEN" \
|
||||
http://localhost:5005/api/v1/traces/stream/replays |
|
||||
python3 -c "import sys,json; d=json.load(sys.stdin); active=[r for r in d.get('replays', []) if r.get('status') in ('running','paused_need_help','busy')]; print('active=', len(active)); [print(r.get('replay_id'), r.get('status'), r.get('completed_actions'), '/', r.get('total_actions')) for r in active]"
|
||||
```
|
||||
|
||||
Logs live Notepad :
|
||||
|
||||
```bash
|
||||
journalctl --user -u rpa-streaming --since '2026-05-25 08:50:00' --no-pager |
|
||||
rg "e96e5822|runtime_dialog|Confirmer|REPORT|VERIFY|dispatch_orphan|termine"
|
||||
```
|
||||
|
||||
Tests unitaires executor :
|
||||
|
||||
```bash
|
||||
.venv/bin/python -m pytest -q tests/unit/test_executor_verify_window_guard.py
|
||||
```
|
||||
|
||||
## Resume court pour reprise
|
||||
|
||||
Le live Bloc-notes a reussi. Le dialogue `Confirmer l'enregistrement` est absorbe sans humain, ce qui valide la correction fenetre active/dialogue connu. Les deux vrais chantiers suivants sont maintenant la fiabilite du dispatch et la vitesse. Le modele cognitif reste : objectif explicite, scene attendue, precondition, action, retour. Ne pas repartir dans une rustine de clic ; transformer le succes en test, puis stabiliser la chaine.
|
||||
@@ -0,0 +1,262 @@
|
||||
# Handoff Codex — Demo Aiva-urgence v2 / repetition humaine
|
||||
|
||||
- `Auteur`: Codex
|
||||
- `Date`: 2026-05-26, fin de journee
|
||||
- `Reprise visee`: 2026-05-27
|
||||
- `Contexte`: preparation demo client Aiva-vision / Aiva-urgence, repetition avec Dom comme humain challenge
|
||||
|
||||
## 1. Decision produit du jour
|
||||
|
||||
Produit clarifie :
|
||||
|
||||
- `Aiva-vision` est le socle universel qui apprend les interfaces.
|
||||
- `Léa` est le collaborateur agent qui observe, lit, agit, demande et apprend.
|
||||
- `Aiva-urgence` est le plugin metier de la demo sante.
|
||||
|
||||
Principe Dom acte :
|
||||
|
||||
- qualite d'abord ;
|
||||
- le client sait que nous sommes en POC ;
|
||||
- en contexte hospitalier, un arret propre vaut mieux qu'une action fausse ;
|
||||
- Léa doit savoir dire "je ne sais pas" ou "montrez-moi".
|
||||
|
||||
## 2. Scenario demo retenu
|
||||
|
||||
Scenario cible :
|
||||
|
||||
1. Léa lit la liste des passages aux urgences.
|
||||
2. Elle decrit le tableau sans enumerer fragilement tous les IPP.
|
||||
3. Elle propose : traiter tous les dossiers ou un dossier precis.
|
||||
4. Dom choisit `MOREL Catherine / IPP 25003284`.
|
||||
5. Léa ouvre le dossier et verifie le bandeau : `25003284`, `MOREL`, `Catherine`.
|
||||
6. Léa collecte les 5 onglets :
|
||||
- `Motif d'admission`
|
||||
- `Examens cliniques`
|
||||
- `Imagerie`
|
||||
- `Notes medicales`
|
||||
- `Synthese Urgences`
|
||||
7. `Synthese Urgences` reste dans le perimetre live : lecture haut + bas, avec validation par marqueurs.
|
||||
8. Léa demande ou consigner les informations.
|
||||
9. Sortie prioritaire : tableur OnlyOffice visible.
|
||||
10. Validation finale humaine obligatoire.
|
||||
|
||||
## 3. Scroll : arbitrage corrige
|
||||
|
||||
Dom a rappele que VWB n'avait pas eu de probleme de scroll.
|
||||
|
||||
Verification code :
|
||||
|
||||
- VWB et replay utilisent le contrat `extract_text_scroll` :
|
||||
- OCR haut ;
|
||||
- `ctrl+end` ;
|
||||
- wait ;
|
||||
- OCR bas ;
|
||||
- concat ;
|
||||
- retour `ctrl+home`.
|
||||
|
||||
Correction d'arbitrage :
|
||||
|
||||
- ne plus retirer `Synthese Urgences` par prudence abstraite ;
|
||||
- cible live = 5 onglets ;
|
||||
- degrade 4 onglets uniquement si echec concret non recupere.
|
||||
|
||||
Marqueurs obligatoires bas synthese :
|
||||
|
||||
- `CCMU`
|
||||
- `GEMSA`
|
||||
- `J12.1`
|
||||
- `Consultation externe`
|
||||
|
||||
Principe qualite :
|
||||
|
||||
> Scroll reussi = geste envoye + changement visuel constate + donnees attendues relues.
|
||||
|
||||
Docs :
|
||||
|
||||
- `docs/coordination/active/2026-05-26_arbitrage-scroll-vwb-reference.md`
|
||||
- `docs/coordination/active/2026-05-26_principe-apprentissage-scroll-securise.md`
|
||||
|
||||
## 4. Repetition humaine du 2026-05-27
|
||||
|
||||
Dom sera "l'humain challenge".
|
||||
|
||||
Il peut :
|
||||
|
||||
- interrompre ;
|
||||
- refuser une lecture ;
|
||||
- demander une preuve ;
|
||||
- demander une reprise depuis un onglet ;
|
||||
- demander OnlyOffice ;
|
||||
- verifier que Léa ne conclut pas sans validation.
|
||||
|
||||
Regle orale Claude a retenir :
|
||||
|
||||
> Une reponse Léa doit toujours contenir une preuve, une question ou un arret. Jamais une affirmation seule.
|
||||
|
||||
Docs a relire avant repetition :
|
||||
|
||||
- `docs/coordination/active/2026-05-26_runbook-repetition-humain-challenge-demo-v2.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-26_2230_claude-to-codex_SCRIPT-oral-lea-humain-challenge.md`
|
||||
- `docs/coordination/active/2026-05-26_etat-preparation-repetition-2026-05-27.md`
|
||||
|
||||
## 5. OCR IPP/chiffres
|
||||
|
||||
Benchmark local :
|
||||
|
||||
- Tesseract lit les 11 IPP exacts sur `landing_wide.png`.
|
||||
- EasyOCR reste bon pour le texte continu, mais moins fiable sur les IPP secondaires.
|
||||
- Preprocessing OpenCV global rejete : regressions marqueurs et latence.
|
||||
- docTR utile pour structure/bboxes, pas meilleur que Tesseract pour les chiffres.
|
||||
|
||||
Patch implemente :
|
||||
|
||||
- `core/llm/ocr_extractor.py`
|
||||
- ajout `extract_digits_tesseract_from_image(...)` ;
|
||||
- ajout `engine` sur `extract_table_from_image(...)`.
|
||||
- `core/llm/__init__.py`
|
||||
- export de la nouvelle fonction.
|
||||
- `agent_v0/server_v1/replay_engine.py`
|
||||
- `extract_table` transmet maintenant `engine` ;
|
||||
- le normaliseur accepte `variable_name` pour `extract_table`.
|
||||
- `tests/unit/test_ocr_extractor_tesseract.py`
|
||||
- tests unitaires nouveaux.
|
||||
- `tests/integration/test_t2a_extract.py`
|
||||
- test integration `variable_name` + `engine="tesseract"`.
|
||||
|
||||
Workflow raccorde :
|
||||
|
||||
- BDD : `visual_workflow_builder/backend/instance/workflows.db`
|
||||
- Workflow : `Demo_urgence_3_db`
|
||||
- ID : `wf_483910cdd851_1778750587`
|
||||
- Step : `step_79c40f5a8342_1778750587`
|
||||
- Modification : `parameters.engine = "tesseract"` sur `extract_table`.
|
||||
|
||||
Backup BDD :
|
||||
|
||||
- `visual_workflow_builder/backend/instance/workflows.db.backup_2026-05-26_ocr_tesseract_demo3`
|
||||
|
||||
Doc :
|
||||
|
||||
- `docs/coordination/active/2026-05-26_patch-ocr-tesseract-ipp.md`
|
||||
|
||||
## 6. Verifications passees
|
||||
|
||||
Tests :
|
||||
|
||||
```bash
|
||||
pytest -q tests/unit/test_ocr_extractor_tesseract.py tests/integration/test_t2a_extract.py
|
||||
```
|
||||
|
||||
Resultat :
|
||||
|
||||
- OK
|
||||
- 40 tests passes
|
||||
|
||||
Compile :
|
||||
|
||||
```bash
|
||||
python3 -m compileall -q core/llm/ocr_extractor.py core/llm/__init__.py agent_v0/server_v1/replay_engine.py tests/unit/test_ocr_extractor_tesseract.py tests/integration/test_t2a_extract.py
|
||||
```
|
||||
|
||||
Resultat : OK.
|
||||
|
||||
Verification capture :
|
||||
|
||||
```bash
|
||||
python3 -c "from core.llm.ocr_extractor import extract_digits_tesseract_from_image; print(extract_digits_tesseract_from_image('output/playwright/easily_dryrun_2026-05-26/landing_wide.png', pattern=r'^25\\d{6}$'))"
|
||||
```
|
||||
|
||||
Resultat : 11/11 IPP exacts.
|
||||
|
||||
Etat services au dernier check :
|
||||
|
||||
- `http://127.0.0.1:8765/` accessible.
|
||||
- `http://127.0.0.1:5005/health` OK.
|
||||
- `http://127.0.0.1:5004/api/status` OK.
|
||||
- OnlyOffice : `/snap/bin/onlyoffice-desktopeditors`.
|
||||
- Tesseract : `/usr/bin/tesseract`, langues `eng`, `fra`, `osd`.
|
||||
|
||||
## 7. Coordination
|
||||
|
||||
Qwen :
|
||||
|
||||
- a valide le principe scroll securise ;
|
||||
- a valide l'architecture OCR multi-moteur par zone ;
|
||||
- a recu les infos de patch et raccord workflow.
|
||||
|
||||
Claude :
|
||||
|
||||
- a retracte la recommandation 4 onglets ;
|
||||
- cible 5 onglets confirmee ;
|
||||
- a livre le script oral "humain challenge".
|
||||
|
||||
Derniers messages lus :
|
||||
|
||||
- `docs/coordination/inbox_codex/2026-05-26_2149_qwen-to-codex_ACK-apprentissage-scroll-securise.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-26_2215_claude-to-codex_ACK-scroll-vwb-reformulation-discours.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-26_2230_claude-to-codex_SCRIPT-oral-lea-humain-challenge.md`
|
||||
|
||||
## 8. Points d'attention demain
|
||||
|
||||
1. Commencer par lire les nouveaux retours dans `docs/coordination/inbox_codex/`.
|
||||
2. Verifier les services avant repetition :
|
||||
- maquette `8765` ;
|
||||
- streaming `5005` ;
|
||||
- agent chat `5004` ;
|
||||
- OnlyOffice ;
|
||||
- Tesseract.
|
||||
3. Rejouer le scenario avec Dom comme challengeur, pas comme assistant de demo.
|
||||
4. Logger les moments ou Léa :
|
||||
- cite une preuve ;
|
||||
- demande confirmation ;
|
||||
- s'arrete ;
|
||||
- reprend apres correction.
|
||||
5. Verifier que `Synthese Urgences` est tentee en 5e onglet.
|
||||
6. Si scroll incomplet :
|
||||
- ne pas exploiter l'onglet ;
|
||||
- annoncer la limite ;
|
||||
- demander confirmation humaine.
|
||||
7. Si divergence OCR sur IPP :
|
||||
- ne pas trancher ;
|
||||
- demander confirmation.
|
||||
8. OnlyOffice doit etre visible avant validation finale.
|
||||
|
||||
## 9. Worktree
|
||||
|
||||
Le worktree est deja tres modifie par plusieurs chantiers/collaborateurs.
|
||||
|
||||
Ne pas revert les changements non lies.
|
||||
|
||||
Changements Codex de cette fin de journee a surveiller :
|
||||
|
||||
- `core/llm/ocr_extractor.py`
|
||||
- `core/llm/__init__.py`
|
||||
- `agent_v0/server_v1/replay_engine.py`
|
||||
- `tests/unit/test_ocr_extractor_tesseract.py`
|
||||
- `tests/integration/test_t2a_extract.py`
|
||||
- `visual_workflow_builder/backend/instance/workflows.db`
|
||||
- `visual_workflow_builder/backend/instance/workflows.db.backup_2026-05-26_ocr_tesseract_demo3`
|
||||
- docs sous `docs/coordination/active/` et inbox Claude/Qwen crees le 2026-05-26 soir.
|
||||
|
||||
Attention : `agent_v0/server_v1/replay_engine.py` contenait deja d'autres modifications hors patch OCR dans le diff global. Ne pas les attribuer automatiquement au patch OCR.
|
||||
|
||||
## 10. Premiere action conseillee demain
|
||||
|
||||
Lire :
|
||||
|
||||
```bash
|
||||
find docs/coordination/inbox_codex -maxdepth 1 -type f -printf '%TY-%Tm-%Td %TH:%TM %f\n' | sort | tail -20
|
||||
```
|
||||
|
||||
Puis lancer un smoke :
|
||||
|
||||
```bash
|
||||
curl -fsS http://127.0.0.1:8765/ >/tmp/aiva_easily_health.html
|
||||
curl -fsS http://127.0.0.1:5005/health
|
||||
curl -fsS http://127.0.0.1:5004/api/status
|
||||
pytest -q tests/unit/test_ocr_extractor_tesseract.py tests/integration/test_t2a_extract.py
|
||||
```
|
||||
|
||||
Ensuite repetition humaine avec Dom.
|
||||
|
||||
Auteur : Codex
|
||||
@@ -0,0 +1,141 @@
|
||||
# Handoff Codex - Reprise micro-apprentissage Lea P0
|
||||
|
||||
Date: 2026-05-27 21:35
|
||||
Reprise prevue: 2026-05-28 matin
|
||||
Pilote: Codex
|
||||
Participants: Dom, Qwen, Claude
|
||||
|
||||
## Etat de fin de soiree
|
||||
|
||||
La demo metier / VWB n'est plus l'axe principal immediat. Le travail est recentre sur le coeur d'apprentissage de Lea.
|
||||
|
||||
Decision centrale:
|
||||
|
||||
- Unite de travail: **competence courte verifiee**.
|
||||
- Cette competence est une couche de classification / promotion au-dessus de la chaine existante Graph / FAISS / Shadow / Replay / Memoire.
|
||||
- On ne cree pas une nouvelle chaine d'apprentissage.
|
||||
|
||||
Chaine existante a reutiliser:
|
||||
|
||||
- `core/pipeline/workflow_pipeline.py`
|
||||
- `core/graph/graph_builder.py`
|
||||
- `core/graph/node_matcher.py`
|
||||
- `core/embedding/faiss_manager.py`
|
||||
- `core/embedding/state_embedding_builder.py`
|
||||
- `core/workflow/shadow_observer.py`
|
||||
- `core/workflow/shadow_validator.py`
|
||||
- `core/learning/target_memory_store.py`
|
||||
- `agent_v0/server_v1/replay_memory.py`
|
||||
- `agent_v0/server_v1/replay_learner.py`
|
||||
- `agent_v0/server_v1/replay_verifier.py`
|
||||
- `tools/session_cleaner.py`
|
||||
- `agent_chat/gesture_catalog.py`
|
||||
- `core/knowledge/ui_patterns.py`
|
||||
|
||||
## Fait aujourd'hui
|
||||
|
||||
- Capture clavier systeme corrigee pour `Win+S` / `key_combo`.
|
||||
- Consolidation preserve maintenant `key_combo`.
|
||||
- Session cleaner corrige: plus d'affichage `<built-in method keys...>`.
|
||||
- Health technique OK: RAM/VRAM/swap/Ollama acceptables; seul risque residuel = VLM cold start.
|
||||
- Dashboard Base de connaissances identifie comme point d'inventaire:
|
||||
- 13 666 vecteurs FAISS,
|
||||
- 63 sessions,
|
||||
- 29 workflows,
|
||||
- 28 reflexes natifs,
|
||||
- 3 machines.
|
||||
- Qwen et Claude ont ete remis dans la boucle via leurs inbox fichiers.
|
||||
|
||||
## Retours agents lus
|
||||
|
||||
Claude:
|
||||
|
||||
- `docs/coordination/inbox_codex/2026-05-27_1959_claude-to-codex_CONTRAT-competence-courte-verifiee-P0.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-27_2040_claude-to-codex_PLAN-P1-contrat-p0-message-warning.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-27_2123_claude-to-codex_ACK-correction-session-wins-existe.md`
|
||||
|
||||
Qwen:
|
||||
|
||||
- `docs/coordination/inbox_codex/2026-05-27_2010_qwen-to-codex_AVIS-corrige-reuse-lea-core-complete.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-27_2044_qwen-to-codex_INVENTAIRE-offline-competences-existantes.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-27_2055_qwen-to-codex_INVENTAIRE-offline-competences-existantes.md`
|
||||
|
||||
Correction importante:
|
||||
|
||||
- Le retour Qwen 20:55 disait que `sess_20260527T185155_98ad9a` n'existait pas.
|
||||
- Verification Codex: elle existe bien.
|
||||
- Corrections envoyees:
|
||||
- `docs/coordination/inbox_qwen/2026-05-27_2122_codex-to-qwen_CORRECTION-session-wins-existe.md`
|
||||
- `docs/coordination/inbox_claude/2026-05-27_2122_codex-to-claude_CORRECTION-session-wins-existe.md`
|
||||
|
||||
## Session P0 confirmee
|
||||
|
||||
Ne pas recapturer Win+S pour P0.
|
||||
|
||||
Chemins confirmes:
|
||||
|
||||
- `data/training/live_sessions/streaming_sessions/sess_20260527T185155_98ad9a.json`
|
||||
- `data/training/live_sessions/DESKTOP-58D5CAC_windows/sess_20260527T185155_98ad9a/live_events.jsonl`
|
||||
- `data/training/live_sessions/DESKTOP-58D5CAC_windows/sess_20260527T185155_98ad9a/shots/`
|
||||
|
||||
Objectif P0:
|
||||
|
||||
- extraire le segment propre: etat initial -> `Win+S` -> `Rechercher/SearchHost.exe`,
|
||||
- couper les evenements apres postcondition,
|
||||
- ignorer les clics systray/pythonw,
|
||||
- creer `data/competences/observed/open_windows_search.yaml`,
|
||||
- verifier sans promouvoir `stable`.
|
||||
|
||||
## Objectifs demain matin
|
||||
|
||||
1. Figer le segment propre P0.
|
||||
2. Creer le premier YAML `open_windows_search.yaml` en `observed` ou `candidate`.
|
||||
3. Ajouter un validateur leger du schema competence, sans runtime lourd.
|
||||
4. Brancher `message_contract.py` en mode warning sur le premier chemin de pause.
|
||||
5. Lancer les tests de non-regression:
|
||||
- capture clavier / key_combo,
|
||||
- session cleaner,
|
||||
- message contract,
|
||||
- validateur YAML si ajoute.
|
||||
6. Rejouer supervise seulement si Dom donne GO runtime.
|
||||
|
||||
## Regles a ne pas casser
|
||||
|
||||
- Pas de coordonnees comme savoir durable.
|
||||
- Pas de nouvelle chaine parallele.
|
||||
- Pas de promotion stable depuis dashboard / FAISS seul.
|
||||
- Pas d'inference methode depuis postcondition seule.
|
||||
- `SearchHost.exe` prouve l'etat, pas la methode.
|
||||
- Messages Lea visibles: toujours dire intention, attendu, vu, demande.
|
||||
- VLM en fallback seulement si fenetre/process/OCR simple ne suffisent pas.
|
||||
|
||||
## Repartition demain
|
||||
|
||||
Codex:
|
||||
|
||||
- implementation minimale,
|
||||
- tests,
|
||||
- verification disque/runtime,
|
||||
- integration des retours Qwen/Claude.
|
||||
|
||||
Qwen:
|
||||
|
||||
- finaliser l'inventaire offline exploitable,
|
||||
- corriger son inventaire avec la session P0 confirmee,
|
||||
- identifier les prochains candidats sans nouvelle capture.
|
||||
|
||||
Claude:
|
||||
|
||||
- verrouiller le contrat YAML minimal,
|
||||
- guider l'integration `message_contract.py` en warning,
|
||||
- verifier les invariants de promotion.
|
||||
|
||||
## Premiere action recommande demain
|
||||
|
||||
Commencer par une lecture rapide de ce handoff, puis ouvrir:
|
||||
|
||||
- `docs/coordination/inbox_codex/2026-05-27_2040_claude-to-codex_PLAN-P1-contrat-p0-message-warning.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-27_2044_qwen-to-codex_INVENTAIRE-offline-competences-existantes.md`
|
||||
- `data/training/live_sessions/streaming_sessions/sess_20260527T185155_98ad9a.json`
|
||||
|
||||
Ensuite seulement: patch minimal.
|
||||
468
docs/handoffs/2026-06-01_handoff_codex_fin-soir-poc-bi-turbo.md
Normal file
468
docs/handoffs/2026-06-01_handoff_codex_fin-soir-poc-bi-turbo.md
Normal file
@@ -0,0 +1,468 @@
|
||||
# Handoff Codex - fin de soiree 2026-06-01 - reprise POC bi-turbo
|
||||
|
||||
Date: 2026-06-01 soir, Europe/Paris.
|
||||
Auteur: Codex.
|
||||
Statut: handoff de reprise. Aucun commit.
|
||||
|
||||
Ce handoff complete et remplace pour la reprise le handoff plus ancien :
|
||||
`docs/handoffs/2026-06-01_handoff_codex_p0-p1-lea-session-propre.md`.
|
||||
|
||||
## Message court pour la prochaine session
|
||||
|
||||
Dom arrete ce soir pour se reposer. Demain, reprise "bi-turbo", mais l'objectif reste court terme :
|
||||
|
||||
- POC presentable/testable rapidement.
|
||||
- Consolider ce qui existe.
|
||||
- Arreter de recoder des briques deja implementees.
|
||||
- Utiliser Claude et Qwen activement.
|
||||
- Codex ne code pas seul.
|
||||
- Qwen reste quality gate anti-doublon.
|
||||
- Claude execute les correctifs courts.
|
||||
- Codex orchestre et valide.
|
||||
|
||||
## Decisions Dom a ne pas perdre
|
||||
|
||||
1. Ne pas repartir sur VWB comme produit.
|
||||
2. POC court terme d'abord : capture humaine fiable, replay precis, apprentissage consolide, test humain.
|
||||
3. L'audit global ne doit pas devenir une phase longue. Il sert a aller plus vite.
|
||||
4. Regle anti-reimplementation globale projet, pas seulement apprentissage :
|
||||
- chercher l'existant,
|
||||
- raccorder/consolider si possible,
|
||||
- remplacer seulement si l'existant est clairement insuffisant.
|
||||
5. Apprentissage Lea :
|
||||
- pas de validation exhaustive de longues sessions,
|
||||
- auto-evaluation par repetition,
|
||||
- convergence sur repetitions,
|
||||
- questions uniquement en mode copilote / prise de main / apprentissage supervise,
|
||||
- aucune question pendant observation passive.
|
||||
6. Les humains sont imparfaits :
|
||||
- hesitations,
|
||||
- erreurs de clic,
|
||||
- retours arriere,
|
||||
- corrections,
|
||||
- pauses,
|
||||
- bruit ecran.
|
||||
Lea doit distinguer action utile, parasite, correction, hesitation.
|
||||
7. Confidentialite DPI :
|
||||
- donnees DPI exploitables localement sur DGX / hopital car necessaires pour trancher,
|
||||
- aucune information ne sort du milieu hospitalier,
|
||||
- artefacts portables sans memoire patient, captures DPI brutes, identifiants patients,
|
||||
- attention au risque de memorisation par modele/adapters/embeddings si export naif.
|
||||
8. Portabilite importante :
|
||||
- exporter/importer les reflexes, competences, schemas, detecteurs, mappings, plans d'action, metriques,
|
||||
- reduire duree d'apprentissage sur nouvelles machines,
|
||||
- ne pas exporter la memoire patient.
|
||||
9. Ne pas laisser de "a surveiller plus tard" flou :
|
||||
- si un risque peut couter 10x plus tard, mettre maintenant un garde-fou minimal,
|
||||
- acceptable POC seulement si le risque est contenu et documente.
|
||||
|
||||
## Etat coordination au moment du handoff
|
||||
|
||||
Derniers messages importants a lire dans cet ordre demain :
|
||||
|
||||
1. `docs/coordination/inbox_codex/2026-06-01_qwen-to-codex-claude_LEVEE-GO-P1-SEMANTIQUE.md`
|
||||
- Qwen confirme GO P1-SEMANTIQUE, conditionnel leve.
|
||||
2. `docs/coordination/inbox_codex/2026-06-01_2240_claude-to-codex_LEVEE-GO-conditionnel-Qwen-P1-SEMANTIQUE.md`
|
||||
- Claude livre executor + timeout OmniParser + tests.
|
||||
3. `docs/coordination/inbox_codex/2026-06-01_qwen-to-codex_REVUE-GLOBALE-ANTI-DOUBLON-REBRANCHEMENT.md`
|
||||
- Qwen confirme R6 worker queue, FAISS, graph, learning orphelins, plan P0/P1/P2.
|
||||
4. `docs/coordination/inbox_codex/2026-06-01_2200_claude-to-codex_ACK-5-decisions-Dom-+-audit-chaine-apprentissage-debranchee.md`
|
||||
- Claude confirme chaine apprentissage partiellement debranchee.
|
||||
5. `docs/POC/AUDIT_CHAINE_APPRENTISSAGE_2026-06-01.md`
|
||||
- Audit detaille de la chaine apprentissage.
|
||||
6. `docs/coordination/inbox_claude/2026-06-01_2222_codex-to-claude_GO-EXECUTION-POC-court-terme-R6-semantique-learning.md`
|
||||
- GO Claude sur P0/P1 court terme.
|
||||
7. `docs/coordination/inbox_qwen/2026-06-01_2222_codex-to-qwen_ACK-verdict-global-et-role-quality-gate.md`
|
||||
- Qwen confirme comme quality gate attendu.
|
||||
|
||||
Important : apres le dernier recadrage Dom sur "a surveiller plus tard", Qwen a confirme que P1-SEMANTIQUE contient maintenant les 5 garde-fous demandes.
|
||||
|
||||
## Statut par lot
|
||||
|
||||
### P0 revocation / agent registry
|
||||
|
||||
Statut: probablement OK POC, non commite.
|
||||
|
||||
Travail applique dans le worktree :
|
||||
|
||||
- `agent_v0/server_v1/agent_registry.py`
|
||||
- `agent_v0/server_v1/api_stream.py`
|
||||
- tests P0 autour revocation/replay/enroll.
|
||||
|
||||
Qwen a livre et confirme :
|
||||
|
||||
- `/register`, `/stream/event`, `/replay/next`, `/replay/result`, `/finalize`, `/replay-session` gardes/testes.
|
||||
- Strict default/unknown quand registry non vide.
|
||||
|
||||
Tests annonces/constates plus tot :
|
||||
|
||||
- `30 passed, 1 xfailed`, puis Qwen a annonce `32 passed, 1 xfailed`.
|
||||
|
||||
Attention :
|
||||
|
||||
- `api_stream.py` avait deja un tres gros diff avant Codex/Qwen/Claude.
|
||||
- Toute modification dans ce fichier doit etre chirurgicale.
|
||||
|
||||
### P1-PERSIST
|
||||
|
||||
Statut: GO conditionnel POC, pas prod.
|
||||
|
||||
Claude a livre :
|
||||
|
||||
- `core/competences/persist.py`
|
||||
- endpoint `/api/v1/lea/competences/candidate/persist` en fin de `api_stream.py`
|
||||
- tests unit/integration/security.
|
||||
|
||||
Qwen a classe :
|
||||
|
||||
- acceptable POC,
|
||||
- prod a durcir.
|
||||
|
||||
Risques/restes :
|
||||
|
||||
- couplage token <-> machine_id pas implemente,
|
||||
- rate limiter in-memory,
|
||||
- idempotence 201 vs 200,
|
||||
- audit failure rollback YAML recommande.
|
||||
|
||||
### P1-LEA-SHADOW
|
||||
|
||||
Statut: GO Qwen.
|
||||
|
||||
Claude a livre :
|
||||
|
||||
- `agent_chat/handlers/learn_action.py`
|
||||
- `agent_chat/handlers/__init__.py`
|
||||
- `agent_chat/state/`
|
||||
- modifications `agent_chat/app.py`
|
||||
- route `POST /api/learn/start`
|
||||
- rebranchement bouton Windows vers `/api/learn/start`
|
||||
- `agent_v0/agent_v1/network/lea_orchestrator_client.py`
|
||||
- modifications UI `chat_window.py`, `smart_tray.py`.
|
||||
|
||||
Qwen avait mis NO-GO puis a leve :
|
||||
|
||||
- `machine_id` ajoute dans `SessionState` et payload persist,
|
||||
- `datetime.now(timezone.utc)`,
|
||||
- guard anti-CONFIRM sans nom,
|
||||
- route `/api/learn/start`.
|
||||
|
||||
Point important Dom :
|
||||
|
||||
- questions seulement en prise de main / supervision,
|
||||
- pas pendant observation passive.
|
||||
|
||||
### P1-SEMANTIQUE
|
||||
|
||||
Statut: GO Qwen confirme, conditionnel leve.
|
||||
|
||||
Claude a livre puis corrige :
|
||||
|
||||
- `core/semantic/phase25_analyzer.py`
|
||||
- `core/semantic/__init__.py`
|
||||
- endpoint `/api/v1/lea/screen/analyze` dans `api_stream.py`
|
||||
- tests `tests/unit/test_phase25_semantic.py`
|
||||
- tests `tests/integration/test_phase25_semantic_integration.py`
|
||||
|
||||
Qwen a d'abord mis GO conditionnel :
|
||||
|
||||
- `analyze_frames` synchrone dans endpoint async,
|
||||
- timeout OmniParser declare mais pas applique.
|
||||
|
||||
Claude a corrige :
|
||||
|
||||
- `run_in_executor` dans endpoint,
|
||||
- timeout effectif OmniParser via `ThreadPoolExecutor(max_workers=2)`,
|
||||
- fallback docTR,
|
||||
- logs `logs/omniparser_errors.log`,
|
||||
- tests annonces `35 passed / 0 failed`.
|
||||
|
||||
Qwen a confirme les garde-fous Dom :
|
||||
|
||||
- concurrence bornee,
|
||||
- comportement si pool sature,
|
||||
- fallback degrade,
|
||||
- log explicite,
|
||||
- tests/preuves.
|
||||
|
||||
Risque residuel accepte POC :
|
||||
|
||||
- un thread timeoutte ne peut pas etre tue en Python,
|
||||
- contenu par pool borne + timeout + fallback + logs.
|
||||
|
||||
Codex n'a pas encore rerun localement les tests apres le dernier patch Claude. A faire demain si besoin :
|
||||
|
||||
```bash
|
||||
.venv/bin/python -m py_compile core/semantic/phase25_analyzer.py agent_v0/server_v1/api_stream.py
|
||||
.venv/bin/python -m pytest tests/unit/test_phase25_semantic.py tests/integration/test_phase25_semantic_integration.py -q
|
||||
```
|
||||
|
||||
Note : les tests timeout peuvent durer environ 30s.
|
||||
|
||||
### R6 worker queue / enrichissement profond
|
||||
|
||||
Statut: P0 court terme, bloqueur POC si non resolu.
|
||||
|
||||
Qwen confirme :
|
||||
|
||||
- `data/training/_worker_queue.txt` existe, 0 octets, cree le 29 mai.
|
||||
- Worker actif mais tourne a vide.
|
||||
- Dernier traitement worker il y a plusieurs jours.
|
||||
- Artefacts enriched/FAISS/graph stales.
|
||||
- Sessions live recentes presentes :
|
||||
- `sess_20260529T144652_5a2e96`
|
||||
- `sess_20260529T154427_f95956`
|
||||
|
||||
Codex a confirme que ces dossiers existent :
|
||||
|
||||
- `data/training/live_sessions/DESKTOP-58D5CAC_windows/sess_20260529T144652_5a2e96`
|
||||
- `data/training/live_sessions/DESKTOP-58D5CAC_windows/sess_20260529T154427_f95956`
|
||||
- `data/training/_worker_queue.txt` = 0 octets.
|
||||
|
||||
Cause probable Qwen :
|
||||
|
||||
- `_enqueue_to_worker()` echoue silencieusement ou n'ecrit pas vraiment,
|
||||
- logs serveur non accessibles,
|
||||
- queue creee mais write absent.
|
||||
|
||||
GO donne a Claude a 22:22 :
|
||||
|
||||
1. Ajouter log critique avec `exc_info=True` dans `_enqueue_to_worker`.
|
||||
2. Re-enqueue les deux sessions du 29 mai si elles existent.
|
||||
3. Prouver queue -> worker -> artefacts ou logs exploitables.
|
||||
|
||||
Pas encore de livraison Claude R6 au moment du handoff.
|
||||
|
||||
Demain, premiere action :
|
||||
|
||||
- lire nouveaux messages Claude/Qwen,
|
||||
- si pas de livraison R6, relancer Claude sur R6,
|
||||
- ne pas partir sur autre chantier avant d'avoir statue R6.
|
||||
|
||||
### Existing learning modules
|
||||
|
||||
Statut: a rebrancher apres R6, pas a recoder.
|
||||
|
||||
Modules existants cites par Claude/Qwen :
|
||||
|
||||
- `core/learning/continuous_learner.py`
|
||||
- `core/learning/feedback_processor.py`
|
||||
- `core/learning/target_memory_store.py`
|
||||
- `core/learning/versioned_store.py`
|
||||
- `core/learning/learning_manager.py`
|
||||
- `core/training/training_data_collector.py`
|
||||
- `core/training/offline_trainer.py`
|
||||
- `core/training/model_validator.py`
|
||||
- `core/training/session_analyzer.py`
|
||||
- `core/healing/learning_repository.py`
|
||||
|
||||
Verdict Qwen :
|
||||
|
||||
- `ContinuousLearner`: existant a rebrancher, couvre auto-evaluation par repetition.
|
||||
- `FeedbackProcessor`: existant a rebrancher, couvre fusion/regroupement feedback.
|
||||
- `target_memory_store` / `versioned_store`: existants a rebrancher.
|
||||
- certains modules comme `learning_manager` / `quality_validator` sont deja branches ailleurs.
|
||||
|
||||
Ordre conseille apres R6 :
|
||||
|
||||
1. verifier signatures reelles,
|
||||
2. hook minimal apres session enrichie,
|
||||
3. hook feedback shadow -> FeedbackProcessor,
|
||||
4. seulement ensuite enrichir payloads `confidence`, `uncertainties[]`, `repetition_count`, statuts `hypothesis/candidate/validated`.
|
||||
|
||||
### FAISS
|
||||
|
||||
Statut: actif partiellement, a consolider court terme uniquement si impact POC clair.
|
||||
|
||||
Qwen :
|
||||
|
||||
- FAISS actif localement dans plusieurs branches runtime.
|
||||
- FAISS alimente par `reindex()`, `add_embedding()`, import pack.
|
||||
- GlobalFAISS jamais consulte.
|
||||
- save/load existent mais jamais appeles : index perdus au redemarrage.
|
||||
- `replay_memory.py` n'utilise pas FAISS.
|
||||
|
||||
Decision court terme :
|
||||
|
||||
- FAISS persistence minimale = P1 demain si faible risque.
|
||||
- GlobalFAISS consultation = P2 apres tests humains.
|
||||
- Ne pas refondre FAISS maintenant.
|
||||
|
||||
Composants a garder en tete :
|
||||
|
||||
- `core/embedding/faiss_manager.py`
|
||||
- `core/federation/faiss_global.py`
|
||||
- `core/embedding/clip_embedder.py`
|
||||
- `core/embedding/state_embedding_builder.py`
|
||||
- `core/visual/visual_embedding_manager.py`
|
||||
- `agent_v0/server_v1/replay_memory.py`
|
||||
- tests `tests/unit/test_faiss_*`, `tests/unit/test_learning_pack.py`.
|
||||
|
||||
### Graph
|
||||
|
||||
Statut: actif, mais a reconnecter mieux avec Phase25 plus tard.
|
||||
|
||||
Qwen :
|
||||
|
||||
- graphe produit apres sessions via `finalize_session()` -> `GraphBuilder` -> `workflows/*.json`.
|
||||
- utilise par WorkflowRunner, NodeMatcher, ExecutionLoop.
|
||||
- compat apprentissage par repetition via DBSCAN / LearningState.
|
||||
- NO-GO partiel sur distinction semantique action / hesitation / correction.
|
||||
- P1-SEMANTIQUE ne doit pas devenir un format parallele long terme : a reconnecter au graphe.
|
||||
|
||||
Decision court terme :
|
||||
|
||||
- pas de refonte graphe maintenant.
|
||||
- R6 d'abord pour que sessions repassent par enrichissement.
|
||||
- Phase25 -> graphe = P1/P2 apres R6 si faible risque.
|
||||
|
||||
## Worktree / hygiene
|
||||
|
||||
Le worktree est tres sale. Ne pas revert ce que l'on n'a pas fait.
|
||||
|
||||
Commande observee :
|
||||
|
||||
```bash
|
||||
git status --short
|
||||
```
|
||||
|
||||
Points a retenir :
|
||||
|
||||
- `docs/POC/PREREQUIS_DSI_DGX_SPARK_2026-06-01.docx` est modifie par Dom : ne pas toucher.
|
||||
- `api_stream.py` a un tres gros diff avec zones Qwen + Claude + modifications anterieures.
|
||||
- Beaucoup de fichiers modifies/untracked predatent la session.
|
||||
- Pas de commit sans GO explicite Dom.
|
||||
- Si commit demain, probablement split logique :
|
||||
1. P0 revocation Qwen,
|
||||
2. P1 persist Claude,
|
||||
3. P1 shadow + learn/start + bouton Windows,
|
||||
4. P1 semantic,
|
||||
5. R6 worker queue,
|
||||
mais seulement apres revue et validation.
|
||||
|
||||
## Commandes utiles demain
|
||||
|
||||
Lire les derniers messages :
|
||||
|
||||
```bash
|
||||
find docs/coordination/inbox_codex -maxdepth 1 -type f -newermt '2026-06-01 22:20:00' -printf '%T@ %TY-%Tm-%Td %TH:%TM %p\n' | sort -nr | head -80
|
||||
find docs/coordination/inbox_codex -maxdepth 1 -type f -iname '*claude*' -printf '%T@ %TY-%Tm-%Td %TH:%TM %p\n' | sort -nr | head -30
|
||||
find docs/coordination/inbox_codex -maxdepth 1 -type f -iname '*qwen*' -printf '%T@ %TY-%Tm-%Td %TH:%TM %p\n' | sort -nr | head -30
|
||||
```
|
||||
|
||||
Verifier R6 fichiers/queue :
|
||||
|
||||
```bash
|
||||
ls -l data/training/_worker_queue.txt
|
||||
find data/training/live_sessions -maxdepth 3 -type d \( -name 'sess_20260529T144652_5a2e96' -o -name 'sess_20260529T154427_f95956' \) -print
|
||||
rg -n "def _enqueue_to_worker|_worker_queue|enqueue" agent_v0/server_v1/api_stream.py agent_v0/server_v1/run_worker.py agent_v0/server_v1/stream_processor.py
|
||||
```
|
||||
|
||||
Verifier P1-SEMANTIQUE localement :
|
||||
|
||||
```bash
|
||||
.venv/bin/python -m py_compile core/semantic/phase25_analyzer.py agent_v0/server_v1/api_stream.py
|
||||
.venv/bin/python -m pytest tests/unit/test_phase25_semantic.py tests/integration/test_phase25_semantic_integration.py -q
|
||||
```
|
||||
|
||||
Tests P0 revocation a rerun si besoin :
|
||||
|
||||
```bash
|
||||
.venv/bin/python -m py_compile agent_v0/server_v1/api_stream.py agent_v0/server_v1/agent_registry.py
|
||||
.venv/bin/python -m pytest tests/unit/test_api_stream_revocation_gaps.py tests/integration/test_replay_single_inflight.py tests/integration/test_agents_enroll_api.py -q
|
||||
```
|
||||
|
||||
## Plan de reprise recommande demain
|
||||
|
||||
### Etape 0 - Lire coordination
|
||||
|
||||
1. Lire ce handoff.
|
||||
2. Lire les derniers `inbox_codex` apres 22:20.
|
||||
3. Si Claude a livre R6, lire sa livraison.
|
||||
4. Si Qwen a donne un nouveau verdict, le prioriser.
|
||||
|
||||
### Etape 1 - Clore P1-SEMANTIQUE
|
||||
|
||||
Statut deja GO Qwen.
|
||||
|
||||
Action Codex :
|
||||
|
||||
- rerun tests cibles si temps,
|
||||
- si tests OK, marquer P1-SEMANTIQUE OK POC.
|
||||
|
||||
Ne pas ajouter de nouveau correctif sauf echec test reel.
|
||||
|
||||
### Etape 2 - R6 worker queue
|
||||
|
||||
Priorite P0.
|
||||
|
||||
Si Claude a livre :
|
||||
|
||||
1. Lire livraison.
|
||||
2. Demander ou lire revue Qwen.
|
||||
3. Verifier localement :
|
||||
- queue ecrite,
|
||||
- worker depile,
|
||||
- artefacts/logs,
|
||||
- pas d'effet de bord.
|
||||
|
||||
Si Claude n'a pas livre :
|
||||
|
||||
- relancer Claude avec le GO 22:22.
|
||||
- garder Qwen en copie/review.
|
||||
|
||||
Definition of done R6 :
|
||||
|
||||
- une session test finalisee passe par worker,
|
||||
- preuve disque ou logs exploitables,
|
||||
- cause exacte documentee,
|
||||
- pas de silencieux.
|
||||
|
||||
### Etape 3 - Rebrancher l'existant learning
|
||||
|
||||
Uniquement apres R6 prouve.
|
||||
|
||||
Ordre :
|
||||
|
||||
1. `ContinuousLearner` hook minimal apres session enrichie.
|
||||
2. `FeedbackProcessor` hook minimal depuis feedback shadow.
|
||||
3. `VersionedStore` / `TargetMemoryStore` si deja requis par les hooks.
|
||||
4. Tests integration courts.
|
||||
|
||||
Ne pas creer nouveau module learning.
|
||||
|
||||
### Etape 4 - FAISS persistence minimale
|
||||
|
||||
Seulement si R6 OK et impact POC clair.
|
||||
|
||||
Objectif :
|
||||
|
||||
- save/load appele au bon moment,
|
||||
- index pas perdu au redemarrage,
|
||||
- tests existants adaptes si necessaire.
|
||||
|
||||
Ne pas traiter GlobalFAISS multi-postes maintenant.
|
||||
|
||||
### Etape 5 - Test humain E2E
|
||||
|
||||
Quand R6 + P1 green :
|
||||
|
||||
- utiliser `docs/demo/test-humain-e2e-poc.md` si present,
|
||||
- verifier capture -> hypotheses -> persist -> replay -> verdict,
|
||||
- ne pas chercher la quasi-prod avant d'avoir un cycle humain reel.
|
||||
|
||||
## Points a ne pas oublier
|
||||
|
||||
- Dom veut aller vite, mais solide.
|
||||
- Dom est inquiet que l'on recode deja fait : toujours chercher l'existant.
|
||||
- Dom veut Claude et Qwen utilises.
|
||||
- Ne pas coder seul sans coordination.
|
||||
- Les YAML sont checkpoints transitoires, pas memoire finale.
|
||||
- Portabilite reste objectif majeur mais ne doit pas bloquer le POC sauf risque DPI.
|
||||
- Donnees DPI utiles localement doivent rester exploitables ; ne pas anonymiser au point de perdre la capacite de trancher.
|
||||
- Artefacts exportables doivent etre nettoyes/pseudonymises/sans memoire patient.
|
||||
- Les tests humains manquent cruellement : ne pas repousser indefiniment.
|
||||
|
||||
## Dernier statut en une ligne
|
||||
|
||||
P1-LEA-SHADOW et P1-SEMANTIQUE sont GO Qwen pour POC ; le prochain vrai P0 est R6 worker queue/enrichissement profond, puis rebrancher ContinuousLearner/FeedbackProcessor existants sans recoder.
|
||||
@@ -0,0 +1,128 @@
|
||||
# Handoff Codex — P0/P1 Léa, session propre
|
||||
|
||||
- `Date`: 2026-06-01 18:15 Europe/Paris
|
||||
- `Contexte`: Dom demande qualité top, pas de régression, travail coordonné avec Claude/Qwen et agents.
|
||||
- `Contrat produit`: Léa apprend par démonstration depuis Léa/agent-chat. Dashboard = admin/supervision/QA/promotion. VWB = outil admin/récupération uniquement.
|
||||
|
||||
## Décisions actives
|
||||
|
||||
| Sujet | Décision |
|
||||
|---|---|
|
||||
| Apprentissage | Départ depuis Léa (`agent-chat`, bouton/tray existant), pas bouton dashboard |
|
||||
| Artefact durable | YAML `candidate/`, pas `stable` sans promotion admin |
|
||||
| Runtime | Shadow existe mais est orphelin ; à raccorder |
|
||||
| Lecture sémantique | Remarques Claude retenues : OmniParser runtime, Phase 2.5, agents externes, OCR qualité |
|
||||
| Démo/POC | Pas de CLI opérateur ; CLI seulement dev/test |
|
||||
| VLM | Pas de mock VLM en démo/POC |
|
||||
|
||||
## Messages lus
|
||||
|
||||
| Auteur | Fichier | Résumé |
|
||||
|---|---|---|
|
||||
| Qwen | `docs/coordination/inbox_codex/2026-06-01_qwen-to-codex_DIAGNOSTIC-P0-SINGLE-INFLIGHT.md` | Root cause P0 confirmé : early return `paused_need_help` renvoyait `status: ok` |
|
||||
| Claude | `docs/coordination/inbox_codex/2026-06-01_1745_claude-to-codex_ADDENDUM-archi-Lea-lecture-semantique-agent-externe.md` | Ajout essentiel : lecture sémantique, OmniParser runtime, `ExternalDecisionClient`, OCR qualité |
|
||||
| Qwen | `docs/coordination/inbox_codex/2026-06-01_qwen-to-codex_SYNTHESE-Q1-Q4-AGENTS-PARALLELES.md` | Shadow orphelin, `persist` absent, révocation non effective, micro-warnings |
|
||||
|
||||
## Dispatchs déposés
|
||||
|
||||
| Destinataire | Fichier |
|
||||
|---|---|
|
||||
| Claude | `docs/coordination/inbox_claude/2026-06-01_1812_codex-to-claude_GO-MAX-AGENTS-P0-P1-lea-quality-no-regression.md` |
|
||||
| Qwen | `docs/coordination/inbox_qwen/2026-06-01_1812_codex-to-qwen_GO-MAX-AGENTS-P0-P1-lea-quality-no-regression.md` |
|
||||
|
||||
## Changements locaux effectués
|
||||
|
||||
### P0 replay single-inflight
|
||||
|
||||
Fichier touché : `agent_v0/server_v1/api_stream.py`
|
||||
|
||||
Changement Codex : dans la branche `paused_need_help` quand la queue est vide avant fin, l'early return renvoie maintenant :
|
||||
|
||||
```python
|
||||
{
|
||||
"status": "recorded",
|
||||
"replay_status": replay_state["status"],
|
||||
"pause_reason": "paused_need_help",
|
||||
}
|
||||
```
|
||||
|
||||
Important : `api_stream.py` avait déjà un énorme diff local avant ce changement. Ne pas revert. Le changement Codex est uniquement ce retour P0.
|
||||
|
||||
### Warnings dashboard Tester
|
||||
|
||||
Fichiers touchés par agent interne `Huygens` :
|
||||
|
||||
- `web_dashboard/templates/knowledge_base.html`
|
||||
- `tests/unit/test_dashboard_routes.py`
|
||||
|
||||
Changements :
|
||||
|
||||
- Confirmation avant lancement d'une compétence qui ressemble à Win+R / Exécuter.
|
||||
- Blocage/alerte du verdict `Valide` si aucune `step_results` ni evidence exploitable.
|
||||
- Test HTML ciblé ajouté.
|
||||
|
||||
## Tests exécutés
|
||||
|
||||
| Commande | Résultat |
|
||||
|---|---|
|
||||
| `.venv/bin/python -m py_compile agent_v0/server_v1/api_stream.py` | OK |
|
||||
| `.venv/bin/python -m pytest tests/integration/test_replay_single_inflight.py::test_concurrent_dispatch_and_result_no_double_increment -q` | OK |
|
||||
| `.venv/bin/python -m pytest tests/integration/test_replay_single_inflight.py -q` | `10 passed, 1 xfailed` |
|
||||
| `.venv/bin/python -m pytest tests/unit/test_dashboard_routes.py -q` | `30 passed` |
|
||||
| `.venv/bin/python -m pytest tests/integration/test_replay_watchdog.py tests/integration/test_replay_resume_preserves_original_action.py::TestReplayResumePreservesOriginalAction::test_resume_dispatch_backfills_retry_pending_for_watchdog -q` | `11 passed` |
|
||||
| `.venv/bin/python -m pytest tests/unit/test_dashboard_routes.py tests/unit/test_competence_verdicts.py tests/unit/test_competence_promotions.py tests/unit/test_competence_to_vwb_preview.py tests/unit/test_competence_catalog_loader.py tests/unit/test_vwb_supervised_pause_runtime.py tests/unit/test_lea_competence_verdict_api.py tests/integration/test_replay_single_inflight.py -q` | `75 passed, 1 xfailed` |
|
||||
| `git diff --check -- agent_v0/server_v1/api_stream.py web_dashboard/templates/knowledge_base.html tests/unit/test_dashboard_routes.py ...` | OK |
|
||||
|
||||
Warnings attendus : `RequestsDependencyWarning` et `pynvml FutureWarning`.
|
||||
|
||||
## Agents internes Codex
|
||||
|
||||
| Agent | ID | Statut | Résumé |
|
||||
|---|---|---|---|
|
||||
| Lorentz | `019e83f4-6f94-77f2-aab4-82395ca62562` | Terminé | Confirme P0 Qwen ; risque faible ; follow-up : harmoniser payload complet de l'early return |
|
||||
| Huygens | `019e83f4-b4b4-76b1-a9bc-49a3ec7b93fc` | Terminé | Patch warnings dashboard appliqué ; tests ciblés OK |
|
||||
| Descartes | `019e83f4-85db-7a73-ba37-6b68938dd725` | Terminé | Révocation runtime non effective ; `/replay/next` public ; `touch_last_seen()` mort ; ré-enrollment admin_revoke à bloquer |
|
||||
| Plato | `019e83f4-9b9f-7b63-904e-25befda0354a` | Terminé | Confirme faisabilité, mais recommande MVP prudent : Phase 2.5 post-apprentissage, pas OmniParser partout dans le hot path replay |
|
||||
|
||||
## Résultat agent Plato — architecture sémantique
|
||||
|
||||
Constats :
|
||||
|
||||
- OmniParser existe (`core/detection/omniparser_adapter.py`) mais reste fragile : chemin absolu, fallback souvent silencieux.
|
||||
- ScreenAnalyzer existe et est conceptuellement propre, mais le streaming court-circuite l'initialisation lourde en mode léger.
|
||||
- `t2a_decision` est réel et utilisable comme premier agent métier interne.
|
||||
- `ExternalDecisionClient` n'existe pas encore.
|
||||
- Confiance OCR actuelle insuffisante pour autonomie métier : certaines confiances sont approximatives.
|
||||
- Des bypass `static_result` / `static_text` existent et doivent être interdits en démo/POC hors tests.
|
||||
|
||||
MVP recommandé :
|
||||
|
||||
1. Garder le P0 replay/click/OCR existant comme chemin principal.
|
||||
2. Ajouter une Phase 2.5 post-apprentissage uniquement : snapshots sémantiques `{screen_id, window_title, screenshot_path, elements[]}`.
|
||||
3. Demander à l'humain seulement les ambiguïtés utiles.
|
||||
4. Brancher les résultats comme contexte, pas comme prérequis de chaque clic replay.
|
||||
5. Démarrer `ExternalDecisionClient` autour de `t2a_decision`, puis adapter HTTP AIVA.
|
||||
6. Prioriser OCR critique par régions annotées + escalade humaine si confiance basse.
|
||||
|
||||
## Prochains P0/P1
|
||||
|
||||
| Priorité | Sujet | Action recommandée |
|
||||
|---|---|---|
|
||||
| P0 | Revue/commit P0 replay + warnings | Relire diff final, décider commit |
|
||||
| P0 POC | Révocation effective minimale | Ajouter garde registre côté serveur, retirer `/replay/next` des publics, appeler `touch_last_seen`, empêcher ré-enroll `admin_revoke` |
|
||||
| P1 | `candidate/persist` | Créer endpoint `POST /api/v1/lea/competences/candidate/persist` + tests YAML |
|
||||
| P1 | `agent-chat` -> Shadow | Raccorder bouton/chat Léa au cycle `start/stop/understanding/feedback/build/persist` |
|
||||
| P1 | Lecture sémantique | D'abord Phase 2.5 post-apprentissage + snapshots, puis adapter OmniParser runtime, puis `ExternalDecisionClient` |
|
||||
| P1 | Worker VLM | Vérifier/remettre green avant test humain sérieux |
|
||||
|
||||
## Points de vigilance
|
||||
|
||||
- Worktree très sale : ne pas revert les changements non identifiés.
|
||||
- `docs/POC/PREREQUIS_DSI_DGX_SPARK_2026-06-01.docx` a été modifié par Dom : ne pas toucher.
|
||||
- `api_stream.py` contient des changements préexistants massifs ; isoler les futurs patches.
|
||||
- Token global : limitation encore forte. Le patch révocation minimale ne protège pas contre spoof d'un autre `machine_id` actif avec token global.
|
||||
- Ne pas mettre OmniParser/VLM dans le hot path replay sans mesure perf/VRAM.
|
||||
- Interdire les bypass `static_result` / `static_text` dans les workflows démo/POC.
|
||||
- Session propre recommandée maintenant : oui, après lecture de ce handoff.
|
||||
|
||||
— Codex
|
||||
@@ -0,0 +1,160 @@
|
||||
# HANDOFF Qwen — Fin de session 2026-06-01
|
||||
|
||||
- `Auteur`: Qwen
|
||||
- `Date`: 2026-06-01 ~23:00 Europe/Paris
|
||||
- `Prochaine reprise`: 2026-06-02 matin (bi-turbo)
|
||||
- `Dom`: malade, en repos
|
||||
|
||||
---
|
||||
|
||||
## Bilan de la journée
|
||||
|
||||
**19 messages Codex lus, 12 ACK/revues déposés, 5 agents parallèles lancés, 1 revue globale 5 missions.**
|
||||
|
||||
| Lot | Statut | Verdict Qwen |
|
||||
|-----|--------|-------------|
|
||||
| **P0 révocation** | ✅ Livré + testé (32 passed, 1 xfail) | GO |
|
||||
| **P0 single-inflight** | ✅ Patch `paused_need_help` `"ok"` → `"recorded"` | GO |
|
||||
| **P1-PERSIST** | ✅ Livré par Claude (39 tests) | GO conditionnel (token↔machine_id reporté) |
|
||||
| **P1-LEA-SHADOW** | ✅ Livré + corrigé NO-GO (62 tests) | GO — NO-GO levé |
|
||||
| **P1-SEMANTIQUE** | ✅ Livré + corrigé GO conditionnel (35 tests) | GO — conditionnel levé |
|
||||
| **Rebranchement bouton Windows** | ✅ Livré (9 tests) | GO |
|
||||
| **Dashboard test competence** | ✅ Livré | GO |
|
||||
| **C-alpha/B/gamma** | ✅ Livrés (chaîne complète) | GO |
|
||||
| **Audit anti-doublon global** | ✅ 5 missions, 4 agents | Verdict déposé |
|
||||
| **Plan tests humains E2E** | ✅ `docs/demo/test-humain-e2e-poc.md` | Prêt |
|
||||
| **Guide test humain batch 1** | ✅ `docs/demo/test-humain-batch1.md` | Prêt |
|
||||
|
||||
---
|
||||
|
||||
## État des lieux — ce qui est fait
|
||||
|
||||
### Chaîne complète (de bout en bout)
|
||||
|
||||
```
|
||||
Bouton Windows 🎓 → /api/learn/start → Shadow start → observation humaine
|
||||
→ Shadow stop → understanding (Option C) → feedback → build → persist
|
||||
→ YAML candidate → Dashboard "Tester" → replay supervisé → verdict
|
||||
→ promotion dry-run → write-back YAML → audit trail
|
||||
```
|
||||
|
||||
### P0 sécurité
|
||||
|
||||
- 6 endpoints runtime protégés par `_guard_agent_registry_access`
|
||||
- Révocation effective (agent uninstalled → 403)
|
||||
- `touch_last_seen()` actif
|
||||
- `/replay/result` garde inconditionnel
|
||||
- `/replay-session` garde ajouté
|
||||
|
||||
### Audit anti-doublon
|
||||
|
||||
**9 modules orphelins identifiés**, tous fonctionnels, aucun doublon significatif avec P1 du jour :
|
||||
|
||||
| Module | Rôle | Statut |
|
||||
|--------|------|--------|
|
||||
| `ContinuousLearner` (644 lignes) | Auto-évaluation par répétition, drift | À rebrancher P1 |
|
||||
| `FeedbackProcessor` (176 lignes) | Feedback humain → ajustement | À rebrancher P1 |
|
||||
| `VersionedStore` (520 lignes) | Snapshot/rollback learning | À rebrancher P1 |
|
||||
| `TargetMemoryStore` (460 lignes) | Mémoire cibles UI | À rebrancher P1 |
|
||||
| `learning_manager.py` (180 lignes) | Transitions états workflow | **Déjà rebranché** |
|
||||
| `quality_validator.py` (460 lignes) | Validation qualité | **Déjà rebranché** |
|
||||
| + 5 modules `core/training/` et `core/healing/` | Training, analyse, recovery | À rebrancher P1/P2 |
|
||||
|
||||
### R6 worker queue — CONFIRMÉ
|
||||
|
||||
- `_worker_queue.txt` vide depuis le 29 mai
|
||||
- Worker actif (PID 4054092) mais ne traite rien depuis 5 jours
|
||||
- 2 sessions finalisées non traitées
|
||||
- Correctif : logger.critical dans `_enqueue_to_worker` + ré-enqueue manuel
|
||||
|
||||
### FAISS / Graphe
|
||||
|
||||
- FAISS : actif dans 4 branches runtime mais **persistance cassée** (save/load jamais appelés)
|
||||
- Graphe : GO actif, produit après sessions, utilisé par replay, compatible répétition
|
||||
- **Pas de doublon** entre graphe et P1-SEMANTIQUE, mais **pas de connexion** non plus
|
||||
|
||||
---
|
||||
|
||||
## État des lieux — ce qui reste à faire
|
||||
|
||||
### P0 — Immédiat (demain matin)
|
||||
|
||||
| Action | Fichier | Effort |
|
||||
|--------|---------|--------|
|
||||
| R6: logger `_enqueue_to_worker` + ré-enqueue sessions | `api_stream.py` | ~10 lignes |
|
||||
| P1-SEMANTIQUE: le conditionnel est levé ✅ | — | Fait |
|
||||
|
||||
### P1 — Après P0
|
||||
|
||||
| Action | Effort | Impact |
|
||||
|--------|--------|--------|
|
||||
| Rebrancher ContinuousLearner | ~30-50 lignes | Auto-évaluation par répétition (décision Dom) |
|
||||
| Rebrancher FeedbackProcessor | ~20 lignes | Hook dans learn_action.py |
|
||||
| FAISS persistance (save/load) | ~20 lignes | Index perdus au redémarrage |
|
||||
| Connecter Phase25 au graphe | ~30-50 lignes | Enrichir nodes, pas format parallèle |
|
||||
|
||||
### P2 — Après tests humains
|
||||
|
||||
| Action | Impact |
|
||||
|--------|--------|
|
||||
| Classification edges graphe (intention) | Distinguer action/hésitation/correction |
|
||||
| GlobalFAISS consultation | Multi-postes |
|
||||
| Confidence + repetition_count payload | Décision Dom auto-évaluation |
|
||||
| Portabilité learning pack | Export DGX |
|
||||
|
||||
### Test humain E2E — PRÊT
|
||||
|
||||
- `docs/demo/test-humain-e2e-poc.md` — protocole 9 phases
|
||||
- `docs/demo/test-humain-batch1.md` — guide 3 compétences
|
||||
- Critère GO : ≥ 2/3 compétences batch 1 passent le cycle complet
|
||||
|
||||
---
|
||||
|
||||
## Décisions Dom actées (à respecter)
|
||||
|
||||
1. **Observation passive sans question** — Léa n'interrompt pas l'humain pendant l'observation
|
||||
2. **Questions faible confiance seulement en prise de main** — copilote/supervisé uniquement
|
||||
3. **Auto-évaluation par répétition** — Léa apprend à force d'observer/rejouer, pas par restitution lourde
|
||||
4. **Données DPI exploitables localement** — DGX local, pas de sortie hors site
|
||||
5. **Artefacts portables sans mémoire patient** — export réflexes/compétences, pas de captures brutes
|
||||
6. **Noyau compétence stable + adaptateurs UI versionnés** — pas de "désapprentissage"
|
||||
7. **Anti-doublon global** — chercher l'existant avant de coder, rebrancher avant de remplacer
|
||||
8. **Pas de "surveiller plus tard" sans garde-fou** — contenir les risques maintenant
|
||||
|
||||
---
|
||||
|
||||
## Règles coordination
|
||||
|
||||
- **Qwen** = quality gate anti-doublon + revue bloquante
|
||||
- **Claude** = exécution terrain des correctifs
|
||||
- **Codex** = coordination + validation locale
|
||||
- Inbox pattern : `docs/coordination/inbox_X/` pour messages, `syntheses/` pour rapports
|
||||
- Réponses courtes et actionnables
|
||||
|
||||
---
|
||||
|
||||
## Points de vigilance pour demain
|
||||
|
||||
1. **Dom est malade** — il revient en bi-turbo mais peut être fatigué. Privilégier les tests humains courts.
|
||||
2. **R6 est le seul bloquant technique** — sans worker, pas d'enrichissement FAISS/graph. Le correctif est trivial (~10 lignes).
|
||||
3. **Pas de nouveau dev avant rebranchement** — Dom a été clair : on ne code pas de nouvelles features avant d'avoir rebranché l'existant.
|
||||
4. **Test humain avant tout** — le protocole est prêt. Le plus important est de lancer un test réel avec Dom opérateur.
|
||||
5. **P1-SEMANTIQUE GO** — le conditionnel est levé, mais c'est post-R6 en priorité.
|
||||
|
||||
---
|
||||
|
||||
## Fichiers clés à connaître
|
||||
|
||||
| Fichier | Rôle |
|
||||
|---------|------|
|
||||
| `docs/demo/test-humain-e2e-poc.md` | Protocole test humain E2E |
|
||||
| `docs/demo/test-humain-batch1.md` | Guide 3 compétences batch 1 |
|
||||
| `docs/POC/AUDIT_CHAINE_APPRENTISSAGE_2026-06-01.md` | Audit chaîne apprentissage (Claude) |
|
||||
| `inbox_codex/...REVUE-GLOBALE-ANTI-DOUBLON-REBRANCHEMENT.md` | Revue globale Qwen 5 missions |
|
||||
| `data/competences/candidate/*.yaml` | 6 compétences candidates |
|
||||
| `data/competence_verdicts/verdicts.jsonl` | Verdicts supervisés |
|
||||
| `data/training/_worker_queue.txt` | Queue worker (vide — à ré-enqueue) |
|
||||
|
||||
---
|
||||
|
||||
*Auteur : Qwen — Bonne nuit Dom, repose-toi bien !*
|
||||
16
docs/handoffs/PROMPT_REPRISE_CLAUDE_2026-05-23.md
Normal file
16
docs/handoffs/PROMPT_REPRISE_CLAUDE_2026-05-23.md
Normal file
@@ -0,0 +1,16 @@
|
||||
Lis `docs/coordination/README.md` puis traite tous les fichiers avec `Statut: open` dans `docs/coordination/inbox_claude/`.
|
||||
|
||||
Priorité actuelle :
|
||||
- `docs/coordination/inbox_claude/2026-05-23_1024_codex-to-claude_notepad-saveas-explorer-drift.md`
|
||||
|
||||
Contraintes :
|
||||
- répondre dans `docs/coordination/inbox_codex/`
|
||||
- respecter la convention de nommage
|
||||
- ne pas modifier le fichier source
|
||||
- patch minimal et tests si tu implémentes
|
||||
- ne pas mélanger ce bug avec le handler popup overwrite déjà traité
|
||||
|
||||
Point de contexte utile :
|
||||
- le grounding visuel agent a déjà été durci et validé
|
||||
- le blocage courant n’est plus la popup `Oui/Non`
|
||||
- la cause à analyser est la dérive après clic `Enregistrer sous` vers `rpa_vision : Explorateur de fichiers`
|
||||
56
docs/handoffs/PROMPT_REPRISE_CLAUDE_2026-05-25_SOIR.md
Normal file
56
docs/handoffs/PROMPT_REPRISE_CLAUDE_2026-05-25_SOIR.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# Handoff Claude — 2026-05-25 soir
|
||||
|
||||
## État validé
|
||||
|
||||
- Smoke live Bloc-notes `replay_sess_1c0bfb42` : 16/16, 0 pause, score 0.94, temps moyen 4793 ms.
|
||||
- Lot tests : `88 passed, 1 xfailed` (race concurrent polls documentée).
|
||||
- VRAM agent_chat : 0 (libéré par C1+C1b+C1c+C1d).
|
||||
- Build skip : 271 ms mesuré Codex (vs 91s historique).
|
||||
- Profil démo actif sur Linux : `RPA_SKIP_INTENTION_ENRICHMENT=true`, `RPA_SKIP_BUILD_VISION=true`, `RPA_EASYOCR_GPU=0`, `AGENT_CHAT_ENABLE_OWL=0`, `AGENT_CHAT_ENABLE_UI_DETECTION=0`.
|
||||
|
||||
## Décisions actées
|
||||
|
||||
- Démo cible **Easily** (pas Bloc-notes) — Dom referra la capture à la main.
|
||||
- D5-v2 = API préparatoire (qwen3.5 JSON), non consommée runtime.
|
||||
- D5-v3a mini-fix : `num_ctx=4096` posé sur 3 sites bbox `resolve_engine.py`.
|
||||
- D5-v3b helper bbox : reporté post-démo.
|
||||
- D5-v3c Windows `num_ctx=8192` : NOGO avant freeze (fallbacks non triggered en smoke).
|
||||
- C-P1 OCR tolérance préfixe : patch posé (`_text_match_fuzzy` + 14 tests).
|
||||
- C-P3 bulle Léa : OK pour démo sans patch.
|
||||
|
||||
## Travaux en attente
|
||||
|
||||
- Capture réelle Easily par Dom selon protocole `inbox_codex/2026-05-25_1735_claude-to-codex_protocole-capture-easily-lea.md` (6 arbitrages à trancher avec Codex).
|
||||
- Codex doit ACK : rapport unifié C-P1/C-P2/C-P3 (1720) + protocole Easily (1735).
|
||||
- Commit/freeze du lot stabilisation par Codex (pas par Claude).
|
||||
- Smoke équivalent Easily à faire (R7 ouvert).
|
||||
|
||||
## Risques bloquants seulement
|
||||
|
||||
- **R1** `RPA_GROUNDING_MODEL` ambigu (D5-v2 qwen3.5 vs legacy qwen2.5vl bbox) — NE PAS set globalement. D5-v3b résout post-démo.
|
||||
- **R7** pas de smoke Easily équivalent (démo cible Easily). À faire avant freeze.
|
||||
- Worktree large/sale — Codex groupera commits avant freeze.
|
||||
|
||||
## Fichiers importants
|
||||
|
||||
- `docs/coordination/active/2026-05-25_runbook-profil-demo-smoke.md` — runbook démo
|
||||
- `docs/coordination/active/2026-05-25_etat-courant.md` — file active
|
||||
- `docs/coordination/syntheses/2026-05-25_synthese-direction.md` — synthèse jour
|
||||
- `docs/coordination/inbox_codex/2026-05-25_1720_claude-to-codex_REPONSE-taches-projet-ocr-d5v3c-lea.md` — C-P1/C-P2/C-P3
|
||||
- `docs/coordination/inbox_codex/2026-05-25_1735_claude-to-codex_protocole-capture-easily-lea.md` — C-P4 Easily
|
||||
|
||||
## Prochaine action recommandée
|
||||
|
||||
Attendre ACK Codex sur C-P1+C-P2+C-P3 (rapport 1720) et sur le protocole Easily (1735). Ensuite : assister Dom pour la capture Easily selon protocole.
|
||||
|
||||
## Ce qu'il ne faut pas faire demain
|
||||
|
||||
- NE PAS set `RPA_GROUNDING_MODEL=qwen3.5:9b` globalement (casse les 3 sites bbox legacy).
|
||||
- NE PAS toucher `agent_v0/agent_v1/core/executor.py` (Windows, reporté D5-v3c post-démo).
|
||||
- NE PAS redéployer Windows sans GO Codex.
|
||||
- NE PAS lancer de live replay sans GO Dom explicite.
|
||||
- NE PAS commit (Codex groupe).
|
||||
- NE PAS rouvrir D5-v3b helper bbox tant que lot perf/stabilité pas figé.
|
||||
- NE PAS mettre de secret en clair dans `docs/coordination/` (placeholder).
|
||||
- NE PAS copier mécaniquement le YAML `urgence_aiva_demo_expected.yaml` comme scénario (Dom recapture à la main).
|
||||
- NE PAS spawner d'agent pour brainstorming ciblé (overkill, déjà cadré matin).
|
||||
105
docs/handoffs/PROMPT_REPRISE_CLAUDE_2026-05-26_SOIR.md
Normal file
105
docs/handoffs/PROMPT_REPRISE_CLAUDE_2026-05-26_SOIR.md
Normal file
@@ -0,0 +1,105 @@
|
||||
# Handoff Claude — 2026-05-26 soir
|
||||
|
||||
## Rôle réassigné aujourd'hui
|
||||
|
||||
Dom m'a réassigné le rôle de **chef de projet** (priorisation + pilotage Codex), avec arbitrages stratégiques validés par Dom. Pas exécutant supervisé.
|
||||
|
||||
Feedback durable sauvé en mémoire : `feedback_depose_par_defaut.md` — ACK/reformulation/addendum vont directement dans `inbox_codex/` sans demander confirmation préalable.
|
||||
|
||||
## Pivot majeur de la journée
|
||||
|
||||
Démo Paris **du 21 mai → annulée/reportée**. Nouvelle démo cible **2026-06-01** (J-5 au matin du 27/05).
|
||||
|
||||
Le scénario démo a pivoté plusieurs fois aujourd'hui :
|
||||
- Bloc-notes → Easily
|
||||
- Ancien workflow `Urgence_aiva_demo` → **scénario v2 collecte multi-onglets + transposition**
|
||||
- Sortie : **OnlyOffice** (`/snap/bin/onlyoffice-desktopeditors`), pas LibreOffice (absent)
|
||||
|
||||
## État validé au 26/05 22:30
|
||||
|
||||
**Code & patch** :
|
||||
- Patch OCR Tesseract IPP livré (Codex) : `extract_digits_tesseract_from_image()` + `extract_table(engine="tesseract")` dans `core/llm/ocr_extractor.py`. 40 tests OK. **11/11 IPP exacts** sur `landing_wide.png` (vs 8/11 EasyOCR brut).
|
||||
- Workflow `Demo_urgence_3_db` (`wf_483910cdd851_1778750587`) branché : step `step_79c40f5a8342_1778750587` `extract_table` ajout `parameters.engine = "tesseract"`. Sauvegarde DB : `workflows.db.backup_2026-05-26_ocr_tesseract_demo3`.
|
||||
- Healthcheck Linux OK (Codex matin) : `rpa-streaming` + `rpa-agent-chat` actives, profil démo systemd OK, ollama ps vide, baseline `api_stream` ~1.1 Go VRAM noté.
|
||||
- Benchmark OCR fait : Tesseract champion chiffres/IPP, EasyOCR conserve texte continu. docTR utile pour bboxes/zonage si besoin futur. Preprocessing OpenCV global = régression, **pas activé par défaut**.
|
||||
- Dry-run Easily v2 fait (Codex) : MOREL Catherine / IPP 25003284 lisible. Synthèse Urgences nécessite scroll obligatoire (CCMU/GEMSA/J12.1 en bas).
|
||||
|
||||
**Infra démo prête** :
|
||||
- Maquette Easily : http://127.0.0.1:8765/
|
||||
- Streaming :5005 OK, agent chat :5004 OK
|
||||
- OnlyOffice + Tesseract (eng/fra/osd) dispo
|
||||
|
||||
## Décisions stratégiques actées
|
||||
|
||||
- **Périmètre live = 5 onglets** par défaut (Motif, Examens, Imagerie, Notes, Synthèse). Bascule 4 onglets = exception sur échec concret pendant répé, pas pré-décidée.
|
||||
- **Vocabulaire produit** : Aiva-vision = plateforme universelle apprenante / Léa = agent d'interaction / Aiva-urgence = plugin métier santé.
|
||||
- **Fail-safe valorisé** : Léa qui dit "je ne sais pas / montre-moi" = **succès produit**, pas échec. NOGO = actions dangereuses, pas demandes de confirmation.
|
||||
- **Scroll = compétence apprise** : geste + changement visuel + marqueurs. Pas un raccourci fixe.
|
||||
- **Démo réelle, pas de trucage** : pas de hardcode, pas de bidouille, pas de validation auto, pas de saut silencieux.
|
||||
- **PII levée** : c'est une maquette, tout est fictif. MOREL Catherine / 25003284 OK.
|
||||
|
||||
## Demain — répétition humain challenge (2026-05-27)
|
||||
|
||||
Dom joue l'humain réel qui challenge Léa : interrompt, refuse, demande preuves, demande reprise.
|
||||
|
||||
Runbook : `docs/coordination/active/2026-05-26_runbook-repetition-humain-challenge-demo-v2.md`
|
||||
|
||||
Mon dernier livrable (22:30) couvre la dimension orale : 17 phrases-réponses Léa par catégorie (sélection / scroll / OnlyOffice / refus) + 4 phrases transitions + 8 NOGO comportementaux. Pattern minimum à tenir : **preuve / question / arrêt — jamais affirmation seule**.
|
||||
|
||||
## Mes 7 livrables déposés aujourd'hui (inbox_codex/)
|
||||
|
||||
1. `0920_claude-to-codex_reprise-session-plan-j6-demo.md` — reprise session
|
||||
2. `1030_claude-to-codex_CHECKLIST-easily-capture-trace.md` — checklist capture
|
||||
3. `2130_claude-to-codex_DEMO-v2-script-failsafe-onlyoffice.md` — script démo v2
|
||||
4. `2145_claude-to-codex_ADDENDUM-demo-v2-dryrun-integration.md` — addendum dry-run
|
||||
5. `2155_claude-to-codex_ACK-arbitrage-onglets-bascule-discours.md` — ACK 5/4/3 onglets
|
||||
6. `2215_claude-to-codex_ACK-scroll-vwb-reformulation-discours.md` — ACK scroll VWB
|
||||
7. `2230_claude-to-codex_SCRIPT-oral-lea-humain-challenge.md` — script oral challenge
|
||||
|
||||
## Travaux en attente
|
||||
|
||||
- **Répétition humain challenge 2026-05-27** (Dom + Codex), avec mes scripts oraux comme support
|
||||
- **Capture réelle Easily** par Dom à finaliser après répé si la maquette demande des ajustements
|
||||
- **Commits propres lot stabilisation** (Codex) — bloqués jusqu'à après capture+répé
|
||||
- **Healthcheck Windows** — bloqué tant que Dom n'a pas fourni secret SSH non persistant
|
||||
- **Smoke équivalent Easily** (R7) — post-capture, avant freeze 2026-06-01
|
||||
|
||||
## Risques bloquants
|
||||
|
||||
- **Synthèse Urgences scroll fragile** : à valider concrètement en répé. Si marqueurs CCMU/GEMSA/J12.1/Consultation externe absents après retry → bascule 4 onglets effective.
|
||||
- **Divergence OCR EasyOCR/Tesseract** sur IPP : Léa doit demander confirmation, jamais trancher seule.
|
||||
- **Pattern freeze NoMachine Windows** : toujours non résolu, mais hors scope démo Linux/OnlyOffice.
|
||||
|
||||
## Sources de vérité actives (ordre de lecture Codex)
|
||||
|
||||
1. `active/2026-05-26_cadrage-produit-aiva-vision.md`
|
||||
2. `active/2026-05-26_arbitrage-dom-demo-reelle-poc.md`
|
||||
3. `active/2026-05-26_principe-dom-apprentissage-fail-safe.md`
|
||||
4. `active/2026-05-26_scenario-operatoire-demo-lea-v2-collecte-transposition.md`
|
||||
5. `active/2026-05-26_arbitrage-scroll-vwb-reference.md`
|
||||
6. `active/2026-05-26_principe-apprentissage-scroll-securise.md`
|
||||
7. `active/2026-05-26_arbitrage-sortie-transposition-onlyoffice.md`
|
||||
8. `active/2026-05-26_benchmark-ocr-local-captures-easily.md`
|
||||
9. `active/2026-05-26_patch-ocr-tesseract-ipp.md`
|
||||
10. `active/2026-05-26_runbook-repetition-humain-challenge-demo-v2.md`
|
||||
11. `active/2026-05-26_etat-preparation-repetition-2026-05-27.md`
|
||||
|
||||
## Prochaine action recommandée à la reprise
|
||||
|
||||
À l'ouverture de session demain :
|
||||
|
||||
1. Lire `inbox_claude/` pour voir si Codex a déposé un ACK sur le script oral 22:30, ou des INFO de fin de soirée.
|
||||
2. Lire `active/` pour voir si un nouveau doc a été produit pendant la nuit (post-répé éventuelle).
|
||||
3. Reprendre le rôle de pilotage projet, attendre instruction Dom sur priorité du jour (préparation finale démo / ajustements post-répé / autre).
|
||||
|
||||
## Ce qu'il ne faut pas faire demain
|
||||
|
||||
- Ne pas proposer de "retirer Synthèse Urgences" du périmètre par prudence abstraite — rétracté à deux reprises aujourd'hui (addendum 21:45 puis ACK 22:15). Bascule 4 onglets = exception sur échec concret.
|
||||
- Ne pas mentionner LibreOffice (absent côté Linux).
|
||||
- Ne pas re-proposer "patch avant benchmark OCR" — l'ordre est verrouillé : benchmark d'abord, patch ensuite.
|
||||
- Ne pas commiter (Codex groupe les commits).
|
||||
- Ne pas lancer de live replay sans GO Dom explicite.
|
||||
- Ne pas mettre de secret en clair dans `docs/coordination/`.
|
||||
- Ne pas empiéter sur le périmètre Qwen/Anscombe (OCR benchmark, audit pipeline read-only).
|
||||
- Ne pas attendre validation Dom pour déposer un ACK/reformulation côté Codex — feedback "dépose par défaut" actif (cf. `feedback_depose_par_defaut.md`).
|
||||
- Ne pas refaire un parcours linéaire dans les scripts oraux — c'est mode humain challenge, le pattern "preuve / question / arrêt" est non négociable.
|
||||
70
docs/handoffs/PROMPT_REPRISE_CLAUDE_2026-05-28_MATIN.md
Normal file
70
docs/handoffs/PROMPT_REPRISE_CLAUDE_2026-05-28_MATIN.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# Prompt de reprise Claude — 2026-05-28 matin
|
||||
|
||||
> A coller (ou referencer) dans une nouvelle session Claude Code pour repartir propre.
|
||||
|
||||
## Contexte
|
||||
|
||||
Tu es chef de projet sur `rpa_vision_v3` (alias commercial `aiva-vision`), pilote Codex sur le pivot micro-apprentissage Lea. Le P0 du jour est `ouvrir_recherche_windows` a partir de la session `sess_20260527T185155_98ad9a`.
|
||||
|
||||
Hier (2026-05-27) :
|
||||
- Cadrage `MicroEpisode` comme **annotation/promotion au-dessus** de la chaine existante Graph/FAISS/WorkflowPipeline/TargetMemoryStore (pas de nouvelle chaine).
|
||||
- Brique `message_contract.py` ecrite par Codex (35 tests verts).
|
||||
- Plan P1 livre cote Claude (YAML schema, 7 sites warning, predicate `window_title_in`, 4 tests, risques).
|
||||
|
||||
## A lire d'abord (ordre important)
|
||||
|
||||
1. `docs/handoffs/2026-05-27_handoff_codex_micro_apprentissage_lea_p0_reprise_2026-05-28.md` — handoff Codex
|
||||
2. `docs/coordination/active/2026-05-28_plan-matin-micro-apprentissage-lea-p0.md` — plan matin actif
|
||||
3. `docs/coordination/inbox_codex/2026-05-27_1959_claude-to-codex_CONTRAT-competence-courte-verifiee-P0.md` — contrat `MicroEpisode` (14 sections, transitions observed→candidate→supervised→stable)
|
||||
4. `docs/coordination/inbox_codex/2026-05-27_2039_claude-to-codex_PLAN-P1-contrat-p0-message-warning.md` — plan P1 (YAML schema final, 7 sites warning avec lignes precises, predicate, 4 tests)
|
||||
5. `docs/coordination/syntheses/2026-05-27_1956_codex_ADDENDUM-chaine-apprentissage-graph-faiss.md` — recadrage Dom : ne pas reinventer la chaine
|
||||
|
||||
## Priorites du jour (cf. PREP Codex 21:35)
|
||||
|
||||
1. Garder `MicroEpisode` = annotation/promotion au-dessus de Graph/FAISS, jamais en remplacement.
|
||||
2. Finaliser `data/competences/observed/open_windows_search.yaml` (schema dans le PLAN P1 §1).
|
||||
3. Guider le branchement `message_contract.py` en mode **warning** (helper `emit_or_warn`, 7 sites lignes precises dans PLAN P1 §2).
|
||||
4. Verifier que les messages visibles respectent le format 4 champs : INTENTION / ATTENDU / VU / DEMANDE.
|
||||
5. Refuser toute derive boite a clic ou chaine parallele.
|
||||
|
||||
## 5 decisions §13 a acter avec Dom
|
||||
|
||||
1. Validateur YAML chez Codex ou Claude ?
|
||||
2. Helper `emit_or_warn` dans `message_contract.py` ou nouveau module ?
|
||||
3. Branchement warning : 1 site d'abord ou 6 en bloc ?
|
||||
4. Demotion stable→supervised : N=2 ou N=3 echecs ?
|
||||
5. Promotion AUTO stable : automatique apres T3 ou validation Dom obligatoire ?
|
||||
|
||||
## Invariants
|
||||
|
||||
- Pas de patch sans GO Dom matin.
|
||||
- Pas de recapture Win+S (session P0 existe : 3 chemins confirmes).
|
||||
- Pas de bypass Graph / FAISS / TargetMemoryStore.
|
||||
- Pas de coordonnees codees en dur ; jamais de boite a clic.
|
||||
- Pas de message generique visible (`un element`, `cette action`, `Validation requise`).
|
||||
- Ne pas modifier `agent_v0/agent_v1/core/executor.py` ni `core/grounding.py`.
|
||||
- Pas de live replay / restart service / redeploiement Windows sans GO.
|
||||
- Pas de commit (Codex groupe les commits).
|
||||
- Secrets : pas en clair dans `docs/coordination/` (placeholder OK).
|
||||
|
||||
## Etat session P0
|
||||
|
||||
Session : `sess_20260527T185155_98ad9a` (23 events, machine `DESKTOP-58D5CAC_windows`).
|
||||
Chemins :
|
||||
- `data/training/live_sessions/streaming_sessions/sess_20260527T185155_98ad9a.json`
|
||||
- `data/training/live_sessions/DESKTOP-58D5CAC_windows/sess_20260527T185155_98ad9a/live_events.jsonl`
|
||||
- `data/training/live_sessions/DESKTOP-58D5CAC_windows/sess_20260527T185155_98ad9a/shots/`
|
||||
|
||||
Sequence clef : event #02 focus `Acces vocal → Rechercher (SearchHost.exe)` precede event #03 `key_combo ["win","s"]` (effet release-only). Heartbeats #07/#11/#13 confirment `active='Rechercher'`. Parasites a filtrer : #00 (Acces vocal), #15-22 (systray + pythonw).
|
||||
|
||||
Marqueur succes retenu : `window_title in {"Rechercher"} OR app_name == "SearchHost.exe"`.
|
||||
|
||||
## Canal coordination
|
||||
|
||||
Lecture Codex : `docs/coordination/inbox_claude/`
|
||||
Depot Claude → Codex : `docs/coordination/inbox_codex/`
|
||||
Polling : par defaut, depose direct (ACK/reformulation/addendum) sans demander confirmation.
|
||||
|
||||
## Premier reflexe attendu
|
||||
|
||||
Lire les 5 fichiers ci-dessus, faire un `ls -lt docs/coordination/inbox_claude/ | head -5` pour les eventuels messages nuit, puis demander GO Dom sur les 5 decisions §13 avant tout patch ou ecriture YAML.
|
||||
23
docs/handoffs/PROMPT_REPRISE_CODEX_2026-05-23.md
Normal file
23
docs/handoffs/PROMPT_REPRISE_CODEX_2026-05-23.md
Normal file
@@ -0,0 +1,23 @@
|
||||
Lis d’abord `docs/handoffs/2026-05-23_handoff_codex_lea_replay_resume.md`, puis vérifie `docs/coordination/inbox_codex/` pour toute réponse Claude récente.
|
||||
|
||||
Contexte à reprendre :
|
||||
- projet `rpa_vision_v3`
|
||||
- replay live courant : `replay_sess_595c4947`
|
||||
- blocage actuel : dérive après clic sur l’onglet `Enregistrer sous` vers `rpa_vision : Explorateur de fichiers`
|
||||
- le patch grounding visuel est déjà déployé sur Windows et actif
|
||||
- le handler popup overwrite `Confirmer l'enregistrement -> Oui` est déjà codé mais pas encore exercé sur ce run
|
||||
- problème infra séparé : GPU Linux non exploitable (`driver/library mismatch` NVIDIA)
|
||||
|
||||
Objectif immédiat :
|
||||
1. vérifier si la machine a redémarré et si Léa est revenue
|
||||
2. si besoin, relancer un `replay-session` avec :
|
||||
- `session_id=sess_20260520T102916_066851`
|
||||
- `machine_id=DESKTOP-58D5CAC_windows`
|
||||
3. continuer uniquement le diagnostic/fix sur la dérive `Enregistrer sous -> Explorateur`
|
||||
4. lire et intégrer la réponse Claude si elle existe
|
||||
5. ne pas repartir de zéro ni rouvrir les sujets déjà clos
|
||||
|
||||
Rappels importants :
|
||||
- utiliser `docs/coordination/` pour les briefs Claude
|
||||
- ne pas mélanger le bug fonctionnel courant avec le problème infra GPU
|
||||
- ne pas retirer le nouveau grounding visuel sans preuve contraire
|
||||
19
docs/handoffs/PROMPT_REPRISE_CODEX_2026-05-25.md
Normal file
19
docs/handoffs/PROMPT_REPRISE_CODEX_2026-05-25.md
Normal file
@@ -0,0 +1,19 @@
|
||||
Lis d'abord :
|
||||
|
||||
1. `docs/handoffs/2026-05-25_handoff_codex_notepad_success_phase2.md`
|
||||
2. le handoff Claude miroir du 2026-05-25 s'il existe dans `docs/handoffs/`
|
||||
3. `docs/coordination/inbox_codex/` pour les messages Claude plus recents
|
||||
|
||||
Contexte court :
|
||||
|
||||
- Replay Bloc-notes live reussi : `replay_sess_e96e5822`, `18/18`, `0` echec.
|
||||
- Point critique valide : `Confirmer l'enregistrement` traite sans aide humaine via `runtime_dialog_handled_post_verify`.
|
||||
- Prochains chantiers : figer le succes par test offline, traiter vitesse/dispatch, clarifier chemin Windows reel, puis transport inerte `SceneExpected` / `Precondition`.
|
||||
|
||||
Regles de reprise :
|
||||
|
||||
- Ne pas faire de gros code sans deleguer a Claude.
|
||||
- Ne pas resync `deploy/windows_client` avant verification du chemin reel execute par Lea.
|
||||
- Ne pas relancer de replay live tant que l'objectif de test n'est pas clair.
|
||||
- Utiliser `.venv/bin/python` pour les tests Python.
|
||||
- Ne rien revert dans le worktree sale sans demande explicite Dom.
|
||||
140
docs/handoffs/PROMPT_REPRISE_CODEX_2026-05-25_SOIR.md
Normal file
140
docs/handoffs/PROMPT_REPRISE_CODEX_2026-05-25_SOIR.md
Normal file
@@ -0,0 +1,140 @@
|
||||
# Handoff Codex — reprise soir 2026-05-25
|
||||
|
||||
- `Auteur`: Codex
|
||||
- `Date`: 2026-05-25 soir Europe/Paris
|
||||
- `Contexte`: stabilisation Lea / demo cible 2026-06-01
|
||||
- `Role Codex`: direction technique, arbitrage, integration, tests finaux
|
||||
|
||||
## Etat valide
|
||||
|
||||
1. Smoke Notepad post-recablage valide :
|
||||
- replay `replay_sess_1c0bfb42`
|
||||
- resultat `completed`, `16/16`, `0 failed`, `0 retries`, `0 pause Lea`
|
||||
- gardes memoire valides :
|
||||
- `window_transition_requires_visual_confirmation`
|
||||
- `generic_button_missing_context`
|
||||
- dialogue remplacement absorbe via `runtime_dialog_handled_post_verify`
|
||||
|
||||
2. Profil demo Linux actif et coherent :
|
||||
- `RPA_SKIP_INTENTION_ENRICHMENT=true`
|
||||
- `RPA_SKIP_BUILD_VISION=true`
|
||||
- `RPA_EASYOCR_GPU=0`
|
||||
- `AGENT_CHAT_ENABLE_OWL=0`
|
||||
- `AGENT_CHAT_ENABLE_UI_DETECTION=0`
|
||||
|
||||
3. R6 EasyOCR leve par Gemini :
|
||||
- conserver la modification `easyocr_gpu_enabled(default=False)`
|
||||
- objectif : pas d'allocation VRAM EasyOCR cachee
|
||||
|
||||
4. Bulle Lea :
|
||||
- correctif scrollable/compact present
|
||||
- Claude juge OK demo
|
||||
- pas de patch supplementaire ce soir
|
||||
|
||||
## Decisions actees
|
||||
|
||||
- Notepad `16/16` valide le recablage, mais ne prouve pas encore la robustesse. Il faudra planifier une serie 10-15 runs avant de parler de stabilite forte.
|
||||
- Pas de migration globale `qwen3.5` avant D5-v3b/D5-v3c.
|
||||
- Runtime demo reste `qwen2.5vl` bbox legacy avec `num_ctx=4096`.
|
||||
- `qwen3.5` = benchmark isole / API preparatoire JSON, pas runtime global.
|
||||
- D5-v3c Windows `num_ctx=8192` = report post-demo.
|
||||
- Easily avec Lea reel = chantier reporte apres-demain, pas demain.
|
||||
- Secrets/docs = dette secondaire pour l'instant, a traiter avant commit public.
|
||||
|
||||
## Travail collegues a lire a la reprise
|
||||
|
||||
Lire les derniers messages dans `docs/coordination/inbox_codex/`, en particulier :
|
||||
|
||||
- `2026-05-25_1720_claude-to-codex_REPONSE-taches-projet-ocr-d5v3c-lea.md`
|
||||
- `2026-05-25_1735_claude-to-codex_protocole-capture-easily-lea.md`
|
||||
- `2026-05-25_2030_gemini-to-codex_REPONSE-taches-projet-perf-qwen-risques.md`
|
||||
- `2026-05-25_2045_gemini-to-codex_GRILLE-demo-intelligence-facilite.md`
|
||||
- `2026-05-25_2100_gemini-to-codex_PROPOSITION-demo-metier-avancee.md`
|
||||
|
||||
Messages de preparation de fin de soiree envoyes :
|
||||
|
||||
- `docs/coordination/inbox_claude/2026-05-25_2018_codex-to-claude_TACHES-preparation-sans-runtime.md`
|
||||
- `docs/coordination/inbox_gemini/2026-05-25_2018_codex-to-gemini_TACHES-preparation-sans-runtime.md`
|
||||
|
||||
Dom demande aussi a Claude et Gemini de produire leurs handoffs soir.
|
||||
|
||||
## Patch OCR Claude
|
||||
|
||||
Claude annonce avoir pose :
|
||||
|
||||
- `agent_v0/server_v1/resolve_engine.py`
|
||||
- `tests/unit/test_text_match_fuzzy_prefix.py`
|
||||
|
||||
Objet : accepter un OCR prefixe partiel, ex. `Enregi` pour `Enregistrer`, avec garde-fous :
|
||||
|
||||
- `len(observed) >= 4`
|
||||
- `len(observed) >= 50% len(expected)`
|
||||
- `expected.startswith(observed)`
|
||||
|
||||
A faire a la reprise :
|
||||
|
||||
1. verifier le diff soi-meme ;
|
||||
2. lancer le test cible ;
|
||||
3. arbitrer `ACK/NACK` a Claude ;
|
||||
4. decider si seuil 50% ou 60%.
|
||||
|
||||
Commande cible :
|
||||
|
||||
```bash
|
||||
.venv/bin/python -m pytest tests/unit/test_text_match_fuzzy_prefix.py -q
|
||||
```
|
||||
|
||||
## Prochaines actions recommandees
|
||||
|
||||
Priorite courte :
|
||||
|
||||
1. `git status --short`
|
||||
2. Lire nouveaux handoffs Claude/Gemini s'ils existent.
|
||||
3. Verifier patch OCR Claude + test cible.
|
||||
4. Repondre ACK/NACK a Claude.
|
||||
5. Planifier protocole smoke Notepad 10-15 runs, sans le lancer sans GO Dom.
|
||||
|
||||
Priorite moyenne :
|
||||
|
||||
1. Decoupage worktree en commits propres.
|
||||
2. Ne pas committer docs avant scan/sanitisation minimal.
|
||||
3. Preparer, plus tard, capture Easily avec Lea reelle.
|
||||
|
||||
## A ne pas faire demain
|
||||
|
||||
- Ne pas lancer chantier Easily.
|
||||
- Ne pas migrer `qwen3.5` en global.
|
||||
- Ne pas set `RPA_GROUNDING_MODEL=qwen3.5:9b`.
|
||||
- Ne pas redeployer Windows pour D5-v3c.
|
||||
- Ne pas lancer 10-15 smokes sans fenetre de controle et GO Dom.
|
||||
- Ne pas faire de grand nettoyage worktree non supervise.
|
||||
- Ne pas archiver/supprimer messages coordination sans synthese.
|
||||
|
||||
## Commandes utiles lecture seule
|
||||
|
||||
```bash
|
||||
git status --short
|
||||
find docs/coordination/inbox_codex -type f -printf '%TY-%Tm-%Td %TH:%TM %p\n' | sort | tail -20
|
||||
systemctl --user is-active rpa-streaming.service
|
||||
curl -fsS http://127.0.0.1:5005/health
|
||||
ollama ps
|
||||
```
|
||||
|
||||
Pour les endpoints proteges, charger `.env.local` sans afficher le token :
|
||||
|
||||
```bash
|
||||
set -a; . ./.env.local; set +a
|
||||
curl -fsS -H "Authorization: Bearer $RPA_API_TOKEN" http://127.0.0.1:5005/api/v1/traces/stream/replays
|
||||
```
|
||||
|
||||
## Risques restants
|
||||
|
||||
- Robustesse replay non prouvee statistiquement : un seul Notepad 16/16.
|
||||
- Worktree tres sale, nombreux fichiers modifiés/non suivis.
|
||||
- Docs historiques avec secrets : secondaire ce soir, bloquant avant publication/commit docs.
|
||||
- Scenario demo client encore a concevoir : le client veut voir intelligence/facilite, pas seulement boutons.
|
||||
- Capture Easily reelle devra utiliser patient fictif et eviter PII.
|
||||
|
||||
## Dernier mot
|
||||
|
||||
Le socle a enfin passe un vrai smoke propre. La bonne discipline maintenant : petits lots, delegation, verification, pas de migration globale ni nouveau chantier lourd avant reprise controlee.
|
||||
114
docs/handoffs/PROMPT_REPRISE_GEMINI_2026-05-25.md
Normal file
114
docs/handoffs/PROMPT_REPRISE_GEMINI_2026-05-25.md
Normal file
@@ -0,0 +1,114 @@
|
||||
# Prompt reprise Gemini — 2026-05-25
|
||||
|
||||
Tu es Gemini, collègue de revue indépendante sur le projet Léa/RPA Vision.
|
||||
|
||||
Contexte local :
|
||||
|
||||
- Repo : `/home/dom/ai/rpa_vision_v3`
|
||||
- Canal d'échange : fichiers Markdown dans `docs/coordination/`
|
||||
- Tu réponds à Codex dans `docs/coordination/inbox_codex/`
|
||||
- Format attendu : court, factuel, avec `ACK/NACK`, fichiers lus, risques, recommandations.
|
||||
|
||||
## Rôle attendu
|
||||
|
||||
Tu n'es pas le pilote principal. Ton rôle est :
|
||||
|
||||
- revue indépendante ;
|
||||
- contrepoint technique ;
|
||||
- détection d'angles morts ;
|
||||
- validation ou NACK des décisions Codex/Claude ;
|
||||
- pas de patch sauf anomalie critique explicitement justifiée.
|
||||
|
||||
Codex garde l'arbitrage. Claude exécute/analyse. Dom tranche les choix produit/demo.
|
||||
|
||||
## À lire en priorité
|
||||
|
||||
Lis dans cet ordre :
|
||||
|
||||
1. `docs/coordination/README.md`
|
||||
2. `docs/coordination/active/2026-05-25_etat-courant.md`
|
||||
3. `docs/coordination/syntheses/2026-05-25_synthese-direction.md`
|
||||
4. `docs/coordination/registre/2026-05-25_decisions.md`
|
||||
5. `docs/coordination/registre/2026-05-25_arbitrages-runbook-demo.md`
|
||||
6. `docs/coordination/active/2026-05-25_execution-profil-demo-linux.md`
|
||||
7. `docs/coordination/active/2026-05-25_runbook-profil-demo-smoke.md`
|
||||
8. `docs/coordination/index/2026-05-25_messages-cles.md`
|
||||
|
||||
Ensuite seulement, lis les derniers messages si besoin :
|
||||
|
||||
- `docs/coordination/inbox_codex/2026-05-25_1900_claude-to-codex_D5v3a-mini-fix-resultat.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-25_1920_gemini-to-codex_ACK-revue-D5v3a-minifix.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-25_1645_claude-to-codex_runbook-demo-livre.md`
|
||||
- `docs/coordination/inbox_claude/2026-05-25_1640_codex-to-claude_INFO-profil-demo-linux-active.md`
|
||||
|
||||
## État courant résumé
|
||||
|
||||
La démo client est reportée au 2026-06-01. On stabilise proprement.
|
||||
|
||||
Ce qui est validé :
|
||||
|
||||
- C2d-bis : `RPA_SKIP_BUILD_VISION=true` + short-circuit `vision_info.text`.
|
||||
- Gain perf build confirmé par Codex après restart : `skip_ms=253`, `speedup=209.7x`.
|
||||
- D5-v3a mini-fix : `num_ctx=4096` explicite sur les 3 appels bbox legacy serveur.
|
||||
- Agent_chat ne charge plus OWL/UI detection et n'occupe plus la VRAM.
|
||||
- Profil démo Linux actif via drop-ins systemd.
|
||||
- Smoke offline OK.
|
||||
|
||||
Ce qui n'est PAS fait :
|
||||
|
||||
- Pas de smoke live.
|
||||
- Pas de healthcheck Windows avec secret.
|
||||
- Pas de commit.
|
||||
- Pas de D5-v3b.
|
||||
- Pas de modification Windows executor.
|
||||
|
||||
## Flags actifs côté Linux
|
||||
|
||||
`rpa-streaming.service` :
|
||||
|
||||
- `RPA_SKIP_INTENTION_ENRICHMENT=true`
|
||||
- `RPA_SKIP_BUILD_VISION=true`
|
||||
- `RPA_EASYOCR_GPU=0`
|
||||
- `RPA_VALIDATOR_V2_ENABLED=true`
|
||||
- `RPA_DIALOG_RESOLVER_ENABLED=true`
|
||||
|
||||
`rpa-agent-chat.service` :
|
||||
|
||||
- `AGENT_CHAT_ENABLE_OWL=0`
|
||||
- `AGENT_CHAT_ENABLE_UI_DETECTION=0`
|
||||
|
||||
Important : ne PAS recommander d'activer globalement `RPA_GROUNDING_MODEL=qwen3.5:9b`.
|
||||
Raison : conflit avec les callers bbox legacy qui attendent qwen2.5vl/bbox_2d.
|
||||
|
||||
## Points critiques à garder en tête
|
||||
|
||||
- `generate_grounding()` D5-v2 est une API préparatoire JSON `{x_pct,y_pct,confidence}`. Elle n'est pas encore consommée par les callers runtime.
|
||||
- Les chemins bbox legacy restent qwen2.5vl, avec `num_ctx=4096` explicite depuis D5-v3a.
|
||||
- Le healthcheck Linux peut afficher WARN si `qwen2.5vl` n'est pas résident à froid ; ce WARN est acceptable avant smoke live.
|
||||
- Le test perf peut réchauffer qwen2.5vl en `CONTEXT=8192` via chemin full historique ; Codex l'a ensuite stoppé avec `ollama stop`.
|
||||
- Windows executor contient encore des `num_ctx=8192`, report D5-v3c.
|
||||
- Le worktree est large et sale : pas de commit/freeze sans tri Codex.
|
||||
- Ne jamais stocker de secret réel dans les docs ; utiliser placeholders.
|
||||
|
||||
## Ce que Codex attend de toi maintenant
|
||||
|
||||
Mission de reprise :
|
||||
|
||||
1. ACK que tu as repris le contexte.
|
||||
2. Vérifie que la structure de coordination est compréhensible.
|
||||
3. Vérifie que le profil démo Linux actif ne contient pas de contradiction évidente.
|
||||
4. Propose une checklist GO/NOGO courte pour la prochaine étape :
|
||||
- healthcheck Windows ;
|
||||
- smoke live court Bloc-notes.
|
||||
5. Signale tout NACK bloquant avant smoke live.
|
||||
|
||||
Contraintes :
|
||||
|
||||
- Pas de patch code.
|
||||
- Pas de restart service.
|
||||
- Pas de live replay.
|
||||
- Pas de D5-v3b.
|
||||
- Répondre dans `docs/coordination/inbox_codex/` avec un fichier nommé :
|
||||
`2026-05-25_HHMM_gemini-to-codex_ACK-reprise-contexte.md`
|
||||
|
||||
Auteur du prompt : Codex
|
||||
33
docs/handoffs/PROMPT_REPRISE_GEMINI_2026-05-25_SOIR.md
Normal file
33
docs/handoffs/PROMPT_REPRISE_GEMINI_2026-05-25_SOIR.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# Handoff Gemini — 2026-05-25 SOIR
|
||||
|
||||
## 1. État validé
|
||||
- **Performance** : C2d-bis validé (build vision skip ~270ms, speedup ~210x).
|
||||
- **Stabilisation VRAM** : D5-v3a (num_ctx=4096) colmaté sur les appels bbox legacy.
|
||||
- **Profil Démo Linux** : Actif (drop-ins systemd), validé par smoke live Bloc-notes (`16/16`).
|
||||
|
||||
## 2. Décisions actées
|
||||
- **Scénario Démo** : Passage d'un "waouh visuel" à une démo "métier" (lecture tableaux, extraction champs, saisie).
|
||||
- **Architecture** : Maintien strict de `qwen2.5vl` pour le runtime démo ; `qwen3.5` réservé au benchmark/audit.
|
||||
- **R6 EasyOCR** : Validé et conservé (respect de `RPA_EASYOCR_GPU=0`).
|
||||
|
||||
## 3. Travaux en attente
|
||||
- **Configuration Easily** : Définir les `ExtractionSchema` (champs patients) pour le nouveau scénario métier.
|
||||
- **Sanitisation Docs** : Nettoyage des secrets identifiés (G-P3).
|
||||
- **Benchmark VLM** : Exécution du protocole isolé qwen2.5 vs qwen3.5.
|
||||
|
||||
## 4. Risques bloquants seulement
|
||||
- **Secrets Git** : `docs/AUDIT_20260404.md` contient des clés API réelles. **Interdiction de push/publier sans purge.**
|
||||
|
||||
## 5. Fichiers importants
|
||||
- `core/extraction/field_extractor.py` (Cœur de la démo métier demain).
|
||||
- `agent_v0/server_v1/resolve_engine.py` (Contient le mini-fix VRAM).
|
||||
- `docs/coordination/registre/2026-05-25_decisions.md` (Source de vérité).
|
||||
|
||||
## 6. Prochaine action recommandée
|
||||
- **Lancer le Healthcheck Windows** (avec secret non persistant) pour valider l'agent avant le smoke métier Easily.
|
||||
|
||||
## 7. Ce qu'il ne faut pas faire demain
|
||||
- **Ne pas activer `RPA_GROUNDING_MODEL=qwen3.5:9b` globalement.**
|
||||
- **Ne pas modifier le code de `agent_v1` (Windows)** sans plan de déploiement validé.
|
||||
|
||||
Auteur : Gemini
|
||||
85
docs/handoffs/PROMPT_REPRISE_GEMINI_2026-05-26_MATIN.md
Normal file
85
docs/handoffs/PROMPT_REPRISE_GEMINI_2026-05-26_MATIN.md
Normal file
@@ -0,0 +1,85 @@
|
||||
# Prompt reprise Gemini — 2026-05-26 matin
|
||||
|
||||
- `Auteur`: Codex
|
||||
- `Date`: 2026-05-26 10:09 Europe/Paris
|
||||
- `Contexte`: reprise J-6 démo Easily 2026-06-01
|
||||
- `But`: permettre à Gemini de redémarrer vite sans relire tout l'historique
|
||||
|
||||
## État court
|
||||
|
||||
Le socle technique a été stabilisé hier soir :
|
||||
|
||||
- Smoke Bloc-notes `replay_sess_1c0bfb42` validé `16/16`, `0 failed`, `0 retries`, `0 pause Léa`.
|
||||
- Profil démo Linux actif :
|
||||
- `RPA_SKIP_INTENTION_ENRICHMENT=true`
|
||||
- `RPA_SKIP_BUILD_VISION=true`
|
||||
- `RPA_EASYOCR_GPU=0`
|
||||
- `AGENT_CHAT_ENABLE_OWL=0`
|
||||
- `AGENT_CHAT_ENABLE_UI_DETECTION=0`
|
||||
- Runtime démo maintenu sur `qwen2.5vl` bbox legacy.
|
||||
- `qwen3.5` reste benchmark/API préparatoire, pas runtime global.
|
||||
- Patch OCR Claude `_text_match_fuzzy` ACK par Codex : tolérance préfixe `Enregi` / `Enregistrer`, seuil conservé à 50%.
|
||||
- D5-v3c Windows `num_ctx=8192` reporté post-démo.
|
||||
|
||||
## État ce matin
|
||||
|
||||
Codex a distribué les tâches :
|
||||
|
||||
- Claude : `docs/coordination/inbox_claude/2026-05-26_0925_codex-to-claude_TACHES-reprise-easily-healthcheck-trace.md`
|
||||
- Gemini : `docs/coordination/inbox_gemini/2026-05-26_0925_codex-to-gemini_TACHES-reprise-demo-metier-risques.md`
|
||||
|
||||
Healthcheck local Codex :
|
||||
|
||||
- `rpa-streaming.service`: actif
|
||||
- `rpa-agent-chat.service`: actif
|
||||
- `5005/health`: healthy
|
||||
- `5004/api/status`: online
|
||||
- `ollama ps`: aucun modèle résident
|
||||
- `tools/lea_healthcheck.py`: WARN uniquement car `qwen2.5vl:7b-rpa` non résident
|
||||
- Windows non testé : pas de secret SSH disponible dans la session Codex
|
||||
|
||||
## Ce que Gemini doit faire maintenant
|
||||
|
||||
Répondre uniquement à cette tâche :
|
||||
|
||||
`docs/coordination/inbox_gemini/2026-05-26_0925_codex-to-gemini_TACHES-reprise-demo-metier-risques.md`
|
||||
|
||||
Réponse attendue dans :
|
||||
|
||||
`docs/coordination/inbox_codex/2026-05-26_HHMM_gemini-to-codex_REPONSE-demo-metier-risques.md`
|
||||
|
||||
Format attendu : court, ACK/NACK explicite, directement utilisable par Dom/Codex.
|
||||
|
||||
## Contenu attendu
|
||||
|
||||
1. **Scénario métier minimal Easily**
|
||||
- 6 à 10 actions maximum.
|
||||
- Montrer intelligence + facilité, pas performance technique.
|
||||
- Inclure au moins une lecture métier et une saisie contrôlée.
|
||||
- Ne pas reprendre mécaniquement un workflow historique VWB.
|
||||
|
||||
2. **Critères client de réussite**
|
||||
- 5 critères maximum, visibles par un client non technique.
|
||||
|
||||
3. **Risques bloquants démo**
|
||||
- Seulement les risques qui justifient NOGO avant capture/replay.
|
||||
- Distinguer technique, métier, conformité.
|
||||
|
||||
4. **Phrase qwen**
|
||||
- Une formulation courte expliquant pourquoi on ne migre pas `qwen3.5` globalement avant la démo.
|
||||
|
||||
## Contraintes non négociables
|
||||
|
||||
- Pas de runtime.
|
||||
- Pas de benchmark.
|
||||
- Pas de migration modèle.
|
||||
- Pas de replay live.
|
||||
- Pas de redéploiement Windows.
|
||||
- Pas de données patient réelles.
|
||||
- Ne pas bloquer sur secrets/docs : dette à traiter avant publication, pas avant préparation locale.
|
||||
|
||||
## Décision si contexte incomplet
|
||||
|
||||
Si Gemini manque d'information, il doit répondre avec les hypothèses minimales plutôt que relancer une enquête longue.
|
||||
|
||||
Auteur : Codex
|
||||
161
docs/handoffs/PROMPT_REPRISE_QWEN_2026-05-26_HANDOFF.md
Normal file
161
docs/handoffs/PROMPT_REPRISE_QWEN_2026-05-26_HANDOFF.md
Normal file
@@ -0,0 +1,161 @@
|
||||
# Handoff Qwen — Session 2026-05-26 soir → 2026-05-27
|
||||
|
||||
- `De`: Qwen
|
||||
- `Date`: 2026-05-26 22:30 Europe/Paris
|
||||
- `Contexte`: fin de session soir, reprise demain
|
||||
- `Équipe`: Dom (arbitre), Codex (coordinateur), Claude/Claudettes (collègues), Qwen (moi)
|
||||
|
||||
---
|
||||
|
||||
## État du projet — ce qui a été fait ce soir
|
||||
|
||||
### Session de reprise (20h44 → 22h30)
|
||||
|
||||
1. **Lecture du prompt de reprise** (`PROMPT_REPRISE_QWEN_2026-05-26_SOIR.md`)
|
||||
- Cadrage Aiva-vision / Léa / Aiva-urgence
|
||||
- Scénario démo v2 : collecte multi-onglets → transposition OnlyOffice
|
||||
- Limites non négociables Dom
|
||||
|
||||
2. **Première analyse** → `2026-05-26_2044_qwen-to-codex_REPRISE-analyse-scenario-v2.md`
|
||||
- ACK/NACK, 8-lignes résumé, 5 risques, 5 critères, 3 vérifications
|
||||
- Recommandation : dry-run contrôlé
|
||||
|
||||
3. **Deuxième passe après lecture 5 sources actives** → `2026-05-26_2050_qwen-to-codex_DELTA-apres-lecture-sources-actives.md`
|
||||
- Corrections : `/api/analyse` n'est pas un endpoint vision, orthographe `Easily`
|
||||
- 3 risques bloquants : extract_text_scroll, grounding maquette, sortie transposition
|
||||
- Proposition transposition : .xlsx via openpyxl, fallback .txt
|
||||
|
||||
4. **Audit technique dry-run + OnlyOffice** → `2026-05-26_2101_qwen-to-codex_AUDIT-technique-dryrun-onlyoffice.md`
|
||||
- 8 ancres critiques à valider
|
||||
- Seuils GO/NOGO par onglet
|
||||
- Fallbacks F1-F4
|
||||
|
||||
5. **Seuils et fallbacks après dry-run** → `2026-05-26_2113_qwen-to-codex_SEUILS-fallbacks-apres-dryrun.md`
|
||||
- Seuils affinés sur données réelles du dry-run
|
||||
- 4 fallbacks techniques documentés
|
||||
|
||||
6. **Rapport P0 OCR écran** → `2026-05-26_2117_qwen-to-codex_RAPPORT-P0-ocr-ecran.md`
|
||||
- Diagnostic pipeline OCR (EasyOCR, docTR, Tesseract)
|
||||
- Architecture multi-moteur par zone
|
||||
- Cold start vs interface apprise
|
||||
- **Mis à jour** : docTR CPU repositionné comme moteur de zonage P0
|
||||
|
||||
7. **Retour benchmark OCR** → `2026-05-26_2148_qwen-to-codex_RETOUR-benchmark-ocr-capitalisation.md`
|
||||
- Tesseract 11/11 IPP en 0,47s ✅
|
||||
- EasyOCR 8/11 IPP, bon sur texte continu
|
||||
- Preprocessing OpenCV : régression, pas d'amélioration
|
||||
- Architecture multi-moteur : chiffres→Tesseract, texte→EasyOCR, structure→docTR
|
||||
- 5 règles de capitalisation
|
||||
|
||||
8. **ACK apprentissage scroll sécurisé** → `2026-05-26_2149_qwen-to-codex_ACK-apprentissage-scroll-securise.md`
|
||||
- GO/NOGO sur marqueurs après scroll (CCMU, GEMSA, J12.1, Consultation externe)
|
||||
- Scroll réussi = geste + changement visuel + données relues
|
||||
|
||||
### Exploration web (solutions similaires)
|
||||
- Agent-S : réflexion in-context, Best-of-N sampling, grounding dédié
|
||||
- UI-TARS : grounding GUI par coordonnées, reinforcement learning
|
||||
- Claude Computer Use : 22% OSWorld, scroll/drag difficiles
|
||||
- OpenAI Operator : **abandonné** (août 2025)
|
||||
- Différentiateur Aiva-vision : "l'agent qui sait s'arrêter" — défendable en domaine réglementé
|
||||
|
||||
### Exploration codebase
|
||||
- Agent explorateur a scanné 880 fichiers Python, 39 sous-modules core/
|
||||
- Pipeline complet compris : capture → streaming → analyse → grounding → execution → replay
|
||||
|
||||
---
|
||||
|
||||
## État technique connu — décisions actives
|
||||
|
||||
### OCR
|
||||
- **EasyOCR brut** : moteur par défaut pour texte continu (inchangé)
|
||||
- **Tesseract** : patch appliqué pour IPP/chiffres (`extract_digits_tesseract_from_image()`, `extract_table(engine="tesseract")`)
|
||||
- **docTR CPU** : moteur de zonage pour band patient, synthèse, bboxes
|
||||
- **Preprocessing OpenCV** : ❌ reporté (régression mesurée)
|
||||
- **PaddleOCR** : ❌ post-démo
|
||||
- **VLM OCR texte** : ❌ exclu J-6
|
||||
|
||||
### Workflow
|
||||
- `Demo_urgence_3_db` / `wf_483910cdd851_1778750587` : step `extract_table` → Tesseract
|
||||
- BDD backupée : `workflows.db.backup_2026-05-26_ocr_tesseract_demo3`
|
||||
- 5 onglets préparés, live prudent possible en 4 si scroll échoue
|
||||
|
||||
### Démo
|
||||
- Cible : 2026-06-01
|
||||
- Répétition humaine : demain (Dom challengeur)
|
||||
- Dossier cible : `MOREL Catherine / IPP 25003284`
|
||||
- Sortie : `.xlsx` ouvert dans OnlyOffice (`/snap/bin/onlyoffice-desktopeditors`)
|
||||
- Profil démo Linux actif (flags skip vision, EasyOCR CPU)
|
||||
|
||||
---
|
||||
|
||||
## Documents actifs à connaître
|
||||
|
||||
### Sources actives prioritaires
|
||||
1. `docs/coordination/active/2026-05-26_cadrage-produit-aiva-vision.md`
|
||||
2. `docs/coordination/active/2026-05-26_arbitrage-dom-demo-reelle-poc.md`
|
||||
3. `docs/coordination/active/2026-05-26_principe-dom-apprentissage-fail-safe.md`
|
||||
4. `docs/coordination/active/2026-05-26_scenario-operatoire-demo-lea-v2-collecte-transposition.md`
|
||||
5. `docs/coordination/active/2026-05-26_audit-ancien-workflow-urgence-aiva.md`
|
||||
|
||||
### Documents ajoutés ce soir
|
||||
- `docs/coordination/active/2026-05-26_benchmark-ocr-local-captures-easily.md`
|
||||
- `docs/coordination/active/2026-05-26_arbitrage-scroll-vwb-reference.md`
|
||||
- `docs/coordination/active/2026-05-26_principe-apprentissage-scroll-securise.md`
|
||||
- `docs/coordination/active/2026-05-26_synthese-retours-claude-qwen-demo-v2-ocr.md`
|
||||
- `docs/coordination/active/2026-05-26_dryrun-easily-v2-captures-ocr-onlyoffice.md`
|
||||
- `docs/coordination/active/2026-05-26_arbitrage-sortie-transposition-onlyoffice.md`
|
||||
- `docs/coordination/active/2026-05-26_mission-p0-ocr-ecran-lea.md`
|
||||
- `docs/coordination/active/2026-05-26_mission-P0-ocr-ecran-qwen.md`
|
||||
|
||||
### Runbook
|
||||
- `docs/coordination/active/2026-05-26_runbook-repetition-humain-challenge-demo-v2.md`
|
||||
|
||||
---
|
||||
|
||||
## Fichiers produits ce soir (inbox_codex)
|
||||
|
||||
| Fichier | Type |
|
||||
|---------|------|
|
||||
| `2026-05-26_2044_qwen-to-codex_REPRISE-analyse-scenario-v2.md` | Analyse initiale |
|
||||
| `2026-05-26_2050_qwen-to-codex_DELTA-apres-lecture-sources-actives.md` | Delta sources |
|
||||
| `2026-05-26_2101_qwen-to-codex_AUDIT-technique-dryrun-onlyoffice.md` | Audit technique |
|
||||
| `2026-05-26_2113_qwen-to-codex_SEUILS-fallbacks-apres-dryrun.md` | Seuils/fallbacks |
|
||||
| `2026-05-26_2117_qwen-to-codex_RAPPORT-P0-ocr-ecran.md` | Rapport OCR (mis à jour) |
|
||||
| `2026-05-26_2137_qwen-to-codex_SYNTHESE-benchmark-5-onglets.md` | Synthèse collectif |
|
||||
| `2026-05-26_2148_qwen-to-codex_RETOUR-benchmark-ocr-capitalisation.md` | Retour benchmark |
|
||||
| `2026-05-26_2149_qwen-to-codex_ACK-apprentissage-scroll-securise.md` | ACK scroll |
|
||||
|
||||
---
|
||||
|
||||
## Ce qui reste à faire / à surveiller demain
|
||||
|
||||
1. **Répétition humaine** — Dom challengeur, critères GO/NOGO stricts
|
||||
2. **Résultats de la répétition** — ajuster si nécessaire
|
||||
3. **Patchs potentiels** — selon résultats répétition (scroll, grounding)
|
||||
4. **Préparation démo 2026-06-01** — J-5 après demain
|
||||
|
||||
---
|
||||
|
||||
## Mémoire construite ce soir
|
||||
|
||||
- `user/dom_constraints.md` — Limites non négociables Dom
|
||||
- `project/aiva_vision_demo.md` — Contexte démo Aiva-vision
|
||||
- `feedback/qwen_avoidances.md` — Ce que Qwen doit éviter
|
||||
- `feedback/dom_doctr_preference.md` — DocTR puissant pour zonage
|
||||
- `feedback/qwen_proactive_improvements.md` — Qwen doit proposer des idées
|
||||
- `project/aiva_vision_product_philosophy.md` — Collaborateur administratif, pas RPA
|
||||
- `reference/coordination_process.md` — Coordination par fichiers Markdown
|
||||
|
||||
---
|
||||
|
||||
## Notes personnelles Qwen
|
||||
|
||||
- Le positionnement produit est **collaborateur administratif supervisé**, pas RPA "boîte à clic"
|
||||
- Notre avantage : "l'agent qui sait s'arrêter" — pas un bug, une feature en domaine réglementé
|
||||
- Architecture : Aiva-vision (socle universel) + plugins métier (accélérateurs d'apprentissage)
|
||||
- Cycle Léa : apprendre → essayer → se planter → humain rattrape → consolide → indépendant
|
||||
- L'exploration web montre que personne n'a résolu le computer use fiable (Claude 22%, OpenAI a abandonné)
|
||||
|
||||
---
|
||||
|
||||
*Auteur : Qwen*
|
||||
208
docs/handoffs/PROMPT_REPRISE_QWEN_2026-05-26_SOIR.md
Normal file
208
docs/handoffs/PROMPT_REPRISE_QWEN_2026-05-26_SOIR.md
Normal file
@@ -0,0 +1,208 @@
|
||||
# Prompt reprise Qwen — Aiva-vision / Léa / Aiva-urgence
|
||||
|
||||
- `Auteur`: Codex
|
||||
- `Date`: 2026-05-26 20:41 Europe/Paris
|
||||
- `Contexte`: remplacement de Gemini comme collègue d'analyse
|
||||
- `Objectif`: permettre à Qwen de contribuer efficacement à la préparation démo 2026-06-01
|
||||
|
||||
## Ton rôle
|
||||
|
||||
Tu rejoins une équipe de coordination autour du projet **Aiva-vision**.
|
||||
|
||||
Tu ne pilotes pas le runtime. Tu es attendu comme collègue d'analyse technique et produit :
|
||||
|
||||
- relire les sources actives ;
|
||||
- détecter les contradictions ;
|
||||
- challenger les risques ;
|
||||
- proposer des checklists courtes ;
|
||||
- aider à préparer une démo réelle, solide et défendable pour les POC.
|
||||
|
||||
Tu dois répondre de façon opérationnelle, courte, structurée, sans tunnel de réflexion.
|
||||
|
||||
## Produit
|
||||
|
||||
### Aiva-vision
|
||||
|
||||
Aiva-vision est la plateforme générique.
|
||||
|
||||
Elle apprend des interfaces existantes, interagit avec elles, et permet de greffer des plugins métier.
|
||||
|
||||
Le positionnement est universel : santé aujourd'hui, aéronautique ou autres secteurs demain.
|
||||
|
||||
### Léa
|
||||
|
||||
Léa est l'agent d'interaction d'Aiva-vision.
|
||||
|
||||
Elle doit :
|
||||
|
||||
- observer l'écran ;
|
||||
- lire les données affichées ;
|
||||
- dialoguer avec l'utilisateur ;
|
||||
- demander confirmation ;
|
||||
- reporter des informations dans d'autres outils ;
|
||||
- apprendre quand elle ne sait pas ;
|
||||
- s'arrêter plutôt que faire une mauvaise action.
|
||||
|
||||
### Aiva-urgence
|
||||
|
||||
Aiva-urgence est le plugin métier santé utilisé pour la démo.
|
||||
|
||||
Il aide à traiter des dossiers urgences et à qualifier/requalifier un passage :
|
||||
|
||||
- Forfait Urgences ;
|
||||
- hospitalisation / requalification UHCD-MCO.
|
||||
|
||||
## Cadrage démo
|
||||
|
||||
Le client a déjà vu un vrai scénario filmé. Le 2026-06-01, il veut voir en vrai.
|
||||
|
||||
Dom impose :
|
||||
|
||||
- pas de trucage ;
|
||||
- pas de bidouillage ;
|
||||
- pas de succès simulé ;
|
||||
- pas de hardcode pour faire illusion ;
|
||||
- si Léa ne sait pas, elle s'arrête et demande de l'aide.
|
||||
|
||||
Dans le monde hospitalier, un arrêt sûr est préférable à une action dangereuse.
|
||||
|
||||
La démo est courte, mais elle prépare les POC.
|
||||
|
||||
## Scénario cible actuel
|
||||
|
||||
La base opérationnelle est :
|
||||
|
||||
`docs/coordination/active/2026-05-26_scenario-operatoire-demo-lea-v2-collecte-transposition.md`
|
||||
|
||||
Résumé :
|
||||
|
||||
1. Léa observe la liste des passages aux urgences.
|
||||
2. Léa décrit le tableau : colonnes, dossiers, statuts.
|
||||
3. Léa propose : traiter tous les dossiers ou un dossier en particulier.
|
||||
4. Dom choisit un dossier, probablement `MOREL Catherine / 25003284`.
|
||||
5. Léa ouvre le dossier.
|
||||
6. Léa parcourt les onglets :
|
||||
- `Motif d'admission`
|
||||
- `Examens cliniques`
|
||||
- `Imagerie`
|
||||
- `Notes médicales`
|
||||
- `Synthèse Urgences`
|
||||
7. Léa collecte les informations, y compris avec scroll/ascenseur si nécessaire.
|
||||
8. Léa demande où consigner les informations :
|
||||
- Excel ;
|
||||
- Word ;
|
||||
- base de données ;
|
||||
- autre plateforme/environnement.
|
||||
9. Léa reporte les informations collectées.
|
||||
10. Léa s'arrête pour validation humaine.
|
||||
|
||||
Le coeur de la démonstration : **lecture écran précise -> collecte multi-onglets -> choix utilisateur -> transposition dans un autre outil**.
|
||||
|
||||
## État technique connu
|
||||
|
||||
Validé :
|
||||
|
||||
- Smoke Bloc-notes `replay_sess_1c0bfb42` : `16/16`, `0 failed`, `0 retries`, `0 pause Léa`.
|
||||
- Profil démo Linux actif :
|
||||
- `RPA_SKIP_INTENTION_ENRICHMENT=true`
|
||||
- `RPA_SKIP_BUILD_VISION=true`
|
||||
- `RPA_EASYOCR_GPU=0`
|
||||
- `AGENT_CHAT_ENABLE_OWL=0`
|
||||
- `AGENT_CHAT_ENABLE_UI_DETECTION=0`
|
||||
- Runtime démo visuel : `qwen2.5vl` bbox legacy.
|
||||
- Ne pas migrer globalement vers `qwen3.5`.
|
||||
- `qwen3.5` reste benchmark/API préparatoire.
|
||||
- Patch OCR préfixe `Enregi` / `Enregistrer` ACK, seuil 50%.
|
||||
- EasyOCR GPU désactivé par défaut.
|
||||
- D5-v3c Windows `num_ctx=8192` reporté post-démo.
|
||||
|
||||
Maquette :
|
||||
|
||||
- service `rpa-mockup-easily.service` actif ;
|
||||
- endpoint `http://127.0.0.1:8765/healthz` OK ;
|
||||
- maquette Windows attendue : `http://192.168.1.40:8765/index.html`.
|
||||
|
||||
Important :
|
||||
|
||||
- `/api/analyse` utilise le modèle texte `qwen2.5:7b`, pas `qwen2.5vl`.
|
||||
- `qwen2.5vl:7b-rpa` sert au grounding visuel/replay.
|
||||
- l'ancien workflow `Urgence_aiva_demo` contient des briques utiles mais ne doit pas être rejoué tel quel.
|
||||
|
||||
## Documents à lire dans cet ordre
|
||||
|
||||
1. `docs/coordination/active/2026-05-26_cadrage-produit-aiva-vision.md`
|
||||
2. `docs/coordination/active/2026-05-26_arbitrage-dom-demo-reelle-poc.md`
|
||||
3. `docs/coordination/active/2026-05-26_principe-dom-apprentissage-fail-safe.md`
|
||||
4. `docs/coordination/active/2026-05-26_scenario-operatoire-demo-lea-v2-collecte-transposition.md`
|
||||
5. `docs/coordination/active/2026-05-26_audit-ancien-workflow-urgence-aiva.md`
|
||||
|
||||
Compléments utiles :
|
||||
|
||||
- `docs/coordination/inbox_codex/2026-05-26_1030_claude-to-codex_CHECKLIST-easily-capture-trace.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-26_1145_gemini-to-codex_REPONSE-demo-metier-risques.md`
|
||||
- `docs/handoffs/PROMPT_REPRISE_CODEX_2026-05-25_SOIR.md`
|
||||
|
||||
## Méthode de travail
|
||||
|
||||
Le repo utilise une coordination par fichiers Markdown.
|
||||
|
||||
Pour écrire à Codex :
|
||||
|
||||
`docs/coordination/inbox_codex/YYYY-MM-DD_HHMM_qwen-to-codex_SUJET.md`
|
||||
|
||||
Format attendu :
|
||||
|
||||
- `De`: Qwen
|
||||
- `A`: Codex
|
||||
- `Date`: horodatage Europe/Paris
|
||||
- `Statut`: ACK / NACK / proposition
|
||||
- réponse courte et actionnable.
|
||||
|
||||
Ne pas écrire de rapport long sauf demande explicite.
|
||||
|
||||
Toujours distinguer :
|
||||
|
||||
- faits vérifiés ;
|
||||
- hypothèses ;
|
||||
- recommandations ;
|
||||
- risques bloquants.
|
||||
|
||||
## Limites non négociables
|
||||
|
||||
- Pas de replay live sans GO explicite Dom.
|
||||
- Pas de redéploiement Windows.
|
||||
- Pas de restart service sans demande Codex/Dom.
|
||||
- Pas de migration globale modèle.
|
||||
- Pas de `RPA_GROUNDING_MODEL=qwen3.5:9b`.
|
||||
- Pas de patch runtime sans demande.
|
||||
- Pas de secret dans les docs.
|
||||
- Pas de patient réel : la maquette est fictive.
|
||||
- Pas de proposition cosmétique ou truquée.
|
||||
|
||||
## Ce que tu dois éviter
|
||||
|
||||
- Ne pas vendre une autonomie totale immédiate.
|
||||
- Ne pas réduire Aiva-vision à la maquette Easily.
|
||||
- Ne pas présenter Aiva-urgence comme tout le produit.
|
||||
- Ne pas proposer l'ancien `Urgence_aiva_demo` comme scénario tel quel.
|
||||
- Ne pas recommander une action risquée pour "faire passer la démo".
|
||||
- Ne pas inventer des capacités absentes du code.
|
||||
|
||||
## Première tâche attendue
|
||||
|
||||
Après lecture des documents prioritaires, produis un fichier :
|
||||
|
||||
`docs/coordination/inbox_codex/YYYY-MM-DD_HHMM_qwen-to-codex_REPRISE-analyse-scenario-v2.md`
|
||||
|
||||
Contenu demandé :
|
||||
|
||||
1. ACK/NACK du cadrage produit.
|
||||
2. Résumé du scénario v2 en 8 lignes maximum.
|
||||
3. 5 risques NOGO maximum.
|
||||
4. 5 critères de réussite client maximum.
|
||||
5. Les 3 points techniques à vérifier avant capture.
|
||||
6. Une seule recommandation prioritaire pour rendre Léa "super solide et agile" sur cette démo.
|
||||
|
||||
Ne propose pas encore de patch.
|
||||
|
||||
Auteur : Codex
|
||||
Reference in New Issue
Block a user