Class_generator/DRS_IMPLEMENTATION_PLAN.md
StillHammer 194d65cd76 Implement strict DRS interface system for all 11 exercise modules
MAJOR ARCHITECTURE UPDATE - C++ Style Interface Enforcement

🔒 **Strict Interface System**:
- Created DRSExerciseInterface (10 required methods)
- Created ProgressSystemInterface (17 required methods)
- Updated ImplementationValidator with 3-phase validation
- Red screen errors for missing implementations

📚 **11/11 Exercise Modules Implemented**:
 VocabularyModule - Local flashcard validation
 TextAnalysisModule - AI text comprehension
 GrammarAnalysisModule - AI grammar correction
 TranslationModule - AI translation validation
 OpenResponseModule - AI open-ended responses
 PhraseModule - Phrase comprehension
 AudioModule - Audio listening exercises
 ImageModule - Visual comprehension
 GrammarModule - Grammar exercises
 TextModule - Reading comprehension
 WordDiscoveryModule - Vocabulary introduction

🎯 **Required Methods (All Modules)**:
- Lifecycle: init(), render(), destroy()
- Exercise: validate(), getResults(), handleUserInput()
- Progress: markCompleted(), getProgress()
- Metadata: getExerciseType(), getExerciseConfig()

📋 **Documentation**:
- Updated CLAUDE.md with complete interface hierarchy
- Created DRS_IMPLEMENTATION_PLAN.md (roadmap)
- Documented enforcement rules and patterns

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-08 13:43:25 +08:00

15 KiB
Raw Blame History

📋 DRS EXERCISE MODULES - IMPLEMENTATION PLAN

Goal: Réimplémenter tous les modules DRS pour respecter DRSExerciseInterface

Status: 🔴 0/11 modules conformes


📊 ÉTAT DES LIEUX - 11 Modules Existants

Modules AI (Score-Based) - 5 modules

Utilisent l'IA pour validation et scoring (0-100 points)

  1. TextAnalysisModule - Analyse de texte avec AI
  2. GrammarAnalysisModule - Correction grammaticale AI
  3. TranslationModule - Traduction validée par AI
  4. OpenResponseModule - Réponse libre évaluée par AI
  5. AudioModule - Analyse audio avec transcription

🎯 Modules Locaux (Non-AI) - 6 modules

Validation locale sans IA

  1. VocabularyModule - Flashcards spaced repetition
  2. WordDiscoveryModule - Découverte passive de vocabulaire
  3. PhraseModule - Pratique de phrases
  4. GrammarModule - Exercices de grammaire structurés
  5. TextModule - Lecture et compréhension de textes
  6. ImageModule - Description d'images

🎯 INTERFACE STRICTE - 10 Méthodes Requises

Chaque module DOIT implémenter:

Lifecycle (3 méthodes)

async init(config, content)      // Initialize module
async render(container)           // Render UI
async destroy()                   // Cleanup

Exercise Logic (3 méthodes)

async validate(userAnswer)        // Returns { isCorrect, score, feedback, explanation }
getResults()                      // Returns { score, attempts, timeSpent, completed, details }
handleUserInput(event, data)      // Handle user interactions

Progress Tracking (2 méthodes)

async markCompleted(results)      // Mark as completed + save progress
getProgress()                     // Returns { percentage, currentStep, totalSteps, itemsCompleted, itemsTotal }

Metadata (2 méthodes)

getExerciseType()                 // Returns type string
getExerciseConfig()               // Returns { type, difficulty, estimatedTime, prerequisites, metadata }

📈 ANALYSE PAR MODULE

1 VocabularyModule (43KB)

État: 🟡 Partiel (3/10 méthodes)

Existant:

  • async init() - Ligne 47
  • async validate(userInput, context) - Ligne 169
  • getProgress() - Ligne 220

Manquant:

  • async render(container) - Logique UI dispersée, pas de méthode centralisée
  • async destroy() - Pas de cleanup formel
  • getResults() - Résultats calculés à la volée, pas de méthode dédiée
  • handleUserInput(event, data) - Géré inline dans render
  • async markCompleted(results) - Sauvegarde dispersée
  • getExerciseType() - Type non formalisé
  • getExerciseConfig() - Config non structurée

Priorité: 🔥 HAUTE (module principal, bien structuré)


