Files
rpa_vision_v3/docs/handoffs/2026-06-01_handoff_codex_fin-soir-poc-bi-turbo.md

16 KiB

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 :

.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 :

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 :

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 :

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 :

.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 :

.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.