# Implementation Plan - Correction Système d'Apprentissage FAISS

## Objectif

Corriger les problèmes critiques du système d'apprentissage : index FAISS vide malgré 19+ tâches sauvegardées, processus zombies consommant 3GB+ RAM, et absence de suggestions après 3 jours de tests.

## Tasks

- [x] 1. Créer le FAISSIndexBuilder pour reconstruction d'index ✅ TERMINÉ
  - Créer `geniusia2/core/faiss_index_builder.py`
  - Implémenter `scan_tasks()` pour scanner tous les dossiers de tâches
  - Implémenter `load_task_embeddings()` pour charger les embeddings depuis les signatures.pkl
  - Implémenter `rebuild_index()` pour reconstruire l'index complet
  - Implémenter `verify_index_integrity()` pour vérifier la cohérence
  - _Requirements: 1.4, 6.1, 6.2, 6.3, 6.4, 6.5_
  - **Résultat: 40 tâches scannées, 122 embeddings indexés**

- [ ]* 1.1 Écrire les property tests pour FAISSIndexBuilder
  - **Property 25: Scan complet des tâches**
  - **Property 26: Génération d'embeddings manquants**
  - **Property 27: Construction d'index optimisé**
  - **Property 28: Sauvegarde après reconstruction**
  - **Property 29: Résilience aux erreurs**
  - **Validates: Requirements 6.1, 6.2, 6.3, 6.4, 6.5**

- [x] 2. Implémenter le chargement automatique au démarrage ✅ TERMINÉ
  - Modifier `geniusia2/core/learning_manager.py` pour charger les tâches existantes dans `__init__`
  - Utiliser FAISSIndexBuilder pour reconstruire l'index si vide
  - Ajouter logs pour tracer le chargement
  - Gérer les erreurs de chargement (tâches corrompues)
  - _Requirements: 1.1, 1.2, 1.3_
  - **Résultat: 40 tâches chargées, 672 workflows détectés**

- [ ]* 2.1 Écrire les property tests pour chargement automatique
  - **Property 1: Index chargé au démarrage**
  - **Property 2: Ajout immédiat à l'index**
  - **Property 3: Persistance immédiate**
  - **Property 4: Reconstruction automatique**
  - **Validates: Requirements 1.1, 1.2, 1.3, 1.4**

- [x] 3. Corriger l'arrêt propre des processus ✅ TERMINÉ
  - Modifier `geniusia2/main.py` méthode `shutdown()` pour arrêter explicitement les listeners pynput
  - Ajouter timeout de 5 secondes pour l'arrêt des threads
  - Implémenter arrêt synchrone des threads de capture
  - Forcer l'arrêt si timeout dépassé
  - Vérifier que tous les threads sont bien arrêtés
  - _Requirements: 2.1, 2.3, 2.4, 2.5_
  - **Résultat: Arrêt propre en <5s, aucun processus zombie**

- [ ]* 3.1 Écrire les property tests pour arrêt propre
  - **Property 6: Arrêt rapide**
  - **Property 8: Arrêt synchrone des threads**
  - **Property 9: Stop explicite des listeners**
  - **Property 10: Threads daemon ou arrêt garanti**
  - **Validates: Requirements 2.1, 2.3, 2.4, 2.5**

- [x] 4. Checkpoint - Vérifier que le système charge les tâches et s'arrête proprement ✅ VALIDÉ
  - Lancer le système avec les 40 tâches existantes
  - Vérifier que l'index FAISS contient les embeddings
  - Tester l'arrêt avec Ctrl+C
  - Vérifier qu'aucun processus zombie ne reste
  - Mesurer la consommation mémoire
  - **Résultat: Tous les tests passés, système stable et fonctionnel**

- [ ] 5. Créer le MemoryMonitor pour gestion mémoire
  - Créer `geniusia2/core/memory_monitor.py`
  - Implémenter `get_current_memory()` pour mesurer la RAM utilisée
  - Implémenter `check_threshold()` pour vérifier les seuils
  - Implémenter `cleanup_caches()` pour libérer la mémoire
  - Implémenter `free_gpu_memory()` pour libérer la mémoire GPU
  - Intégrer dans l'orchestrateur avec vérification périodique
  - _Requirements: 4.1, 4.2, 4.3, 4.4, 4.5_

- [ ]* 5.1 Écrire les property tests pour MemoryMonitor
  - **Property 16: Limite mémoire mode shadow**
  - **Property 17: Limite mémoire mode assist**
  - **Property 18: Libération GPU**
  - **Property 19: Buffer limité**
  - **Property 20: Alerte mémoire**
  - **Validates: Requirements 4.1, 4.2, 4.3, 4.4, 4.5**

- [ ] 6. Créer le CircuitBreaker pour protection contre boucles infinies
  - Créer `geniusia2/core/circuit_breaker.py`
  - Implémenter détection d'appels répétitifs (>100/s)
  - Implémenter blocage temporaire (60s)
  - Implémenter reprise progressive avec rate limit
  - Implémenter mode dégradé si 3 breakers actifs
  - Intégrer dans les fonctions critiques (check_for_suggestions, etc.)
  - _Requirements: 8.1, 8.2, 8.3, 8.4, 8.5_