2 TextAnalysisModule (24KB)

État: 🟡 Partiel (2/10 méthodes)

Existant:

  • async validate(userInput, context) - Ligne 127 (AI validation)
  • getProgress() - Ligne 204

Manquant:

  • async init(config, content) - Pas d'init formelle
  • async render(container) - UI dispersée
  • async destroy() - Pas de cleanup
  • getResults() - Résultats inline
  • handleUserInput(event, data) - Pas formalisé
  • async markCompleted(results) - Pas formalisé
  • getExerciseType() - Manque
  • getExerciseConfig() - Manque

Priorité: 🔥 HAUTE (AI module, pattern pour autres)


3 GrammarAnalysisModule (26KB)

État: 🟡 Partiel (2/10 méthodes)

Existant:

  • async validate(userInput, context) - AI correction
  • getProgress() - Basique

Manquant: Mêmes que TextAnalysisModule

Priorité: 🔶 MOYENNE (similaire à TextAnalysis)


4 TranslationModule (30KB)

État: 🟡 Partiel (2/10 méthodes)

Existant:

  • async validate(userInput, context) - AI translation check
  • getProgress() - Basique

Manquant: Mêmes que TextAnalysisModule

Priorité: 🔶 MOYENNE (AI module standard)


5 OpenResponseModule (21KB)

État: 🟡 Partiel (2/10 méthodes)

Existant:

  • async validate(userInput, context) - AI evaluation
  • getProgress() - Basique

Manquant: Mêmes que TextAnalysisModule

Priorité: 🔶 MOYENNE (AI module générique)


6 WordDiscoveryModule (11KB)

État: 🟡 Partiel (1/10 méthodes)

Existant:

  • async init() - Basique

Manquant: Presque tout

Priorité: 🟢 BASSE (va fusionner avec VocabularyModule)


7 PhraseModule (31KB)

État: 🟡 Partiel (2/10 méthodes)

Existant:

  • async validate() - Local validation
  • getProgress() - Basique

Manquant: 8 méthodes

Priorité: 🔶 MOYENNE (local validation, pattern différent)


8 GrammarModule (74KB)

État: 🔴 Ancien (code legacy volumineux)

Existant: Code legacy, structure différente

Priorité: 🟢 BASSE (peut être remplacé par GrammarAnalysisModule)


9 TextModule (52KB)

État: 🔴 Ancien (code legacy)

Existant: Code legacy, structure différente

Priorité: 🟢 BASSE (peut être remplacé par TextAnalysisModule)


🔟 AudioModule (68KB)

État: 🟡 Partiel

Existant:

  • async validate() - Audio analysis

Priorité: 🔶 MOYENNE (module spécialisé)


11 ImageModule (69KB)

État: 🟡 Partiel

Existant:

  • async validate() - Image analysis

Priorité: 🔶 MOYENNE (module spécialisé)


🗺️ ROADMAP D'IMPLÉMENTATION

🎯 PHASE 1 - Modules Prioritaires (2 modules)

1.1 VocabularyModule PRIORITÉ #1

Pourquoi: Module le plus utilisé, bien structuré, pas d'IA

Tâches:

  1. Garder init(), validate(), getProgress() existants
  2. 🔨 Extraire logique UI dans render(container)
  3. 🔨 Créer destroy() pour cleanup
  4. 🔨 Créer getResults() pour statistiques finales
  5. 🔨 Créer handleUserInput(event, data) pour boutons
  6. 🔨 Créer markCompleted(results) pour sauvegarde
  7. 🔨 Créer getExerciseType()'vocabulary'
  8. 🔨 Créer getExerciseConfig() avec difficulty, time, etc.

Estimation: 2-3 heures


1.2 TextAnalysisModule PRIORITÉ #2

Pourquoi: Module AI de référence, pattern pour tous les modules AI

Tâches:

  1. Garder validate() et getProgress() existants
  2. 🔨 Créer init(config, content) pour setup
  3. 🔨 Créer render(container) pour UI
  4. 🔨 Créer destroy() pour cleanup
  5. 🔨 Créer getResults() avec AI score + metadata
  6. 🔨 Créer handleUserInput(event, data)
  7. 🔨 Créer markCompleted(results)
  8. 🔨 Créer getExerciseType()'text-analysis'
  9. 🔨 Créer getExerciseConfig()

