Retrait de l'état global toxique :
- analyze() : kwargs-only enable_ocr, enable_ui_detection, session_id
- Ne mute JAMAIS self pour les flags (variables locales + branches)
- _resolve_ocr_instance() / _resolve_ui_detector_instance() : lecture seule
- _init_lock par instance pour lazy init concurrent safe
- session_id par appel, plus via mutation singleton
Avant : ExecutionLoop mutait analyzer._ocr, _ui_detector,
_ocr_initialized, _ui_detector_initialized pour désactiver OCR/UI.
Deux loops partageant le singleton se polluaient mutuellement.
Après : deux loops partageant l'analyzer sont complètement isolés.
Preuve par TestAnalyzerIsolationBetweenLoops (3 tests).
Singleton get_screen_analyzer() préservé — garde uniquement les
ressources lourdes, plus de contexte d'exécution.
9 nouveaux tests (3 isolation + 6 kwargs-only/lazy-init).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>