Review CM1/CM2 content: fix ambiguities, hints, final punctuation in corrections (0.8.2)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Denis Defolie
2026-10-12 12:01:21 +02:00
parent 8584249d78
commit a91d9e528c
27 changed files with 111 additions and 77 deletions
@@ -13,7 +13,7 @@
"c'est"
],
"correct_answer": 0,
"hint": "Remplace par « se » au présent : « le chat se dort » → « s'endort ».",
"hint": "Dis la phrase au présent : « le chat s'endort » : on entend « se ».",
"explanation": "Le chat est le sujet et « endormi » le participe : on écrit « s'est ».",
"review_tags": [
"homophones_cm1",
@@ -9,15 +9,11 @@
"instruction": "Touche le mot qui contient une erreur, puis corrige-le.",
"tokens": [
{
"text": "Léa",
"text": "Tom",
"correct": true
},
{
"text": "a",
"correct": true
},
{
"text": "rangé",
"text": "brosse",
"correct": true
},
{
@@ -27,7 +23,7 @@
"rule_id": "regle_ces_ses"
},
{
"text": "affaires",
"text": "dents",
"correct": true
},
{
@@ -35,24 +31,20 @@
"correct": true
},
{
"text": "de",
"text": "d'aller",
"correct": true
},
{
"text": "partir",
"text": "au",
"correct": true
},
{
"text": "à",
"correct": true
},
{
"text": "l'école.",
"text": "lit.",
"correct": true
}
],
"hint": "Remplace par « son » : « son affaire » a du sens.",
"explanation": "« Ses » est le pluriel de « son » : les affaires de Léa.",
"hint": "Remplace par « sa » : « sa dent » a du sens.",
"explanation": "« Ses » est le pluriel de « sa » : les dents de Tom.",
"review_tags": [
"homophones_cm1",
"ces_ses"
+3 -3
View File
@@ -7,14 +7,14 @@
"difficulty": 2,
"type": "multiple_choice",
"instruction": "Choisis le bon mot.",
"question": "Julie a oublié ... clés sur la table.",
"question": "Julie embrasse ... grands-parents avant de partir.",
"answers": [
"ses",
"ces"
],
"correct_answer": 0,
"hint": "Remplace par « sa » : « sa clé » a du sens.",
"explanation": "« Ses » est le pluriel de « sa » : les clés de Julie.",
"hint": "Remplace par « son » : « son grand-père » a du sens.",
"explanation": "« Ses » est le pluriel de « son » : les grands-parents de Julie.",
"review_tags": [
"homophones_cm1",
"ces_ses"
+1 -1
View File
@@ -7,7 +7,7 @@
"difficulty": 2,
"type": "multiple_choice",
"instruction": "Choisis le bon mot.",
"question": "Pourquoi achètes-tu ... pommes vertes ?",
"question": "Goûte ... pommes rouges, elles sont délicieuses !",
"answers": [
"ces",
"ses"
+1 -1
View File
@@ -14,7 +14,7 @@
"Là"
],
"correct_answer": 0,
"hint": "« La » est ici un article devant un nom.",
"hint": "Regarde le mot qui suit : c'est un nom.",
"explanation": "« La » accompagne le nom « maîtresse » : on écrit « la » sans accent.",
"review_tags": [
"orthographe_cm1",
@@ -7,15 +7,15 @@
"difficulty": 2,
"type": "multiple_choice",
"instruction": "Choisis le bon mot.",
"question": "Les enfants sont ... du bus en courant.",
"question": "Les garçons sont ... du bus en courant.",
"answers": [
"descendu",
"descendus",
"descendues"
],
"correct_answer": 1,
"hint": "Le sujet « les enfants » est masculin pluriel.",
"explanation": "Avec « être », le participe s'accorde avec le sujet : les enfants sont descendus.",
"hint": "Le sujet « les garçons » est masculin pluriel.",
"explanation": "Avec « être », le participe s'accorde avec le sujet : les garçons sont descendus.",
"review_tags": [
"verbes_cm1",
"participe_etre"
@@ -31,7 +31,7 @@
"rule_id": "regle_adjectifs_couleur"
}
],
"hint": "« Orange » vient du nom du fruit : il reste invariable.",
"hint": "Pense au fruit qui a donné son nom à cette couleur.",
"explanation": "« Orange » est un nom employé comme couleur : il reste invariable.",
"review_tags": [
"orthographe_cm2",
@@ -31,7 +31,7 @@
"rule_id": "regle_adjectifs_couleur"
}
],
"hint": "« Marron » vient du nom du fruit : il reste invariable.",
"hint": "Pense au fruit qui a donné son nom à cette couleur.",
"explanation": "« Marron » est un nom employé comme couleur : il reste invariable.",
"review_tags": [
"orthographe_cm2",
+1 -1
View File
@@ -13,7 +13,7 @@
"marrons"
],
"correct_answer": 0,
"hint": "« Marron » vient du nom du fruit : il reste invariable.",
"hint": "Pense au fruit qui a donné son nom à cette couleur.",
"explanation": "« Marron » est un nom employé comme couleur : il reste invariable.",
"review_tags": [
"orthographe_cm2",
+1 -1
View File
@@ -13,7 +13,7 @@
"orange"
],
"correct_answer": 1,
"hint": "« Orange » vient du nom du fruit : il reste invariable.",
"hint": "Pense au fruit qui a donné son nom à cette couleur.",
"explanation": "« Orange » est un nom employé comme couleur : il reste invariable.",
"review_tags": [
"orthographe_cm2",
+1 -1
View File
@@ -13,7 +13,7 @@
"noisettes"
],
"correct_answer": 0,
"hint": "« Noisette » vient du nom du fruit : il reste invariable.",
"hint": "Pense au fruit qui a donné son nom à cette couleur.",
"explanation": "« Noisette » est un nom employé comme couleur : il reste invariable.",
"review_tags": [
"orthographe_cm2",
@@ -7,13 +7,13 @@
"difficulty": 1,
"type": "multiple_choice",
"instruction": "Choisis le bon mot.",
"question": "Ce soir, il ... plus tard que d'habitude.",
"question": "Ce soir, il ... à huit heures, c'est certain.",
"answers": [
"mangera",
"mangerait"
],
"correct_answer": 0,
"hint": "« Ce soir » : l'action est certaine, c'est le futur.",
"hint": "« C'est certain » : l'action est sûre, c'est le futur.",
"explanation": "L'action est certaine : on écrit le futur « mangera ».",
"review_tags": [
"verbes_cm2",
@@ -7,7 +7,7 @@
"difficulty": 1,
"type": "multiple_choice",
"instruction": "Choisis le bon mot.",
"question": "Le roi ... le château ce matin-là.",
"question": "Soudain, le roi ... le château sans un mot.",
"answers": [
"quitte",
"quittait",
@@ -7,7 +7,7 @@
"difficulty": 1,
"type": "multiple_choice",
"instruction": "Choisis le bon mot.",
"question": "Le chevalier ... sur son cheval.",
"question": "Puis, le chevalier ... sur son cheval et partit.",
"answers": [
"monta",
"montait",
@@ -7,7 +7,7 @@
"difficulty": 2,
"type": "multiple_choice",
"instruction": "Choisis le bon mot.",
"question": "Les villageois ... le volcan avec crainte.",
"question": "Alors, les villageois ... le volcan avec crainte, puis s'enfuirent.",
"answers": [
"regardaient",
"regardant",
@@ -7,7 +7,7 @@
"difficulty": 2,
"type": "multiple_choice",
"instruction": "Choisis le bon mot.",
"question": "Alors, le dragon ... un grand cri.",
"question": "Alors, d'un seul coup, le dragon ... un grand cri.",
"answers": [
"poussa",
"pousser",
@@ -7,7 +7,7 @@
"difficulty": 2,
"type": "multiple_choice",
"instruction": "Choisis le bon mot.",
"question": "Les enfants ... vers la cabane.",
"question": "Soudain, les enfants ... vers la cabane.",
"answers": [
"couraient",
"courant",
@@ -7,7 +7,7 @@
"difficulty": 3,
"type": "multiple_choice",
"instruction": "Choisis le bon mot.",
"question": "Elles ... leur travail avant la nuit.",
"question": "Enfin, elles ... leur travail avant la nuit.",
"answers": [
"finissaient",
"finies",
@@ -7,7 +7,7 @@
"difficulty": 3,
"type": "multiple_choice",
"instruction": "Choisis le bon mot.",
"question": "Le héros ... la princesse.",
"question": "Ce jour-là, d'un coup d'épée, le héros ... la princesse.",
"answers": [
"sauva",
"sauvait",
+2 -2
View File
@@ -7,13 +7,13 @@
"difficulty": 3,
"type": "multiple_choice",
"instruction": "Choisis le bon mot.",
"question": "Je me couche ... le samedi soir.",
"question": "Ce soir, je me couche ... que d'habitude.",
"answers": [
"plutôt",
"plus tôt"
],
"correct_answer": 1,
"hint": "Remplace par « plus tard » : « je me couche plus tard » a du sens.",
"hint": "Remplace par « plus tard » : « plus tard que d'habitude » a du sens.",
"explanation": "On peut dire « plus tard » : on écrit « plus tôt ».",
"review_tags": [
"homophones_cm2",
+1 -1
View File
@@ -10,7 +10,7 @@
"question": "La ... du volcan a duré trois jours.",
"answers": [
"érussion",
"éruction",
"érupsion",
"éruption"
],
"correct_answer": 2,
+1 -1
View File
@@ -3,7 +3,7 @@
"level": "CM1",
"domain": "orthographe",
"skill": "orthographe_cm1",
"statement": "Les noms en -al font leur pluriel en -aux (un cheval, des chevaux) ; les noms en -eau prennent un -x (un bateau, des bateaux) ; quelques noms en -ou aussi (un bijou, des bijoux).",
"statement": "Les noms en -al font leur pluriel en -aux (un cheval, des chevaux) ; les noms en -eau prennent un -x (un bateau, des bateaux) ; quelques noms en -ou aussi (un bijou, des bijoux) ; « travail » fait « travaux ».",
"example": "Un animal, des animaux. Un bateau, des bateaux. Un bijou, des bijoux.",
"review_status": "draft"
}
+31 -31
View File
@@ -228,11 +228,11 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
- Indice : Le sujet « ma mère » est féminin singulier.
- Explication : Avec « être », le participe s'accorde avec le sujet : ma mère est sortie.
- Statut : draft
- **cm1_participe_etre_qcm_06** (difficulte 2) : Les enfants sont ... du bus en courant.
- **cm1_participe_etre_qcm_06** (difficulte 2) : Les garçons sont ... du bus en courant.
- Reponses : descendu, descendus, descendues
- Reponse attendue : descendus
- Indice : Le sujet « les enfants » est masculin pluriel.
- Explication : Avec « être », le participe s'accorde avec le sujet : les enfants sont descendus.
- Indice : Le sujet « les garçons » est masculin pluriel.
- Explication : Avec « être », le participe s'accorde avec le sujet : les garçons sont descendus.
- Statut : draft
- **cm1_participe_etre_qcm_07** (difficulte 3) : Anna et sa sœur sont ... en retard.
- Reponses : arrivées, arrivés, arrivée
@@ -405,13 +405,13 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
- **cm2_couleurs_qcm_04** (difficulte 2) : Il a mis des chaussures ... .
- Reponses : marron, marrons
- Reponse attendue : marron
- Indice : « Marron » vient du nom du fruit : il reste invariable.
- Indice : Pense au fruit qui a donné son nom à cette couleur.
- Explication : « Marron » est un nom employé comme couleur : il reste invariable.
- Statut : draft
- **cm2_couleurs_qcm_05** (difficulte 2) : Mamie tricote des écharpes ... .
- Reponses : oranges, orange
- Reponse attendue : orange
- Indice : « Orange » vient du nom du fruit : il reste invariable.
- Indice : Pense au fruit qui a donné son nom à cette couleur.
- Explication : « Orange » est un nom employé comme couleur : il reste invariable.
- Statut : draft
- **cm2_couleurs_qcm_06** (difficulte 2) : Elle aime ses rubans bleu ... .
@@ -429,7 +429,7 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
- **cm2_couleurs_qcm_08** (difficulte 3) : Elle a des yeux ... .
- Reponses : noisette, noisettes
- Reponse attendue : noisette
- Indice : « Noisette » vient du nom du fruit : il reste invariable.
- Indice : Pense au fruit qui a donné son nom à cette couleur.
- Explication : « Noisette » est un nom employé comme couleur : il reste invariable.
- Statut : draft
@@ -440,11 +440,11 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
- Explication : « Vert » est un adjectif de couleur : il s'accorde, « vertes ».
- Statut : draft
- **cm2_couleurs_correction_02** (difficulte 2) : Elle porte des gants [oranges. -> orange.]
- Indice : « Orange » vient du nom du fruit : il reste invariable.
- Indice : Pense au fruit qui a donné son nom à cette couleur.
- Explication : « Orange » est un nom employé comme couleur : il reste invariable.
- Statut : draft
- **cm2_couleurs_correction_03** (difficulte 2) : Il porte des chaussures [marrons. -> marron.]
- Indice : « Marron » vient du nom du fruit : il reste invariable.
- Indice : Pense au fruit qui a donné son nom à cette couleur.
- Explication : « Marron » est un nom employé comme couleur : il reste invariable.
- Statut : draft
- **cm2_couleurs_correction_04** (difficulte 3) : Léa a des rubans bleu [clairs. -> clair.]
@@ -672,7 +672,7 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
- **cm1_c_est_s_est_qcm_02** (difficulte 1) : Le chat ... endormi sur le canapé.
- Reponses : s'est, c'est
- Reponse attendue : s'est
- Indice : Remplace par « se » au présent : « le chat se dort » → « s'endort ».
- Indice : Dis la phrase au présent : « le chat s'endort » : on entend « se ».
- Explication : Le chat est le sujet et « endormi » le participe : on écrit « s'est ».
- Statut : draft
- **cm1_c_est_s_est_qcm_03** (difficulte 1) : Regarde, ... ma nouvelle bicyclette !
@@ -774,13 +774,13 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
- Indice : Remplace par « ce » : « ce gâteau » a du sens.
- Explication : « Ces » est le pluriel de « ce » : on montre des gâteaux.
- Statut : draft
- **cm1_ces_ses_qcm_04** (difficulte 2) : Julie a oublié ... clés sur la table.
- **cm1_ces_ses_qcm_04** (difficulte 2) : Julie embrasse ... grands-parents avant de partir.
- Reponses : ses, ces
- Reponse attendue : ses
- Indice : Remplace par « sa » : « sa clé » a du sens.
- Explication : « Ses » est le pluriel de « sa » : les clés de Julie.
- Indice : Remplace par « son » : « son grand-père » a du sens.
- Explication : « Ses » est le pluriel de « son » : les grands-parents de Julie.
- Statut : draft
- **cm1_ces_ses_qcm_05** (difficulte 2) : Pourquoi achètes-tu ... pommes vertes ?
- **cm1_ces_ses_qcm_05** (difficulte 2) : Goûte ... pommes rouges, elles sont délicieuses !
- Reponses : ces, ses
- Reponse attendue : ces
- Indice : Remplace par « cette » : « cette pomme » a du sens.
@@ -815,9 +815,9 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
- Indice : Remplace par « son » : « son oreille » a du sens.
- Explication : « Ses » est le pluriel de « son » : les oreilles du chien.
- Statut : draft
- **cm1_ces_ses_correction_03** (difficulte 2) : Léa a rangé [ces -> ses] affaires avant de partir à l'école.
- Indice : Remplace par « son » : « son affaire » a du sens.
- Explication : « Ses » est le pluriel de « son » : les affaires de Léa.
- **cm1_ces_ses_correction_03** (difficulte 2) : Tom brosse [ces -> ses] dents avant d'aller au lit.
- Indice : Remplace par « sa » : « sa dent » a du sens.
- Explication : « Ses » est le pluriel de « sa » : les dents de Tom.
- Statut : draft
- **cm1_ces_ses_correction_04** (difficulte 3) : Pourquoi portes-tu [ses -> ces] chaussures-ci aujourd'hui ?
- Indice : Remplace par « cette » : « cette chaussure-ci » a du sens.
@@ -1047,10 +1047,10 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
- Indice : Après « si » + imparfait, on emploie le conditionnel.
- Explication : Après « si j'avais », on écrit le conditionnel : « volerais ».
- Statut : draft
- **cm2_futur_cond_qcm_03** (difficulte 1) : Ce soir, il ... plus tard que d'habitude.
- **cm2_futur_cond_qcm_03** (difficulte 1) : Ce soir, il ... à huit heures, c'est certain.
- Reponses : mangera, mangerait
- Reponse attendue : mangera
- Indice : « Ce soir » : l'action est certaine, c'est le futur.
- Indice : « C'est certain » : l'action est sûre, c'est le futur.
- Explication : L'action est certaine : on écrit le futur « mangera ».
- Statut : draft
- **cm2_futur_cond_qcm_04** (difficulte 2) : Si tu étudiais plus, tu ... ton examen.
@@ -1086,7 +1086,7 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
### Corrections de phrase
- **cm2_futur_cond_correction_01** (difficulte 1) : Si j'étais riche, [j'achèterai -> achèterais] une île.
- **cm2_futur_cond_correction_01** (difficulte 1) : Si j'étais riche, [j'achèterai -> j'achèterais] une île.
- Indice : Après « si » + imparfait, on emploie le conditionnel.
- Explication : Après « si j'étais », on écrit le conditionnel : « achèterais ».
- Statut : draft
@@ -1788,7 +1788,7 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
- **cm1_la_la_l_a_qcm_02** (difficulte 1) : ... maîtresse écrit au tableau.
- Reponses : La, L'a, Là
- Reponse attendue : La
- Indice : « La » est ici un article devant un nom.
- Indice : Regarde le mot qui suit : c'est un nom.
- Explication : « La » accompagne le nom « maîtresse » : on écrit « la » sans accent.
- Statut : draft
- **cm1_la_la_l_a_qcm_03** (difficulte 1) : Paul ... vu hier au marché.
@@ -2430,7 +2430,7 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
### Choix multiples
- **cm2_passe_simple_qcm_01** (difficulte 1) : Le roi ... le château ce matin-là.
- **cm2_passe_simple_qcm_01** (difficulte 1) : Soudain, le roi ... le château sans un mot.
- Reponses : quitte, quittait, quitta
- Reponse attendue : quitta
- Indice : Une action rapide au passé : le passé simple finit par -a.
@@ -2442,37 +2442,37 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
- Indice : Une action soudaine : le passé simple d'un verbe en -ir finit par -it.
- Explication : Au passé simple, un verbe en -ir finit par -it : « elle jaillit ».
- Statut : draft
- **cm2_passe_simple_qcm_03** (difficulte 1) : Le chevalier ... sur son cheval.
- **cm2_passe_simple_qcm_03** (difficulte 1) : Puis, le chevalier ... sur son cheval et partit.
- Reponses : monta, montait, monté
- Reponse attendue : monta
- Indice : Une action rapide au passé : le passé simple finit par -a.
- Explication : Au passé simple, un verbe en -er finit par -a : « il monta ».
- Statut : draft
- **cm2_passe_simple_qcm_04** (difficulte 2) : Les villageois ... le volcan avec crainte.
- **cm2_passe_simple_qcm_04** (difficulte 2) : Alors, les villageois ... le volcan avec crainte, puis s'enfuirent.
- Reponses : regardaient, regardant, regardèrent
- Reponse attendue : regardèrent
- Indice : Plusieurs villageois : le passé simple finit par -èrent.
- Explication : Au passé simple, ils : un verbe en -er finit par -èrent : « ils regardèrent ».
- Statut : draft
- **cm2_passe_simple_qcm_05** (difficulte 2) : Alors, le dragon ... un grand cri.
- **cm2_passe_simple_qcm_05** (difficulte 2) : Alors, d'un seul coup, le dragon ... un grand cri.
- Reponses : poussa, pousser, poussait
- Reponse attendue : poussa
- Indice : Une action rapide au passé : le passé simple finit par -a.
- Explication : Au passé simple, un verbe en -er finit par -a : « il poussa ».
- Statut : draft
- **cm2_passe_simple_qcm_06** (difficulte 2) : Les enfants ... vers la cabane.
- **cm2_passe_simple_qcm_06** (difficulte 2) : Soudain, les enfants ... vers la cabane.
- Reponses : couraient, courant, coururent
- Reponse attendue : coururent
- Indice : Plusieurs enfants, une action soudaine : le passé simple finit par -urent.
- Explication : Au passé simple, ils : « ils coururent ».
- Statut : draft
- **cm2_passe_simple_qcm_07** (difficulte 3) : Elles ... leur travail avant la nuit.
- **cm2_passe_simple_qcm_07** (difficulte 3) : Enfin, elles ... leur travail avant la nuit.
- Reponses : finissaient, finies, finirent
- Reponse attendue : finirent
- Indice : Plusieurs filles : le passé simple d'un verbe en -ir finit par -irent.
- Explication : Au passé simple, elles : un verbe en -ir finit par -irent : « elles finirent ».
- Statut : draft
- **cm2_passe_simple_qcm_08** (difficulte 3) : Le héros ... la princesse.
- **cm2_passe_simple_qcm_08** (difficulte 3) : Ce jour-là, d'un coup d'épée, le héros ... la princesse.
- Reponses : sauva, sauvait, sauvé
- Reponse attendue : sauva
- Indice : Une action rapide au passé : le passé simple finit par -a.
@@ -2515,7 +2515,7 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
## regle_pluriel_aux_eaux (CM1, orthographe)
**Enonce** : Les noms en -al font leur pluriel en -aux (un cheval, des chevaux) ; les noms en -eau prennent un -x (un bateau, des bateaux) ; quelques noms en -ou aussi (un bijou, des bijoux).
**Enonce** : Les noms en -al font leur pluriel en -aux (un cheval, des chevaux) ; les noms en -eau prennent un -x (un bateau, des bateaux) ; quelques noms en -ou aussi (un bijou, des bijoux) ; « travail » fait « travaux ».
**Exemple** : Un animal, des animaux. Un bateau, des bateaux. Un bijou, des bijoux.
@@ -2751,10 +2751,10 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
- Indice : Remplace par « plus tard » : la phrase n'a pas de sens.
- Explication : On exprime une préférence : on écrit « plutôt ».
- Statut : draft
- **cm2_plutot_qcm_08** (difficulte 3) : Je me couche ... le samedi soir.
- **cm2_plutot_qcm_08** (difficulte 3) : Ce soir, je me couche ... que d'habitude.
- Reponses : plutôt, plus tôt
- Reponse attendue : plus tôt
- Indice : Remplace par « plus tard » : « je me couche plus tard » a du sens.
- Indice : Remplace par « plus tard » : « plus tard que d'habitude » a du sens.
- Explication : On peut dire « plus tard » : on écrit « plus tôt ».
- Statut : draft
@@ -3118,7 +3118,7 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne
- Explication : Le mot « impression » s'écrit avec -ssion.
- Statut : draft
- **cm2_tion_sion_qcm_07** (difficulte 3) : La ... du volcan a duré trois jours.
- Reponses : érussion, éruction, éruption
- Reponses : érussion, érupsion, éruption
- Reponse attendue : éruption
- Indice : Le son [sjɔ̃] s'écrit ici avec -ption.
- Explication : Le mot « éruption » s'écrit avec -ption.
+11
View File
@@ -405,3 +405,14 @@ Volume : 6 tableaux, 18 règles, 144 QCM, 72 corrections, 54 dictées (voix Pipe
**Reste / limites** : CM1 et CM2 n'ont pas été relus pédagogiquement (indices, niveau de difficulté, règles du passé simple et de l'accord du participe avec COD, à faire valider) ; voix des 54 dictées non écoutées ; la création de profil propose désormais 4 niveaux (CE1, CE2, CM1, CM2).
**Correctif (0.8.1) — mots touchés avec élision** : dans « La coulée de lave », le mot touché était « j'achèterai » mais l'attendu « achèterais » (sans « j' ») : la réponse naturelle « j'achèterais » était refusée. Données corrigées (attendu « j'achèterais ») et validateur rendu tolérant : pour un mot touché avec élision, on accepte le mot entier ou seulement le verbe, avec apostrophe droite ou typographique. Tests : validateur (formes acceptées et refusées) et garde-fou de données (un attendu ne perd pas le préfixe d'élision du mot touché).
**Relecture CM1/CM2 (0.8.2)** — relecture complète des 144 QCM et 72 corrections, plus un audit automatique (attendu identique au texte, indice qui donne la réponse, dictées sans mot cible). Problèmes trouvés et corrigés :
- **Défaut de validation (le plus grave)** : un mot touché portant la ponctuation de la phrase (« roze. », « vertes. ») avait un attendu avec point ; taper « rose » sans point était refusé. La comparaison ignore maintenant la ponctuation finale, des deux côtés (concerne aussi le pilote CE1 et les tableaux CE2).
- **Énoncés ambigus** (les deux réponses étaient défendables) : ces/ses (« Julie a oublié … clés », « Pourquoi achètes-tu … pommes ? », « Léa a rangé ces affaires »), passé simple contre imparfait (sept énoncés sans marqueur d'action unique : « Soudain », « Puis… partit », « Enfin »…), futur contre conditionnel (« Ce soir, il … plus tard »), plutôt/plus tôt (« Je me couche … le samedi soir »). Reformulés avec un marqueur sans équivoque.
- **Faux mot « réel » comme distracteur** : « éruction » (mot qui existe) remplacé par « érupsion ».
- **Accord avec « être »** : « les enfants » n'est pas forcément masculin (remplacé par « les garçons »).
- **Indices qui donnent la réponse** (3 couleurs, « la ») : reformulés.
- **Énoncé de règle incomplet** : « travail → travaux » ajouté à la règle des pluriels en -aux.
**Non vérifié** : lecture faite par Claude, pas par un enseignant ; l'ambiguïté résiduelle possible (ex. « marron » parfois accordé dans l'usage) est assumée au profit de la norme.
+1 -1
View File
@@ -11,7 +11,7 @@ config_version=5
[application]
config/name="Les Aventuriers des mots"
config/version="0.8.1"
config/version="0.8.2"
run/main_scene="res://scenes/boot/boot.tscn"
config/features=PackedStringArray("4.6", "Forward Plus")
config/icon="res://icon.svg"
+12 -2
View File
@@ -73,13 +73,23 @@ static func validate_sentence_correction(
## (« achèterais ») : une reponse ambigue n'est pas declaree fausse
## automatiquement (CLAUDE.md, invariants pedagogiques).
static func _matches_expected(submitted: String, expected: String, token_text: String = "") -> bool:
var typed := TextNormalizer.normalize(submitted).to_lower()
var typed := _comparable(submitted)
for form in _accepted_forms(expected, token_text):
if typed == TextNormalizer.normalize(form).to_lower():
if typed == _comparable(form):
return true
return false
## Forme comparable : normalisee, en minuscules, sans ponctuation finale. Le
## mot touche porte parfois le point de la phrase (« roze. ») ; l'enfant n'a
## pas a le retaper, et le taper n'est pas une erreur.
static func _comparable(text: String) -> String:
var cleaned := TextNormalizer.normalize(text).to_lower()
while not cleaned.is_empty() and ".,;:!?…".contains(cleaned[cleaned.length() - 1]):
cleaned = cleaned.substr(0, cleaned.length() - 1).strip_edges()
return cleaned
## Formes acceptees : l'attendu, sans son prefixe d'elision (« j' », « l' »...),
## ou avec le prefixe du mot touche quand l'attendu n'en porte pas.
static func _accepted_forms(expected: String, token_text: String) -> Array[String]:
+21
View File
@@ -149,3 +149,24 @@ func test_expected_without_elision_accepts_the_prefix_of_the_touched_word() -> v
for typed in ["achèterais", "j'achèterais"]:
var result := AnswerValidator.validate_sentence_correction(exercise, [1], {1: typed})
assert_true(result.is_correct, "« %s » doit etre accepte" % typed)
func test_correction_does_not_require_the_final_punctuation_of_the_word() -> void:
# Le mot touche porte souvent le point de la phrase (« roze. ») : taper
# « rose » ou « rose. » est correct, « roze » ne l'est pas.
var exercise := {
"rule_id": "regle_x",
"hint": "indice",
"explanation": "explication",
"tokens":
[
{"text": "La", "correct": true},
{"text": "roze.", "correct": false, "expected": "rose."},
],
}
for typed in ["rose", "rose.", "Rose", " rose "]:
var result := AnswerValidator.validate_sentence_correction(exercise, [1], {1: typed})
assert_true(result.is_correct, "« %s » doit etre accepte" % typed)
for typed in ["roze", "roze.", "rosse", ""]:
var result := AnswerValidator.validate_sentence_correction(exercise, [1], {1: typed})
assert_false(result.is_correct, "« %s » ne doit pas etre accepte" % typed)