Files
rpa_vision_v3/docs/handoffs/2026-06-01_handoff_codex_p0-p1-lea-session-propre.md

7.4 KiB

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 :

{
    "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