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
- Ne pas repartir sur VWB comme produit.
- POC court terme d'abord : capture humaine fiable, replay precis, apprentissage consolide, test humain.
- L'audit global ne doit pas devenir une phase longue. Il sert a aller plus vite.
- Regle anti-reimplementation globale projet, pas seulement apprentissage :
- chercher l'existant,
- raccorder/consolider si possible,
- remplacer seulement si l'existant est clairement insuffisant.
- 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.
- Les humains sont imparfaits :
- hesitations,
- erreurs de clic,
- retours arriere,
- corrections,
- pauses,
- bruit ecran. Lea doit distinguer action utile, parasite, correction, hesitation.
- 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.
- 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.
- 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 :
docs/coordination/inbox_codex/2026-06-01_qwen-to-codex-claude_LEVEE-GO-P1-SEMANTIQUE.md- Qwen confirme GO P1-SEMANTIQUE, conditionnel leve.
docs/coordination/inbox_codex/2026-06-01_2240_claude-to-codex_LEVEE-GO-conditionnel-Qwen-P1-SEMANTIQUE.md- Claude livre executor + timeout OmniParser + tests.
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.
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.
docs/POC/AUDIT_CHAINE_APPRENTISSAGE_2026-06-01.md- Audit detaille de la chaine apprentissage.
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.
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.pyagent_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-sessiongardes/testes.- Strict default/unknown quand registry non vide.
Tests annonces/constates plus tot :
30 passed, 1 xfailed, puis Qwen a annonce32 passed, 1 xfailed.
Attention :
api_stream.pyavait 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/persisten fin deapi_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.pyagent_chat/handlers/__init__.pyagent_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_idajoute dansSessionStateet 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.pycore/semantic/__init__.py- endpoint
/api/v1/lea/screen/analyzedansapi_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_framessynchrone dans endpoint async,- timeout OmniParser declare mais pas applique.
Claude a corrige :
run_in_executordans 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.txtexiste, 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_5a2e96sess_20260529T154427_f95956
Codex a confirme que ces dossiers existent :
data/training/live_sessions/DESKTOP-58D5CAC_windows/sess_20260529T144652_5a2e96data/training/live_sessions/DESKTOP-58D5CAC_windows/sess_20260529T154427_f95956data/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 :
- Ajouter log critique avec
exc_info=Truedans_enqueue_to_worker. - Re-enqueue les deux sessions du 29 mai si elles existent.
- 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.pycore/learning/feedback_processor.pycore/learning/target_memory_store.pycore/learning/versioned_store.pycore/learning/learning_manager.pycore/training/training_data_collector.pycore/training/offline_trainer.pycore/training/model_validator.pycore/training/session_analyzer.pycore/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_validatorsont deja branches ailleurs.
Ordre conseille apres R6 :
- verifier signatures reelles,
- hook minimal apres session enrichie,
- hook feedback shadow -> FeedbackProcessor,
- seulement ensuite enrichir payloads
confidence,uncertainties[],repetition_count, statutshypothesis/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.pyn'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.pycore/federation/faiss_global.pycore/embedding/clip_embedder.pycore/embedding/state_embedding_builder.pycore/visual/visual_embedding_manager.pyagent_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.docxest modifie par Dom : ne pas toucher.api_stream.pya 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 :
- P0 revocation Qwen,
- P1 persist Claude,
- P1 shadow + learn/start + bouton Windows,
- P1 semantic,
- 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
- Lire ce handoff.
- Lire les derniers
inbox_codexapres 22:20. - Si Claude a livre R6, lire sa livraison.
- 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 :
- Lire livraison.
- Demander ou lire revue Qwen.
- 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 :
ContinuousLearnerhook minimal apres session enrichie.FeedbackProcessorhook minimal depuis feedback shadow.VersionedStore/TargetMemoryStoresi deja requis par les hooks.- 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.mdsi 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.