Z3 — Validation HITL — Skip / Ignore behavior
États chapter · Gabarits bloqués · Comportement parent actif
La validation HITL est optionnelle pour l'élève mais critique pour la qualité. Les comportements de skip/ignore doivent être explicites : un item non validé ne doit jamais générer un exercice trompeur.
Z3-AC01 — Gabarits bloqués sur item validation_required non résolu
|
|
| Lot 0 |
P2 |
| GIVEN |
Un item avec validation_required = true, status = PENDING, de type KNOWLEDGE avec tags ['calcul', 'unites']. |
| WHEN |
Le moteur de lazy generation compose une session. |
| THEN |
Les gabarits PC.FORMULA.APPLY, PC.UNITS.CONVERT, PC.FORMULA.ISOLATE et tout gabarit avec question_type = NUMERIC sont exclus de l'éligibilité pour cet item. Seuls GEN.KNOW.DEF_SHORT et GEN.KNOW.FLASH_MCQ restent éligibles. |
NOTE : Un item non validé peut apparaître en session avec des gabarits simples (rappel/reconnaissance) mais jamais avec des gabarits exigeant précision numérique.
Z3-AC02 — Action 'Confirmer' sur ValidationTask
|
|
| Lot 0 |
P2 |
| GIVEN |
Une ValidationTask sur un item avec suggestion = 'ρ = m / V', status PENDING. |
| WHEN |
L'élève (ou le parent actif) clique sur 'Confirmer'. |
| THEN |
L'item est mis à jour : validation_required = false, confidence = max(item.confidence, 0.85). La ValidationTask passe en status = RESOLVED_CONFIRMED. Les Questions liées à cet item dans le cache sont invalidées → régénération lazy au prochain accès. |
Z3-AC03 — Action 'Corriger' sur ValidationTask
|
|
| Lot 0 |
P2 |
| GIVEN |
Une ValidationTask sur un item. L'élève saisit une correction. |
| WHEN |
L'élève soumet la correction. |
| THEN |
L'item est mis à jour avec le contenu corrigé. validation_required = false. confidence = 1.0 (correction humaine explicite). La ValidationTask passe en RESOLVED_CORRECTED. Le cache questions de cet item est invalidé. |
Z3-AC04 — Action 'Je ne sais pas' sur ValidationTask
|
|
| Lot 0 |
P2 |
| GIVEN |
Une ValidationTask sur un item. L'élève choisit 'Je ne sais pas'. |
| WHEN |
L'action est soumise. |
| THEN |
validation_required reste true. status = DEFERRED_BY_STUDENT. L'item est retiré de la file de validation élève. Une ValidationTask admin est créée avec priorité haute. Les gabarits bloqués restent bloqués (cf. Z3-AC01). |
Z3-AC05 — Action 'Ignorer' sur ValidationTask
|
|
| Lot 0 |
P2 |
| GIVEN |
Une ValidationTask sur un item non critique (impact faible). L'élève choisit 'Ignorer'. |
| WHEN |
L'action est soumise. |
| THEN |
validation_required reste true. status = IGNORED_BY_STUDENT. L'item est exclu des sessions et des contrôles blancs tant que non résolu. Il n'apparaît PAS dans la carte de maîtrise de l'élève comme UNKNOWN (il est masqué pour éviter la confusion). |
NOTE : 'Ignorer' ≠ 'Je ne sais pas'. Ignorer exclut l'item du flux pédagogique. 'Je ne sais pas' le délègue à l'admin pour correction.
Z3-AC06 — Chapitre utilisable si 0 validations effectuées
|
|
| Lot 0 |
P1 |
| GIVEN |
Un chapitre avec 6 ValidationTasks PENDING. L'élève n'en traite aucune. |
| WHEN |
L'élève lance le diagnostic initial. |
| THEN |
Le diagnostic est accessible. Les items avec validation_required = true ne génèrent que des gabarits de rappel simple (Z3-AC01). Un bandeau informatif indique '6 zones à vérifier — vos exercices seront plus précis après vérification' sans bloquer la progression. |
Z3-AC07 — Résolution validation → régénération ciblée uniquement
|
|
| Lot 0 |
— |
| GIVEN |
Un chapitre avec 20 questions en cache. Une ValidationTask sur l'item X est résolue. |
| WHEN |
La résolution est enregistrée. |
| THEN |
Seules les questions dont item_id = X sont invalidées dans le cache. Les 20 − N questions liées aux autres items ne sont pas invalidées. La régénération est lazy : les nouvelles questions pour X sont créées au prochain appel de composition de session. |
Z3-AC08 — Parent actif : max 3 ValidationTasks par semaine
|
|
| Lot 0 |
— |
| GIVEN |
Un parent en mode actif. Le chapitre a 8 ValidationTasks PENDING. |
| WHEN |
Le système prépare les validations à soumettre au parent. |
| THEN |
Seules les 3 ValidationTasks avec le score d'impact le plus élevé sont envoyées au parent cette semaine. Les 5 autres sont gardées en file pour la semaine suivante. Le parent ne reçoit jamais plus de 3 demandes de validation par semaine. |
Z3-AC09 — Aucune ValidationTask si confiance > seuil sur tous les blocs
|
|
| Lot 0 |
P2 |
| GIVEN |
Un chapitre dont tous les blocs ont confidence ≥ 0.85 et aucun terme du lexique pack critique n'est détecté comme ambigu. |
| WHEN |
Le pipeline J0 finalise la détection d'incertitudes. |
| THEN |
Aucune ValidationTask n'est créée. La file de validation est vide. L'élève passe directement au diagnostic sans étape de validation. Tous les items ont validation_required = false. |
Z3-AC10 — Vérification croisée LLM (fidelity check)
|
|
| Lot 0 |
P2 |
| GIVEN |
Le pipeline J0 a généré un ou plusieurs items à partir de blocs OCR. L'étape 7b (vérification croisée LLM) s'exécute pour évaluer la fidélité de chaque item au texte source. |
| WHEN |
L'étape 7b produit un résultat (score ou timeout). |
| THEN |
Trois issues possibles : |
|
Fidèle (score ≥ 0.7) — Ex : item KNOWLEDGE term = "photosynthèse", keywords = ["chloroplaste", "lumière", "CO2"] issu d'un bloc OCR contenant « La photosynthèse est le processus par lequel les plantes utilisent la lumière, le CO2 et l'eau pour produire de la matière organique dans les chloroplastes ». Le fidelity_score est ≥ 0.7. fidelity_flag = null. L'item n'est pas ajouté à la file de validation pour cette raison. |
|
Halluciné (score < 0.5) — Ex : item KNOWLEDGE term = "respiration cellulaire" issu d'un bloc OCR qui parle uniquement de photosynthèse (le terme n'apparaît pas dans le texte source). Le fidelity_score est < 0.5. fidelity_flag = 'low'. validation_required = true. Une ValidationTask est créée avec source = 'fidelity_check' et suggestion = "L'item ne correspond pas au texte source — vérifier". L'item est restreint aux templates simples (GEN.KNOW.DEF_SHORT, GEN.KNOW.FLASH_MCQ). |
|
Timeout — Le service LLM de vérification ne répond pas dans le délai imparti. L'item est conservé avec fidelity_score = null et fidelity_flag = null. Le pipeline continue normalement (comportement dégradé = confiance OCR seule, pas de blocage). L'incident est loggé pour monitoring. |
Z3-AC11 — Cohérence intra-chapitre (doublons et contradictions)
|
|
| Lot 0 |
— |
| GIVEN |
Le pipeline a généré plusieurs items dans le même chapitre. L'étape 7c (cohérence intra-chapitre) s'exécute. |
| WHEN |
L'étape 7c détecte des doublons ou des contradictions. |
| THEN |
Deux cas possibles : |
|
Doublons (même term) — Ex : Item A (term = "chloroplaste", confidence = 0.9) et Item B (term = "chloroplaste", confidence = 0.7). L'item de plus faible confidence (Item B) est archivé automatiquement (archived = true). L'item A est conservé. Aucune ValidationTask n'est créée (résolution automatique). Le Mastery associé à Item B, s'il existe, est transféré à Item A. |
|
Contradictions — Ex : Item A (term = "densité", définition = « masse divisée par le volume ») et Item B (term = "masse volumique", définition = « volume divisé par la masse »). La détection LLM identifie une contradiction. Les deux items sont flaggés coherence_flag = 'contradiction' et validation_required = true. Une ValidationTask est créée pour chacun avec source = 'coherence_check' et suggestion = "Contradiction détectée avec l'item [autre_item_id] — vérifier les définitions". Les deux items sont restreints aux templates simples jusqu'à résolution. |
Z3-AC12 — Feedback élève : signalement d'erreur sur un item
|
|
| Lot 0 |
— |
| GIVEN |
L'élève est en session de révision. Une question affiche « La photosynthèse produit du méthane » (item mal extrait). |
| WHEN |
L'élève appuie sur « Signaler une erreur » et saisit optionnellement « C'est de l'O2, pas du méthane ». |
| THEN |
Une ValidationTask est créée avec source = 'student_report', student_note = "C'est de l'O2, pas du méthane", priority = HIGH (signalement élève toujours prioritaire). L'item reste utilisable en mode dégradé (templates simples uniquement). Si une ValidationTask existe déjà pour cet item, le signalement est ajouté comme note complémentaire sur la tâche existante (pas de doublon). La réponse de l'élève à cette question n'est pas comptée dans le score Mastery (item sous investigation). |
Z3-AC13 — Détection anomalie par taux d'échec
|
|
| Lot 0 |
— |
| GIVEN |
Le job quotidien de détection d'anomalies s'exécute sur les items ayant reçu au moins 5 tentatives. |
| WHEN |
Un item présente un taux d'échec ≥ 70% sur au moins 5 tentatives. |
| THEN |
Deux règles s'appliquent : |
|
Seuil de détection — Ex : un item en état FRAGILE a reçu 6 tentatives sur les 7 derniers jours, dont 5 échecs (taux d'échec = 83%). anomaly_flag = 'high_failure_rate' est positionné. validation_required = true. Une ValidationTask est créée avec source = 'anomaly_detection' et suggestion = "Taux d'échec anormal (83%) — vérifier l'item". L'item est restreint aux templates simples jusqu'à vérification. |
|
Exclusion des items UNKNOWN — Ex : un item en état UNKNOWN a reçu 5 tentatives, toutes en échec (taux = 100%). L'item n'est pas flaggé anomaly_flag car il est en état UNKNOWN (taux d'échec élevé attendu à la première exposition). Aucune ValidationTask créée. L'item continue à être proposé normalement pour permettre l'apprentissage. Le job ne considère que les items en état FRAGILE, OK ou SOLID. |
NOTE : Ces 4 mécanismes (vérification croisée, cohérence, feedback élève, détection anomalie) forment une boucle de qualité continue : la vérification croisée et la cohérence agissent en amont (pipeline J0), le feedback élève en temps réel, et la détection par taux d'échec en aval (post-usage). Un item peut cumuler plusieurs flags simultanément.
Z3-AC14 — Rétractation d'une validation erronée (parent ou élève)
|
|
| Lot 0 |
— |
| GIVEN |
Un parent (ou un élève) a confirmé un item via Z3-AC02 (confidence boostée à 0.85). Trois jours plus tard, l'élève signale une erreur sur ce même item (Z3-AC12) ou le taux d'échec dépasse le seuil (Z3-AC13). |
| WHEN |
Une nouvelle ValidationTask est créée pour un item déjà RESOLVED_CONFIRMED. |
| THEN |
L'item repasse en validation_required = true. La confidence est ramenée à min(item.confidence, 0.7) (annulation du boost). Les gabarits sont re-restreints aux templates simples. La ValidationTask originale est marquée REOPENED avec une note « Rouvert suite à [source : signalement élève / anomalie détectée] ». L'admin est notifié avec priorité HIGH. Les Mastery updates effectués entre la confirmation et la réouverture ne sont pas annulés (pas de rétroactivité). |
NOTE : C'est le filet de sécurité pour les validations erronées. Un parent qui confirme « ρ = m/V » alors que l'OCR a mal lu « ρ = m × V » verrouille une erreur en base. Sans rétractation, l'enfant étudie du contenu faux avec une confidence de 0.85. Le signalement élève (Z3-AC12) ou la détection d'anomalie (Z3-AC13) servent de second regard. La non-rétroactivité des Mastery est un compromis pragmatique : corriger le contenu suffit, recalculer le passé serait trop complexe et déstabilisant.
Z3-AC15 — Détection de réponses trop rapides (anti-clicking aveugle)
|
|
| Lot 0 |
— |
| GIVEN |
L'élève répond à une question MCQ en moins de 2 secondes (temps entre affichage de la question et soumission de la réponse). |
| WHEN |
La réponse est soumise. |
| THEN |
La réponse est acceptée et corrigée normalement (pas de blocage UX). Mais elle est marquée rapid_response = true dans l'Attempt. Le Mastery state est mis à jour uniquement si la réponse est incorrecte (régression appliquée normalement). Si la réponse est correcte : consecutive_successes n'est pas incrémenté et la transition mastery n'est pas appliquée. L'item reste dans l'état actuel et sera re-proposé à la prochaine session. Un compteur rapid_correct_count est maintenu par session. Si rapid_correct_count ≥ 3 dans une même session, un message non-bloquant apparaît : « Prends ton temps pour bien lire les questions — tes réponses rapides ne comptent pas pour ta progression. » |
NOTE : Un élève qui clique random sur des MCQ a 25% de chance de répondre juste (4 options). Sans ce AC, 2 MCQ correctes par chance suffisent pour passer de UNKNOWN à OK (Z1-AC01/AC02). Ce AC neutralise les réponses trop rapides côté progression sans bloquer l'UX (l'élève peut toujours cliquer, mais ça ne "compte" pas positivement). La régression sur réponse incorrecte est maintenue car elle incite à réfléchir plutôt qu'à cliquer au hasard. Le seuil de 2 secondes est calibré sur le temps minimum de lecture d'une question MCQ (titre + 4 options).
Z3-AC16 — Récupération des items « Ignoré » par l'élève
|
|
| Lot 0 |
— |
| GIVEN |
L'élève a cliqué « Ignorer » sur 4 items lors de la validation HITL (Z3-AC05). Ces items sont en status = IGNORED et exclus des sessions. L'élève réalise plus tard (ou après explication du parent) que ces items étaient utiles. |
| WHEN |
L'élève accède à la carte de leçon du chapitre et consulte les items « ignorés » (section dédiée en bas de la carte, libellée « Points non vérifiés »). |
| THEN |
Chaque item ignoré est affiché avec son term ou résumé et un bouton « Réactiver ». En cliquant « Réactiver », l'élève revoit la suggestion de l'IA et peut choisir : « C'est bon » (→ Z3-AC02, confidence boostée), « À corriger » (→ Z3-AC03, correction), ou « Je ne sais pas » (→ Z3-AC04, admin). L'item réactivé repasse en circuit normal (éligible aux sessions). Si les 4 items sont ignorés, un nudge discret apparaît dans la carte de leçon : « 4 points n'ont pas été vérifiés — ils ne seront pas dans tes exercices. » Ce nudge disparaît si l'élève réactive ou confirme son choix de les laisser ignorés. Un bouton « Tout laisser ignoré » masque le nudge définitivement pour ce chapitre. |
NOTE : Un ado de 13 ans qui ne comprend pas la validation HITL va cliquer « Ignorer » sur tout (le réflexe « fermer la pop-up »). Sans récupération, ces items sont perdus à jamais sauf intervention admin. L'élève ne s'en rend compte que quand il réalise que des points du cours ne sont pas dans ses exercices. La section « Points non vérifiés » rend le problème visible et offre une voie de retour autonome, sans dépendre de l'admin.
Z3-AC17 — Garde-fou template vs type d'item pour items restreints
|
|
| Lot 0 |
— |
| GIVEN |
Un item de type PROCEDURE (ex: calcul de densité, tags = [calcul, unites]) a validation_required = true. La restriction Z3-AC01 le limite aux templates simples : GEN.KNOW.DEF_SHORT et GEN.KNOW.FLASH_MCQ. Mais ces templates sont des gabarits de type KNOWLEDGE (rappel de définition), pas de type PROCEDURE (application de calcul). |
| WHEN |
Le moteur de composition sélectionne cet item pour une session. |
| THEN |
Le moteur vérifie la compatibilité entre le type de l'item et les templates restreints disponibles. Si aucun template restreint n'est compatible avec le type de l'item (ex: pas de template PROCEDURE en difficulté 1), le moteur sélectionne le template restreint le plus proche du type d'item : pour un PROCEDURE, GEN.KNOW.FLASH_MCQ avec une formulation adaptée (« Quelle est la formule de [concept] ? » plutôt que « Définis [concept] »). Le prompt_template restreint pour items PROCEDURE est spécifique : il teste la reconnaissance de la formule/méthode (pas la définition). Si un template GEN.CALC.MCQ_FORMULA existe en difficulté 1 dans le pack, il est préféré aux templates KNOWLEDGE. Le mismatch est loggé comme template_type_mismatch pour suivi admin (KPI « % items avec mismatch template/type »). |
NOTE : Un élève qui sait calculer ρ = m/V mais ne sait pas « définir la masse volumique en une phrase » échoue systématiquement aux questions DEF_SHORT pour cet item. Le mastery reste FRAGILE alors que l'élève maîtrise la compétence. C'est une forme d'impuissance apprise : l'élève finit par croire qu'il ne sait pas, alors que c'est le format de la question qui ne correspond pas à son type de savoir. Le garde-fou adapte la formulation du template au type d'item.