# Handoff fin de journée — 12 mai 2026 **Période couverte** : 09:16 → 19:30 (avec coupure déjeuner ~13:00-13:45 et vélo 18:00-19:27) **Démo cible** : 15 mai 2026 (3 jours restants) **Statut global** : très en avance sur planning matinal, qualité non-minimale visée maintenue. --- ## TL;DR — À lire en premier demain matin 1. **PRIORITÉ #1 demain** : bug d'orchestration skip ord 13 découvert en fin de journée. Criticité HAUTE pour démo. Voir fiche dédiée `_archives/handoff_evidence_20260512_1940/DETTE_S1_skip_ord13_orchestration.md` + trace JSON `replay_fb0c9882_state.json`. 2. **PRIORITÉ #2 demain** : reprise du mini-bench décision sur 11 dossiers POC dès que gemma4:31b-cloud répond (avorté aujourd'hui après 2-3 dossiers sur timeout Ollama Cloud 503). 3. **Acquis majeur du jour** : A.1 paste validé techniquement (65s → 2s sur step #25, 762 chars). Gain visible énorme sur la démo. 4. **2 commits décision en local non pushés** : à arbitrer demain matin avant de reprendre. --- ## État des chantiers à la coupure ### Chantier décision (`build_dpi_enriched` + garde-fous) | Étape | Statut | |---|---| | Brief V3 finalisé (8 arbitrages tranchés) | ✅ `docs/handoffs/2026-05-12_brief_S1_build_dpi_enriched.md` | | Étape 0 (vérif source données) | ✅ close sur inférence statique + capture MOREL | | Commit 1 `build_dpi_enriched` (commit `9872f4510`) | ✅ local, **NON pushé** | | Tests : golden MOREL + négatif + intégration | ✅ 41/41 verts, 0 régression sur 37 tests existants | | Commit "bench" `bench_t2a_dryrun.py` + `t2a_mappings.py` (commit `f2212e77e`) | ✅ local, **NON pushé** | | Mini-bench exécution sur 11 dossiers | 🔴 avorté après 2-3 dossiers (timeout gemma4:31b-cloud) | | Commit 2 du brief (garde-fou serveur) | ❌ non démarré (dépend du bench) | | Dry-run E2E Demo_urgence_2 sur MOREL | ❌ non démarré | **Note vocabulaire** : "commit bench" ≠ "commit 2 du brief". Le commit 2 du brief = garde-fou Python ↔ LLM dans `_handle_t2a_decision_action`, pas encore commencé. **État git branche décision** : ``` HEAD : f2212e77e (feat: bench + mappings) — local ↑ 9872f4510 (feat: build_dpi_enriched) — local 2 commits en avance sur origin/feature/qw-seuite-mai ``` ### Chantier vitesse (A.1 paste + B parallélisation) | Étape | Statut | |---|---| | Baseline run 4 instrumentée (timing) | ✅ 381s mesurés, goulots identifiés | | Bascule γ → δ (A.1 d'abord, B après) | ✅ acté en cours de journée sur chiffres réels | | A.1 paste implémenté (executor.py + DB) | ✅ | | Test E2E run 6 — preuve gain | ✅ step #25 paste 762 chars en 2,02s vs 65s baseline | | qwen3-next:80b-cloud testé qualité | ✅ run 8 dec + resume_patient cliniquement propres (1336 chars) — **switch ponctuel pour test, pas durable** | | B parallélisation Ollama | ❌ annulé (A.1 plus rentable, β reporté [S3]) | | Run 8 final | 🔴 cassé sur orchestration (bug skip ord 13 découvert) | --- ## Décisions et arbitrages tranchés aujourd'hui ### Chantier décision (8 arbitrages) 1. **CCMU/GEMSA dans FAITS_CALCULÉS** : libellé COMPLET, pas code seul (test Ollama a montré que gemma4 hallucine, gemma3 confabule pire — cf. constat empirique ci-dessous) 2. **Priorité IAO** : extraite et injectée dans FAITS_CALCULÉS (champ `motif.priorite` du data.js) 3. **Mapping TERRAIN_VERS_T2A** : 4 entrées validées sur grep data.js (Consultation externe, Hospitalisation, Sortie après surveillance UHCD, Transfert intra-hospitalier). "Retour structure d'origine" (dossier IPP 25012257, BRUNEL Henri) laissé non mappé → question à poser à Pauline/Amina. 4. **Mise en garde "depuis 23h"** : Option A pure (pas d'avertissement injecté), valeur diagnostique du dry-run préservée 5. **Décision médicale terrain** : extraite dans metadata mais PAS injectée dans FAITS_CALCULÉS (scénario C) → audit indépendant LLM + comparaison serveur a posteriori 6. **Paramètres LLM bench** : Option 2 (temperature=0, seed=42 côté bench uniquement) → vérifier empiriquement si gemma4:31b-cloud respecte le seed 7. **Filet `data_quality_warning`** : flagging incohérences cliniques détectables sans correction (anonymisation data.js statut incertain) 8. **Test négatif** = test de dégradation gracieuse (input dégradé, pas test qui doit échouer) ### Chantier vitesse - **Bascule γ → δ** : A.1 paste d'abord (gain 94s, effort 30-45min, risque faible) avant B parallélisation (gain révisé 55-65s après mesure honnête). Bascule justifiée par recalcul ratio parallélisme (1,27× et non 2,7× après séparation cold-start) - **Paste opt-in** : workflows non-Citrix explicitement marqués `paste: true`, fallback char-by-char par défaut - **Source de vérité parallélisation Ollama** : mesure 2 appels CHAUDS en série vs parallèle, pas comparaison cold-start vs warm (piège initial corrigé) --- ## Constats empiriques importants ### Ollama Cloud sur nomenclatures PMSI françaises (test direct) - **gemma4:31b-cloud** : connaissance partielle, fausse dans les détails (CCMU/GEMSA confondus avec logique GHM "ressources consommées"), mais reste dans le champ correct (classification individuelle). Le bloc *Thinking* montre une auto-conscience d'incertitude. - **gemma3:27b-cloud** : **confabulation pure**. Invente l'acronyme GEMSA ("Gestion des Mouvements de Patients et des Stocks"), transforme CCMU en plan blanc niveau crise sanitaire, présente avec assurance maximale et lien officiel inventé. Beaucoup plus dangereux que gemma4 (pas d'auto-doute). - **Conséquence design** : libellé complet PMSI obligatoire dans FAITS_CALCULÉS quel que soit le modèle. - **Conséquence choix modèle** : NE PAS envisager gemma3:27b comme fallback gemma4 sur T2A. Pour fallback post-démo : viser modèle médical français spécialisé (DrBERT/edsnlp) ou fine-tuning. - **Méthode validée** : test Ollama direct 30 sec avant tout pari sur la connaissance d'un modèle, y compris pour changement de modèle (pas seulement initialisation). ### Méthodes sanctuarisées 1. **"Sauvegarde + fork avant chantiers parallèles"** — appliqué ce matin spontanément, a payé toute la journée. À sanctuariser dans CLAUDE.md comme prérequis avant tout chantier multi-branches. 2. **"Instrumenter avant optimiser"** — appliqué 2 fois aujourd'hui, 2 corrections de cap décisives : - Baseline run 4 a transformé "97% opaque" en goulots chiffrés - Mesure parallélisme v2 a corrigé un ratio 2,7× → 1,27× et fait basculer l'arbitrage γ → δ 3. **"Test Ollama direct avant pari sur connaissance LLM"** — applicable à toute classification spécialisée (PMSI, CIM-10, CCAM, etc.) 4. **"Mesurer 2 conditions comparables, jamais cold-start vs warm"** — piège classique de mesure de parallélisme corrigé en cours de journée. 5. **`git status` systématique en début de session Claude Code** — incident commit composite (4 fichiers backend + 2 fichiers frontend stagés non liés) corrigé proprement par Option A reset+restore. À sanctuariser pour éviter récidive. --- ## Dette tracée [S3] (à traiter post-démo) ### Critique pour démo 15 mai - **DETTE [S1] skip ord 13 orchestration** : bug d'orchestration découvert run 8, voir fiche dédiée `_archives/handoff_evidence_20260512_1940/DETTE_S1_skip_ord13_orchestration.md`. Criticité HAUTE. NOT REPRO 100% (runs 2-3 ce matin OK). Investigation : `replay_engine.py` + `api_stream.py`, mécanisme "server side action" et transition serveur → visuel → serveur. - **DETTE [S2] faux positif click_anchor "Codage"** (run 1 matin) — peut-être lié à S1 ? - **Robustesse Ollama Cloud en démo** : NON COUVERT. Panne 503 vécue aujourd'hui (gemma4:31b temporarily overloaded). Si panne pendant démo le 15 → fallback nécessaire. Options : modèle local sur RTX 5070 12GB (qualité dégradée Q3/Q2 inacceptable sur gemma4:31b), démo enregistrée en backup, ou autre modèle local équivalent. ### Optimisations post-démo - **B parallélisation Ollama** : reporté, gain 55-65s sur 381s, à reprendre après stabilisation démo - **Verify post-click** : trop coûteux (15-25s gaspillés sur 8 clics) - **Warmup gemma4:31b-cloud** : pour neutraliser cold-start (~40s) - **Re-test A.1 paste isolé sur gemma4:31b-cloud post-incident** Ollama - **Crop OCR zone visible utile** : gain 10-20s ### Décision qualité - **Mapping TERRAIN_VERS_T2A** : libellé "Retour structure d'origine" (dossier 25012257 BRUNEL Henri) à arbitrer cliniquement avec Pauline/Amina - **Email Pauline/Amina** : à finaliser une fois résultats mini-bench disponibles. Questions candidates : 1. "Retour structure d'origine" → quelle catégorie T2A ? 2. Règle 3/3 ET (doc DIM établissement) vs règle ATIH 2/3 (PROMPT 3 actuel) — confirmation pratique ? 3. Critère 2 (surveillance prolongée) — signaux concrets attendus dans DPI ? 4. Critère 3 (examens/actes) — un acte CCAM suffit, ou acte ET examen ? 5. "Sortie après surveillance UHCD" vs "Hospitalisation" vs "Transfert intra-hospitalier" — tous REQUALIFICATION ? 6. Bandeau UI "à valider manuellement" si LLM confiance "faible" ? - **CCMU + GEMSA + mode de venue + diagnostic principal** dans FAITS_CALCULÉS : intégré (élargissement Option Élargie pris en cours de journée) - **Override vérité-terrain dans `_handle_t2a_decision_action`** (finding #1 audit) : à traiter en parallèle de commit 2 ### Méthode - Sanctuariser dans CLAUDE.md : `git status` initial, sauvegarde+fork avant chantiers parallèles, instrumenter avant optimiser, test Ollama direct, mesure comparable - **Communication Dom ↔ Claude Code × 2 ↔ Claude session principale** : déperdition d'information observée (3 arbitrages décision retransmis 2 fois). Pattern à formaliser : Dom pointe Claude Code vers fichiers de référence rédigés en session principale (brief md) plutôt que paraphraser en chat. ### Asymétrie mémoire Claude session principale ↔ Dom À traiter en session dédiée (pas en passant) : Dom maintient une mémoire active des patterns de Claude entre sessions, Claude n'a accès qu'aux notes uploadées ponctuellement. Asymétrie connue, signalée à plusieurs reprises aujourd'hui. --- ## Points ouverts à reprendre demain en priorité ### Matin (priorité par ordre) 1. **Investigation bug skip ord 13** (orchestration) — priorité HAUTE. Voir fiche dédiée + trace JSON. Investigation `replay_engine.py` et `api_stream.py`, mécanisme server-side action et transition serveur → visuel → serveur. 2. **Arbitrage push commits décision** (`9872f4510` + `f2212e77e`) — décider si on push avant ou après le bench complet. 3. **Reprise mini-bench décision** sur 11 dossiers POC dès que gemma4:31b-cloud répond (ou décider de basculer sur gemma4 local si panne persiste). Sortie attendue : tableau récap convergence durée + décision sur 10 dossiers utiles. 4. **Commit 2 du brief décision** (garde-fou serveur) après bench validé. 5. **Dry-run E2E Demo_urgence_2 sur MOREL** après commit 2. ### Aprem (si temps) - Email Pauline/Amina (rédigé sur la base des résultats bench) - Réécriture éventuelle PROMPT 3 selon résultats convergence - Investigation faux positif click_anchor "Codage" (run 1 matin) — possiblement même cause que skip ord 13 - B parallélisation si tout le reste est stable ### Décision stratégique en suspens - **Fallback Ollama Cloud pour démo 15 mai** : à arbitrer. Options à instruire : gemma4 local (qualité quantization à vérifier), qwen3-next:80b (testé qualité aujourd'hui sur run 8), démo enregistrée backup. --- ## Annexes - Trace bug skip ord 13 : `_archives/handoff_evidence_20260512_1940/replay_fb0c9882_state.json` (129 Ko, 1167 lignes) - Fiche dette dédiée : `_archives/handoff_evidence_20260512_1940/DETTE_S1_skip_ord13_orchestration.md` - Synthèse Claude Code journée : `_archives/handoff_evidence_20260512_1940/SYNTHESE_journee_handoff.md` - Sceau démo matin : tag git `demo-stable-2026-05-12` + tarball 23 Go + SHA256 vérifiés - Backups DB : chaîne de 4 sur la journée (`backups_db_chain.txt`) --- **Coupe nette ce soir. Pas d'autre tentative. Le vélo a coupé proprement, ne replonge pas dans le code après 20h.**