# HANDOFF — Session 2026-05-09 (clôture) Rédigé le 2026-05-09 15:46 CEST. ## 1. ÉTAT FACTUEL DU REPO - Branche : `feature/qw-suite-mai` - 10 commits du jour (les plus récents en HEAD) : - `df5ad5933` docs(dette): MAJ DETTE-010 (config trouvé, divergences) + création DETTE-014 (smart_resize calé sur mauvaise référence) - `bfbf0f9c3` refactor(grounding): centralise parser bbox_2d - `ecc5a233a` docs(dette): création DETTE-013 env tests dev local - `4df1ba577` docs(dette): création DETTE-011 bug cv2 Python 3.12 - `0d7bcd18a` feat(grounding): module smart_resize officiel Qwen3-VL - `e9702b4df` docs(dette): création DETTE-010 vérif preprocessor_config Qwen3-VL - `293e54b4e` docs(dette): création DETTE-012 (vLLM hors scope) + maj DETTE-010 (cible Transformers + AWQ) - `e0b47e451` docs(refs): commit groupé docs de référence session 2026-05-08 - `5dc20cc85` docs(dette): rectif mapping DETTE-005 + DETTE-008/009 + investigation mémoire visuelle orpheline - `88ed103de` docs(dette): création registre dette technique + 7 entrées rétroactives - Pas de push (tous commits locaux) - Working directory : modifications antérieures intactes (héritées du handoff 2026-05-08, hors scope cette session) - Checkpoint Qwen3-VL-8B-Instruct fp16 téléchargé localement (`~/.cache/huggingface/hub/models--Qwen--Qwen3-VL-8B-Instruct/`, 17 GB, 16/16 fichiers, 0 `.incomplete`) - Total : 2 modules purs créés (smart_resize, bbox_parser) + 100% coverage (58 tests unitaires) + registre dette créé avec 14 entrées + −96 lignes nettes sur resolve_engine.py. ## 2. DÉCISIONS PRISES CETTE SESSION - **Cible backend grounding** : Transformers direct (pas vLLM — vLLM absent de la machine, infra inexistante, cf. DETTE-012). Cohérent avec `core/grounding/server.py` déjà câblé en Transformers et service systemd `rpa-grounding.service`. - **Modèle cible** : `Qwen/Qwen3-VL-8B-Instruct` fp16 (16 GB safetensors) + chargement Transformers avec `BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4")` à la volée (~5-6 GB VRAM runtime). Pas d'AWQ officiel disponible pour Qwen3-VL-8B (`Qwen/Qwen3-VL-8B-Instruct-AWQ` → 404 HF, repo inexistant). - **T2A v2 désactivé** durant la session pour libérer la VRAM partagée du RTX 5070 (12 GB). - **Strict no-op sémantique sur le refactor parser bbox_2d** (commit 2/5 `bfbf0f9c3`) : préservation des contrats sémantiques des 3 sites d'appel via paramètre `formats=` (pas seulement préservation comportementale). - **Investigation DETTE-010 en fin de journée a révélé une divergence majeure** : `factor` effectif probable 32 (vs 28 hypothèse matin) car `patch_size=16` dans le `preprocessor_config.json` du checkpoint Qwen3-VL-8B-Instruct ; convention `size.longest_edge`/`shortest_edge` différente de `min_pixels`/`max_pixels`. → Arrêt avant commit 3/5 du fix DETTE-006 pour reprendre demain matin frais avec investigation propre, plutôt que coder à l'aveugle sur fin de journée. ## 3. PROBLÈMES OUVERTS (par criticité) - **[P0] DETTE-006 — Bug d'échelle pixel grounding** fix en cours, 2/5 commits faits (smart_resize + refactor parser), 3/5 bloqués par DETTE-010 + DETTE-014 (alignement convention Qwen3-VL effective). - **[P1] DETTE-010 IN_PROGRESS** — investigation `Qwen2VLImageProcessorFast` + sémantique `longest_edge`/`shortest_edge` + `patch_size=16` requise demain matin. Bloquant Étape 2 (validation grounding isolée). Date revue : 2026-05-10. - **[P1] DETTE-014 OPEN** — module `core/grounding/smart_resize.py` calé sur `Qwen2VLImageProcessor` (factor=28, max=1_003_520) alors que le checkpoint utilise `Qwen2VLImageProcessorFast` avec `patch_size=16` (factor probable 32). À réaligner après DETTE-010. - **[P2] Autres dettes (P2/P3)** listées dans `docs/DETTE_TECHNIQUE.md` (DETTE-001 à 014) — pas urgent, revues par défaut +14 jours sauf P1 listées ci-dessus. ## 4. PROCHAINE ACTION CONCRÈTE (demain matin) - **Étape A** : lire `transformers.models.qwen2_vl.image_processing_qwen2_vl_fast` pour comprendre les défauts effectifs (`min_pixels`, `max_pixels`, interaction `patch_size × merge_size` → `factor`) et la sémantique de `size.longest_edge`/`shortest_edge` (côté max ou produit total ?). - **Étape B** : tester le chargement runtime via `AutoProcessor.from_pretrained('Qwen/Qwen3-VL-8B-Instruct')` puis inspecter ses attributs (`processor.image_processor.size`, `processor.image_processor.patch_size`, etc.) pour confirmer la convention réelle au runtime. - **Étape C** : tirer la convention validée et décider de l'ajustement de `core/grounding/smart_resize.py` : - soit ajuster `FACTOR_DEFAULT` / bornes du module existant (et adapter les tests), - soit créer un nouveau module dédié Qwen3-VL si la sémantique diverge trop (ex: `core/grounding/smart_resize_qwen3.py`). - **Étape D** : commit 3/5 du fix DETTE-006 avec convention validée (les 4 sites de `resolve_engine.py` parseront enfin par `resized_w/h` au lieu de `small_w/h`). - **Critère de succès Étape 2** (validation grounding isolée) : sur fixture `data/training/live_sessions/bg_DESKTOP-58D5CAC_windows/shots/heartbeat_1773792436.png` (2560×1600), bouton OK localisé à `cx ≈ 0.45-0.55` (vs 0.17 le 8 mai). - **Critère de succès Étape 3** (replay e2e) : workflow rpa complet sur 1 dossier MOREL sans clic aberrant, latence acceptable. ## 5. CE QUE LE PROCHAIN CLAUDE DOIT LIRE (ordre) - @docs/handoffs/2026-05-09_session_audit.md (ce fichier) - @docs/DETTE_TECHNIQUE.md (en particulier DETTE-010 et DETTE-014, P1 bloquants) - @/home/dom/.cache/huggingface/hub/models--Qwen--Qwen3-VL-8B-Instruct/snapshots/0c351dd01ed87e9c1b53cbc748cba10e6187ff3b/preprocessor_config.json (config réel du checkpoint, pivot pour DETTE-010) - @core/grounding/smart_resize.py (module à éventuellement réaligner) - @core/grounding/bbox_parser.py (commit 2/5 OK strict no-op, à conserver) - @docs/MIGRATION_VLM_PLAN_2026-05-09.md (plan original toujours valide pour la suite, mais cible backend ajustée : Transformers direct, pas vLLM) - @docs/handoffs/2026-05-08_session_audit.md (handoff veille, pour contexte si besoin) ## 6. RÈGLES DE LA JOURNÉE À RESPECTER DEMAIN - Maximes Dom : « il faut prendre le temps d'aller vite », « rustine interdite », « on lit la doc avant de faire quoi que ce soit ». - **Investigation infra** : ne jamais conclure à l'absence d'un composant sans avoir vérifié N endroits possibles (PATH, autres venvs, conda, Docker, système, autres caches). Leçon DETTE-012 vLLM : conclusion hâtive « stack vLLM absente » sur fouille partielle, rectifié par Dom. Présenter les vérifications négatives comme partielles et demander confirmation, pas comme une absence définitive. - **Refactor de code mature** : préserver les contrats sémantiques en plus des comportements techniques. Leçon refactor parser Occ 3 + Occ 4 : strict no-op via paramètre `formats=` plutôt que centralisation laxe qui élargit silencieusement les formats acceptés. - **Validation explicite par étape**, stop pour relecture diff sur tout code prod. Pas d'enchaînement A→B→C sans GO entre les étapes structurantes. - **Datage** : forcer `date '+%Y-%m-%d %H:%M %Z'` avant tout commentaire daté. - **Désactivation contrôle** : flag env + log WARNING + entrée dette + revue +14j (et registre central `docs/DETTE_TECHNIQUE.md`). - **Git destructeur** : jamais en combo, atomique, validation explicite. - **Un commit = une intention** (respecté sur les 10 commits du jour). ## 7. NOTES POUR LA PROCHAINE SESSION - **Action pré-prochaine session — hygiène git** : commit `chore(docs): déplacement business_docs vers archive/` pour consolider en 1 commit la suppression à la racine (ANALYSE_MOAT_RPA_VISION_V3.md, PITCH_INVESTISSEURS_RPA_VISION_V3.md → `D` dans `git status`) et l'ajout dans `archive/business_docs/` (encore en `?? archive/`). Pas de DETTE associée, juste hygiène. - **Mécanisme de délestage VRAM rpa_v3** : à documenter dans le module concerné (path à retrouver), trace de fonctionnalité transversale. - **Bug cv2 (DETTE-011) + env tests (DETTE-013)** : la batterie `pytest tests/unit/` entière n'est pas exécutable en dev local sans configuration spécifique (`RPA_API_TOKEN` ou `RPA_AUTH_DISABLED` + version cv2 compatible Python 3.12). Prévoir une session dédiée pour rétablir l'exécution complète ou découpler les tests purs des tests qui chargent `agent_v0.server_v1.api_stream`. - **Audit exhaustif modules orphelins** (au-delà périmètre AUDIT serveur) : mentionné dans `docs/INVESTIGATION_MEMOIRE_VISUELLE_ORPHELINE_2026-05-09.md` §6, dette identifiée sans numéro réservé. À instruire post-démo Kerella. - **DETTE-010 + DETTE-014 sont la première chose à débloquer demain matin**. Sans cet alignement, le commit 3/5 du fix DETTE-006 et l'Étape 2 (validation grounding isolée) sont impossibles à instruire correctement.