Estimation: 2-3 heures


🔄 PHASE 2 - Modules AI (3 modules)

Pattern: Copier structure de TextAnalysisModule, adapter validation

2.1 GrammarAnalysisModule

  • Utiliser pattern de TextAnalysisModule
  • Adapter validate() pour grammar checking
  • Estimation: 1-2 heures

2.2 TranslationModule

  • Utiliser pattern de TextAnalysisModule
  • Adapter validate() pour translation
  • Estimation: 1-2 heures

2.3 OpenResponseModule

  • Utiliser pattern de TextAnalysisModule
  • Adapter validate() pour open responses
  • Estimation: 1-2 heures

📦 PHASE 3 - Modules Locaux (2 modules)

3.1 PhraseModule

  • Utiliser pattern de VocabularyModule
  • Validation locale (pas d'AI)
  • Estimation: 1-2 heures

3.2 Fusionner WordDiscoveryModule

  • Intégrer dans VocabularyModule (discovery mode)
  • Supprimer module séparé
  • Estimation: 1 heure

🎨 PHASE 4 - Modules Spécialisés (2 modules)

4.1 AudioModule

  • Audio player + transcription
  • AI analysis similaire TextAnalysisModule
  • Estimation: 2-3 heures

4.2 ImageModule

  • Image display + zoom
  • AI vision analysis
  • Estimation: 2-3 heures

🗑️ PHASE 5 - Cleanup Legacy (2 modules)

5.1 Supprimer GrammarModule

  • Remplacé par GrammarAnalysisModule (AI)
  • Archiver code si besoin

5.2 Supprimer TextModule

  • Remplacé par TextAnalysisModule (AI)
  • Archiver code si besoin

🛠️ STRATÉGIE D'IMPLÉMENTATION

Pattern 1: AI Modules (TextAnalysis, Grammar, Translation, OpenResponse, Audio, Image)

import DRSExerciseInterface from '../interfaces/DRSExerciseInterface.js';

class ModuleName extends DRSExerciseInterface {
    constructor() {
        super('ModuleName');
        this.config = null;
        this.content = null;
        this.container = null;
        this.startTime = null;
        this.attempts = 0;
        this.currentScore = 0;
    }

    async init(config, content) {
        this.config = config;
        this.content = content;
        this.startTime = Date.now();
    }

    async render(container) {
        this.container = container;
        // Render UI logic here
    }

    async destroy() {
        if (this.container) {
            this.container.innerHTML = '';
            this.container = null;
        }
    }

    async validate(userAnswer) {
        this.attempts++;
        // AI validation logic
        return {
            isCorrect: true/false,
            score: 0-100,
            feedback: '...',
            explanation: '...',
            metadata: {}
        };
    }

    getResults() {
        return {
            score: this.currentScore,
            attempts: this.attempts,
            timeSpent: Date.now() - this.startTime,
            completed: this.currentScore >= 70,
            details: { /* exercise-specific */ }
        };
    }

    handleUserInput(event, data) {
        // Handle button clicks, input changes, etc.
    }

    async markCompleted(results) {
        // Save to progress system
    }

    getProgress() {
        return {
            percentage: 100, // or calculate based on steps
            currentStep: 1,
            totalSteps: 1,
            itemsCompleted: this.currentScore >= 70 ? 1 : 0,
            itemsTotal: 1
        };
    }

    getExerciseType() {
        return 'module-type';
    }

    getExerciseConfig() {
        return {
            type: this.getExerciseType(),
            difficulty: 'medium',
            estimatedTime: 5,
            prerequisites: [],
            metadata: this.config
        };
    }
}

Pattern 2: Local Modules (Vocabulary, Phrase)

import DRSExerciseInterface from '../interfaces/DRSExerciseInterface.js';

class ModuleName extends DRSExerciseInterface {
    constructor() {
        super('ModuleName');
        this.items = [];
        this.currentIndex = 0;
        this.results = [];
    }

    async init(config, content) {
        this.config = config;
        this.items = content.items; // Extract items
        this.startTime = Date.now();
    }

    async render(container) {
        this.container = container;
        this._renderCurrentItem();
    }

    async destroy() {
        this.container.innerHTML = '';
        this.container = null;
    }

    async validate(userAnswer) {
        // Local validation (no AI)
        const isCorrect = userAnswer === this.items[this.currentIndex].answer;
        this.results.push({ isCorrect, answer: userAnswer });

        return {
            isCorrect,
            score: isCorrect ? 100 : 0,
            feedback: isCorrect ? 'Correct!' : 'Incorrect',
            explanation: '...',
            metadata: {}
        };
    }

    getResults() {
        const correctCount = this.results.filter(r => r.isCorrect).length;
        const score = Math.round((correctCount / this.results.length) * 100);

        return {
            score,
            attempts: this.results.length,
            timeSpent: Date.now() - this.startTime,
            completed: this.currentIndex >= this.items.length,
            details: { correctCount, totalCount: this.items.length }
        };
    }

    handleUserInput(event, data) {
        // Handle next/previous/answer buttons
    }

    async markCompleted(results) {
        // Save progress
    }

    getProgress() {
        return {
            percentage: Math.round((this.currentIndex / this.items.length) * 100),
            currentStep: this.currentIndex + 1,
            totalSteps: this.items.length,
            itemsCompleted: this.results.filter(r => r.isCorrect).length,
            itemsTotal: this.items.length
        };
    }

    getExerciseType() {
        return 'module-type';
    }

    getExerciseConfig() {
        return {
            type: this.getExerciseType(),
            difficulty: 'easy',
            estimatedTime: this.items.length * 0.5,
            prerequisites: [],
            metadata: this.config
        };
    }
}

CHECKLIST DE VALIDATION

Pour chaque module réimplémenté:

Implémentation

  • Hérite de DRSExerciseInterface
  • Implémente les 10 méthodes requises
  • Méthodes retournent le bon format
  • Pas d'erreur au startup (validation stricte)

Lifecycle

  • init() initialise correctement config et content
  • render() crée l'UI dans le container
  • destroy() nettoie proprement (remove listeners, clear DOM)

Exercise Logic

  • validate() retourne { isCorrect, score, feedback, explanation }
  • getResults() retourne stats complètes
  • handleUserInput() gère tous les events

Progress

  • markCompleted() sauvegarde dans ProgressTracker
  • getProgress() retourne progression en temps réel

Metadata

  • getExerciseType() retourne string unique
  • getExerciseConfig() retourne config complète

Testing

  • Module se charge sans erreur
  • UI s'affiche correctement
  • Validation fonctionne (AI ou local)
  • Progress se sauvegarde
  • Cleanup fonctionne (pas de memory leak)

📊 ESTIMATION TOTALE

Phase Modules Temps Estimé
Phase 1 2 (Vocabulary, TextAnalysis) 4-6h
Phase 2 3 (Grammar, Translation, OpenResponse) 3-6h
Phase 3 2 (Phrase, WordDiscovery fusion) 2-3h
Phase 4 2 (Audio, Image) 4-6h
Phase 5 2 (Cleanup legacy) 1h
TOTAL 11 modules 14-22h

🎯 ORDRE DE PRIORITÉ

  1. 🔥 VocabularyModule - Module principal, pas d'AI, bien structuré
  2. 🔥 TextAnalysisModule - Template pour tous modules AI
  3. 🔶 GrammarAnalysisModule - Copie pattern TextAnalysis
  4. 🔶 TranslationModule - Copie pattern TextAnalysis
  5. 🔶 OpenResponseModule - Copie pattern TextAnalysis
  6. 🔶 PhraseModule - Local validation, copie pattern Vocabulary
  7. 🔶 AudioModule - Spécialisé, similaire TextAnalysis
  8. 🔶 ImageModule - Spécialisé, similaire TextAnalysis
  9. 🟢 WordDiscoveryModule - Fusionner dans Vocabulary
  10. 🟢 GrammarModule (legacy) - Supprimer/archiver
  11. 🟢 TextModule (legacy) - Supprimer/archiver

🚀 PROCHAINES ÉTAPES

Immédiat (à faire maintenant):

  1. Valider ce plan d'implémentation
  2. Commencer par VocabularyModule (priorité #1)
  3. Une fois validé, dupliquer pattern pour autres modules

Validation Plan:

  • Plan approuvé ?
  • Ordre de priorité correct ?
  • Temps estimé réaliste ?
  • Pattern de code acceptable ?

Status: 📝 PLAN PRÊT - AWAITING APPROVAL