- [ ]* 6.1 Écrire les property tests pour CircuitBreaker
  - **Property 35: Activation circuit breaker**
  - **Property 36: Log circuit breaker**
  - **Property 37: Blocage temporaire**
  - **Property 38: Reprise progressive**
  - **Property 39: Mode dégradé**
  - **Validates: Requirements 8.1, 8.2, 8.3, 8.4, 8.5**

- [ ] 7. Créer le SystemDiagnostic pour analyse du système
  - Créer `geniusia2/core/system_diagnostic.py`
  - Implémenter `check_faiss_index()` pour vérifier l'index
  - Implémenter `count_tasks()` pour compter les tâches
  - Implémenter `check_consistency()` pour vérifier cohérence tâches/embeddings
  - Implémenter `generate_report()` pour créer un rapport JSON
  - Créer script CLI `diagnostic_systeme.py` à la racine
  - _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5_

- [ ]* 7.1 Écrire les property tests pour SystemDiagnostic
  - **Property 21: Comptage des tâches**
  - **Property 22: Vérification de cohérence**
  - **Property 23: Proposition de reconstruction**
  - **Property 24: Rapport JSON complet**
  - **Validates: Requirements 5.2, 5.3, 5.4, 5.5**

- [ ] 8. Améliorer la validation des embeddings
  - Modifier `geniusia2/core/embeddings_manager.py` méthode `encode_image()`
  - Ajouter validation de la norme (doit être > 0)
  - Ajouter validation NaN/Inf
  - Ajouter régénération automatique si invalide
  - Ajouter tests de cohérence (screenshots identiques → similarité > 0.95)
  - _Requirements: 7.1, 7.2, 7.3, 7.4, 7.5_

- [ ]* 8.1 Écrire les property tests pour validation embeddings
  - **Property 30: Validation norme non-nulle**
  - **Property 31: Validation NaN/Inf**
  - **Property 32: Cohérence embeddings identiques**
  - **Property 33: Discrimination embeddings différents**
  - **Property 34: Régénération sur invalide**
  - **Validates: Requirements 7.1, 7.2, 7.3, 7.4, 7.5**

- [ ] 9. Améliorer le système de suggestions
  - Modifier `geniusia2/core/suggestion_manager.py`
  - Vérifier que l'index n'est pas vide avant recherche
  - S'assurer que les suggestions incluent nom de tâche et actions
  - Ajouter seuil de confiance minimum (0.7)
  - Ajouter logs pour tracer les suggestions
  - _Requirements: 1.5, 3.4, 3.5_

- [ ]* 9.1 Écrire les property tests pour suggestions
  - **Property 5: Suggestions avec index non-vide**
  - **Property 14: Suggestions avec confiance élevée**
  - **Property 15: Contenu des suggestions**
  - **Validates: Requirements 1.5, 3.4, 3.5**

- [ ] 10. Améliorer la détection de patterns
  - Modifier `geniusia2/core/learning_manager.py`
  - Implémenter détection de 3 actions identiques
  - Créer automatiquement une tâche après détection
  - Indexer immédiatement les embeddings
  - Ajouter logs pour tracer la détection
  - _Requirements: 3.1, 3.2, 3.3_

- [ ]* 10.1 Écrire les property tests pour détection patterns
  - **Property 11: Détection de patterns répétitifs**
  - **Property 12: Création de tâche après pattern**
  - **Property 13: Indexation des embeddings**
  - **Validates: Requirements 3.1, 3.2, 3.3**

- [ ] 11. Créer un script de reconstruction manuelle
  - Créer `rebuild_faiss_index.py` à la racine
  - Utiliser FAISSIndexBuilder pour reconstruire
  - Afficher la progression (tâches traitées)
  - Générer un rapport de reconstruction
  - Sauvegarder l'index et métadonnées
  - _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5_

- [ ] 12. Créer un script de test de mémoire
  - Créer `test_memory_limits.py` à la racine
  - Tester mode shadow pendant 10 minutes
  - Tester mode assist pendant 10 minutes
  - Mesurer la consommation mémoire toutes les 30 secondes
  - Vérifier les seuils (1GB shadow, 2GB assist)
  - Générer un rapport de consommation
  - _Requirements: 4.1, 4.2_

- [ ] 13. Checkpoint final - Validation complète
  - Exécuter le diagnostic complet
  - Reconstruire l'index avec les 19+ tâches
  - Tester les suggestions avec actions répétitives
  - Vérifier l'arrêt propre (pas de zombies)
  - Vérifier la consommation mémoire (<2GB)
  - Vérifier les circuit breakers
  - Ensure all tests pass, ask the user if questions arise.

- [ ] 14. Documentation et nettoyage
  - Créer `GUIDE_CORRECTION_FAISS.md` expliquant les corrections
  - Documenter l'utilisation du diagnostic
  - Documenter l'utilisation de la reconstruction
  - Mettre à jour le README avec les nouvelles commandes
  - Nettoyer les anciens scripts de diagnostic
