From 1c036658bcf8081546532ad7cbcd9cd4ac7f490c Mon Sep 17 00:00:00 2001 From: Denis Defolie Date: Sun, 11 Oct 2026 21:36:04 +0200 Subject: [PATCH] Add regle_pluriel_nom and regle_accord_determinant (CE1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extends explicitly beyond the §15 prototype scope (3 missions, one rule) that prompt-lancement.md says not to exceed without flagging it — confirmed with the user before implementing (decisions.md, point 25). Adds the two remaining CE1 rules for the "accords dans le groupe nominal" chapter listed in prompt-lancement.md, each with the same minimum content volume already established for regle_accord_adjectif (8 multiple-choice, 4 sentence corrections, 3 dictées across the 3 difficulty levels) and 3 missions (one per exercise type, matching the existing pattern), bringing the map to 9 locations. world_map.gd is purely data-driven already, so no code change was needed to support more locations — only its stale "trois lieux" header comment, corrected. Dictation audio generated with the Piper voice (make generate-dictation-audio). Co-Authored-By: Claude Sonnet 5 --- assets/CREDITS.md | 4 +- .../ce1_accord_determinant_dictee_01.ogg | Bin 0 -> 9495 bytes ...e1_accord_determinant_dictee_01.ogg.import | 19 ++ .../ce1_accord_determinant_dictee_02.ogg | Bin 0 -> 10598 bytes ...e1_accord_determinant_dictee_02.ogg.import | 19 ++ .../ce1_accord_determinant_dictee_03.ogg | Bin 0 -> 15110 bytes ...e1_accord_determinant_dictee_03.ogg.import | 19 ++ .../dictations/ce1_pluriel_nom_dictee_01.ogg | Bin 0 -> 13132 bytes .../ce1_pluriel_nom_dictee_01.ogg.import | 19 ++ .../dictations/ce1_pluriel_nom_dictee_02.ogg | Bin 0 -> 14173 bytes .../ce1_pluriel_nom_dictee_02.ogg.import | 19 ++ .../dictations/ce1_pluriel_nom_dictee_03.ogg | Bin 0 -> 16889 bytes .../ce1_pluriel_nom_dictee_03.ogg.import | 19 ++ .../ce1_accords_groupe_nominal.json | 2 +- .../ce1_accord_determinant_dictee_01.json | 17 ++ .../ce1_accord_determinant_dictee_02.json | 18 ++ .../ce1_accord_determinant_dictee_03.json | 19 ++ .../dictations/ce1_pluriel_nom_dictee_01.json | 20 ++ .../dictations/ce1_pluriel_nom_dictee_02.json | 20 ++ .../dictations/ce1_pluriel_nom_dictee_03.json | 21 ++ .../ce1_accord_determinant_correction_01.json | 25 +++ .../ce1_accord_determinant_correction_02.json | 27 +++ .../ce1_accord_determinant_correction_03.json | 24 +++ .../ce1_accord_determinant_correction_04.json | 26 +++ .../ce1/ce1_accord_determinant_qcm_01.json | 17 ++ .../ce1/ce1_accord_determinant_qcm_02.json | 17 ++ .../ce1/ce1_accord_determinant_qcm_03.json | 17 ++ .../ce1/ce1_accord_determinant_qcm_04.json | 17 ++ .../ce1/ce1_accord_determinant_qcm_05.json | 17 ++ .../ce1/ce1_accord_determinant_qcm_06.json | 17 ++ .../ce1/ce1_accord_determinant_qcm_07.json | 17 ++ .../ce1/ce1_accord_determinant_qcm_08.json | 17 ++ .../ce1/ce1_pluriel_nom_correction_01.json | 27 +++ .../ce1/ce1_pluriel_nom_correction_02.json | 27 +++ .../ce1/ce1_pluriel_nom_correction_03.json | 24 +++ .../ce1/ce1_pluriel_nom_correction_04.json | 28 +++ .../exercises/ce1/ce1_pluriel_nom_qcm_01.json | 17 ++ .../exercises/ce1/ce1_pluriel_nom_qcm_02.json | 17 ++ .../exercises/ce1/ce1_pluriel_nom_qcm_03.json | 17 ++ .../exercises/ce1/ce1_pluriel_nom_qcm_04.json | 17 ++ .../exercises/ce1/ce1_pluriel_nom_qcm_05.json | 17 ++ .../exercises/ce1/ce1_pluriel_nom_qcm_06.json | 17 ++ .../exercises/ce1/ce1_pluriel_nom_qcm_07.json | 17 ++ .../exercises/ce1/ce1_pluriel_nom_qcm_08.json | 17 ++ .../mission_04_ruche_qui_multiplie.json | 9 + .../mission_05_verger_paniers_pleins.json | 9 + .../missions/mission_06_mare_grenouilles.json | 9 + .../mission_07_sentier_bons_compagnons.json | 9 + .../mission_08_cabane_etiquettes.json | 9 + .../mission_09_rocher_qui_repete.json | 9 + data/rules/regle_accord_determinant.json | 9 + data/rules/regle_pluriel_nom.json | 9 + docs/review/content-review.md | 186 ++++++++++++++++++ docs/specs/decisions.md | 14 ++ docs/testing/manual-checklist.md | 3 +- scenes/world/world_map.gd | 9 +- tests/exercises/test_exercise_engine.gd | 3 +- 57 files changed, 993 insertions(+), 9 deletions(-) create mode 100644 assets/audio/dictations/ce1_accord_determinant_dictee_01.ogg create mode 100644 assets/audio/dictations/ce1_accord_determinant_dictee_01.ogg.import create mode 100644 assets/audio/dictations/ce1_accord_determinant_dictee_02.ogg create mode 100644 assets/audio/dictations/ce1_accord_determinant_dictee_02.ogg.import create mode 100644 assets/audio/dictations/ce1_accord_determinant_dictee_03.ogg create mode 100644 assets/audio/dictations/ce1_accord_determinant_dictee_03.ogg.import create mode 100644 assets/audio/dictations/ce1_pluriel_nom_dictee_01.ogg create mode 100644 assets/audio/dictations/ce1_pluriel_nom_dictee_01.ogg.import create mode 100644 assets/audio/dictations/ce1_pluriel_nom_dictee_02.ogg create mode 100644 assets/audio/dictations/ce1_pluriel_nom_dictee_02.ogg.import create mode 100644 assets/audio/dictations/ce1_pluriel_nom_dictee_03.ogg create mode 100644 assets/audio/dictations/ce1_pluriel_nom_dictee_03.ogg.import create mode 100644 data/dictations/ce1_accord_determinant_dictee_01.json create mode 100644 data/dictations/ce1_accord_determinant_dictee_02.json create mode 100644 data/dictations/ce1_accord_determinant_dictee_03.json create mode 100644 data/dictations/ce1_pluriel_nom_dictee_01.json create mode 100644 data/dictations/ce1_pluriel_nom_dictee_02.json create mode 100644 data/dictations/ce1_pluriel_nom_dictee_03.json create mode 100644 data/exercises/ce1/ce1_accord_determinant_correction_01.json create mode 100644 data/exercises/ce1/ce1_accord_determinant_correction_02.json create mode 100644 data/exercises/ce1/ce1_accord_determinant_correction_03.json create mode 100644 data/exercises/ce1/ce1_accord_determinant_correction_04.json create mode 100644 data/exercises/ce1/ce1_accord_determinant_qcm_01.json create mode 100644 data/exercises/ce1/ce1_accord_determinant_qcm_02.json create mode 100644 data/exercises/ce1/ce1_accord_determinant_qcm_03.json create mode 100644 data/exercises/ce1/ce1_accord_determinant_qcm_04.json create mode 100644 data/exercises/ce1/ce1_accord_determinant_qcm_05.json create mode 100644 data/exercises/ce1/ce1_accord_determinant_qcm_06.json create mode 100644 data/exercises/ce1/ce1_accord_determinant_qcm_07.json create mode 100644 data/exercises/ce1/ce1_accord_determinant_qcm_08.json create mode 100644 data/exercises/ce1/ce1_pluriel_nom_correction_01.json create mode 100644 data/exercises/ce1/ce1_pluriel_nom_correction_02.json create mode 100644 data/exercises/ce1/ce1_pluriel_nom_correction_03.json create mode 100644 data/exercises/ce1/ce1_pluriel_nom_correction_04.json create mode 100644 data/exercises/ce1/ce1_pluriel_nom_qcm_01.json create mode 100644 data/exercises/ce1/ce1_pluriel_nom_qcm_02.json create mode 100644 data/exercises/ce1/ce1_pluriel_nom_qcm_03.json create mode 100644 data/exercises/ce1/ce1_pluriel_nom_qcm_04.json create mode 100644 data/exercises/ce1/ce1_pluriel_nom_qcm_05.json create mode 100644 data/exercises/ce1/ce1_pluriel_nom_qcm_06.json create mode 100644 data/exercises/ce1/ce1_pluriel_nom_qcm_07.json create mode 100644 data/exercises/ce1/ce1_pluriel_nom_qcm_08.json create mode 100644 data/missions/mission_04_ruche_qui_multiplie.json create mode 100644 data/missions/mission_05_verger_paniers_pleins.json create mode 100644 data/missions/mission_06_mare_grenouilles.json create mode 100644 data/missions/mission_07_sentier_bons_compagnons.json create mode 100644 data/missions/mission_08_cabane_etiquettes.json create mode 100644 data/missions/mission_09_rocher_qui_repete.json create mode 100644 data/rules/regle_accord_determinant.json create mode 100644 data/rules/regle_pluriel_nom.json diff --git a/assets/CREDITS.md b/assets/CREDITS.md index ea3acbc..5dd1e60 100644 --- a/assets/CREDITS.md +++ b/assets/CREDITS.md @@ -5,9 +5,7 @@ Tous les graphismes et sons actuels sont provisoires, crees pour ce projet, sans | Fichier | Origine | Licence | |---|---|---| | `icon.svg` | Forme geometrique simple, creee pour ce projet | AGPL-3.0 (code et assets du depot) | -| `audio/dictations/ce1_accord_adjectif_dictee_01.ogg` | Voix de synthese neuronale generee hors ligne avec Piper (modele `fr_FR-siwis-medium`, entraine sur le corpus SIWIS de l'EPFL), via `tools/generate_dictation_audio.py` | MIT (Piper) ; dataset SIWIS en CC-BY 4.0 (attribution requise) ; fichier genere verse en AGPL-3.0 avec le reste du depot | -| `audio/dictations/ce1_accord_adjectif_dictee_02.ogg` | Idem (voix Piper `fr_FR-siwis-medium`) | Idem | -| `audio/dictations/ce1_accord_adjectif_dictee_03.ogg` | Idem (voix Piper `fr_FR-siwis-medium`) | Idem | +| `audio/dictations/*.ogg` (toutes les dictees) | Voix de synthese neuronale generee hors ligne avec Piper (modele `fr_FR-siwis-medium`, entraine sur le corpus SIWIS de l'EPFL), via `tools/generate_dictation_audio.py` | MIT (Piper) ; dataset SIWIS en CC-BY 4.0 (attribution requise) ; fichiers generes verses en AGPL-3.0 avec le reste du depot | Chaque nouvelle dictee ajoutee a `data/dictations/` doit avoir son audio genere avec `make generate-dictation-audio`, puis une ligne ajoutee ici. Toutes les voix actuelles sont provisoires (`audio_provisional: true` dans la donnee, badge « voix provisoire » affiche a l'enfant) : a remplacer par une vraie voix humaine avant diffusion. diff --git a/assets/audio/dictations/ce1_accord_determinant_dictee_01.ogg b/assets/audio/dictations/ce1_accord_determinant_dictee_01.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f1030db1f300b8e8776392e4ae4dd0fd6f54c134 GIT binary patch literal 9495 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 literal 0 HcmV?d00001 diff --git a/assets/audio/dictations/ce1_accord_determinant_dictee_01.ogg.import b/assets/audio/dictations/ce1_accord_determinant_dictee_01.ogg.import new file mode 100644 index 0000000..5a4458e --- /dev/null +++ b/assets/audio/dictations/ce1_accord_determinant_dictee_01.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://xmpj5b2uej6l" +path="res://.godot/imported/ce1_accord_determinant_dictee_01.ogg-47c1364a3c83534f6b9c34a204aa3e1d.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce1_accord_determinant_dictee_01.ogg" +dest_files=["res://.godot/imported/ce1_accord_determinant_dictee_01.ogg-47c1364a3c83534f6b9c34a204aa3e1d.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/dictations/ce1_accord_determinant_dictee_02.ogg b/assets/audio/dictations/ce1_accord_determinant_dictee_02.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7da938b3db11017d341e55031f49ee04bb778381 GIT binary patch literal 10598 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 W1)c-x3^TRCa~ literal 0 HcmV?d00001 diff --git a/assets/audio/dictations/ce1_accord_determinant_dictee_02.ogg.import b/assets/audio/dictations/ce1_accord_determinant_dictee_02.ogg.import new file mode 100644 index 0000000..e11c5b6 --- /dev/null +++ b/assets/audio/dictations/ce1_accord_determinant_dictee_02.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://xiref83lks3o" +path="res://.godot/imported/ce1_accord_determinant_dictee_02.ogg-35ec03bc67ca7bddb2db46f8763ef5b9.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce1_accord_determinant_dictee_02.ogg" +dest_files=["res://.godot/imported/ce1_accord_determinant_dictee_02.ogg-35ec03bc67ca7bddb2db46f8763ef5b9.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/dictations/ce1_accord_determinant_dictee_03.ogg b/assets/audio/dictations/ce1_accord_determinant_dictee_03.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5d01f565614442e9d98a9c482dc60b220e3cccb2 GIT binary patch literal 15110 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 CWXMSX literal 0 HcmV?d00001 diff --git a/assets/audio/dictations/ce1_pluriel_nom_dictee_01.ogg.import b/assets/audio/dictations/ce1_pluriel_nom_dictee_01.ogg.import new file mode 100644 index 0000000..1996f0d --- /dev/null +++ b/assets/audio/dictations/ce1_pluriel_nom_dictee_01.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dex7jgt5d8h5e" +path="res://.godot/imported/ce1_pluriel_nom_dictee_01.ogg-d6abb577e290548c3eeef95255d0e3b5.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce1_pluriel_nom_dictee_01.ogg" +dest_files=["res://.godot/imported/ce1_pluriel_nom_dictee_01.ogg-d6abb577e290548c3eeef95255d0e3b5.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/dictations/ce1_pluriel_nom_dictee_02.ogg b/assets/audio/dictations/ce1_pluriel_nom_dictee_02.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5cd562cc53849f3e5002ba08a746be4fcc60d634 GIT binary patch literal 14173 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 T$={`wR5+;cA(Z>oPuTwjZ7n~% literal 0 HcmV?d00001 diff --git a/assets/audio/dictations/ce1_pluriel_nom_dictee_03.ogg.import b/assets/audio/dictations/ce1_pluriel_nom_dictee_03.ogg.import new file mode 100644 index 0000000..af42209 --- /dev/null +++ b/assets/audio/dictations/ce1_pluriel_nom_dictee_03.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bsc15pmxhbncx" +path="res://.godot/imported/ce1_pluriel_nom_dictee_03.ogg-4505c6140e2a079498b6081b5c01d590.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce1_pluriel_nom_dictee_03.ogg" +dest_files=["res://.godot/imported/ce1_pluriel_nom_dictee_03.ogg-4505c6140e2a079498b6081b5c01d590.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/data/curriculum/ce1_accords_groupe_nominal.json b/data/curriculum/ce1_accords_groupe_nominal.json index 4c0ed7b..f875502 100644 --- a/data/curriculum/ce1_accords_groupe_nominal.json +++ b/data/curriculum/ce1_accords_groupe_nominal.json @@ -3,6 +3,6 @@ "region_id": "foret_des_accords", "chapter_id": "accords_groupe_nominal", "title": "Les accords dans le groupe nominal", - "rule_ids": ["regle_accord_adjectif"], + "rule_ids": ["regle_accord_adjectif", "regle_pluriel_nom", "regle_accord_determinant"], "review_status": "draft" } diff --git a/data/dictations/ce1_accord_determinant_dictee_01.json b/data/dictations/ce1_accord_determinant_dictee_01.json new file mode 100644 index 0000000..3572c64 --- /dev/null +++ b/data/dictations/ce1_accord_determinant_dictee_01.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_accord_determinant_dictee_01", + "level": "CE1", + "domain": "grammaire", + "rule_ids": ["regle_accord_determinant"], + "difficulty": 1, + "target_text": "Le chat dort.", + "words": [ + { "text": "Le", "expects_capital": true, "rule_id": "regle_accord_determinant" }, + { "text": "chat" }, + { "text": "dort." } + ], + "audio_id": "ce1_accord_determinant_dictee_01", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce1_accord_determinant_dictee_02.json b/data/dictations/ce1_accord_determinant_dictee_02.json new file mode 100644 index 0000000..737a2f1 --- /dev/null +++ b/data/dictations/ce1_accord_determinant_dictee_02.json @@ -0,0 +1,18 @@ +{ + "id": "ce1_accord_determinant_dictee_02", + "level": "CE1", + "domain": "grammaire", + "rule_ids": ["regle_accord_determinant"], + "difficulty": 2, + "target_text": "La fleur est belle.", + "words": [ + { "text": "La", "expects_capital": true, "rule_id": "regle_accord_determinant" }, + { "text": "fleur" }, + { "text": "est" }, + { "text": "belle." } + ], + "audio_id": "ce1_accord_determinant_dictee_02", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce1_accord_determinant_dictee_03.json b/data/dictations/ce1_accord_determinant_dictee_03.json new file mode 100644 index 0000000..0129b89 --- /dev/null +++ b/data/dictations/ce1_accord_determinant_dictee_03.json @@ -0,0 +1,19 @@ +{ + "id": "ce1_accord_determinant_dictee_03", + "level": "CE1", + "domain": "grammaire", + "rule_ids": ["regle_accord_determinant"], + "difficulty": 3, + "target_text": "Les petites fleurs sont jolies.", + "words": [ + { "text": "Les", "expects_capital": true, "rule_id": "regle_accord_determinant" }, + { "text": "petites" }, + { "text": "fleurs" }, + { "text": "sont" }, + { "text": "jolies." } + ], + "audio_id": "ce1_accord_determinant_dictee_03", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce1_pluriel_nom_dictee_01.json b/data/dictations/ce1_pluriel_nom_dictee_01.json new file mode 100644 index 0000000..a347f5e --- /dev/null +++ b/data/dictations/ce1_pluriel_nom_dictee_01.json @@ -0,0 +1,20 @@ +{ + "id": "ce1_pluriel_nom_dictee_01", + "level": "CE1", + "domain": "grammaire", + "rule_ids": ["regle_pluriel_nom"], + "difficulty": 1, + "target_text": "Les chats jouent dans le jardin.", + "words": [ + { "text": "Les", "expects_capital": true }, + { "text": "chats", "rule_id": "regle_pluriel_nom" }, + { "text": "jouent" }, + { "text": "dans" }, + { "text": "le" }, + { "text": "jardin." } + ], + "audio_id": "ce1_pluriel_nom_dictee_01", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce1_pluriel_nom_dictee_02.json b/data/dictations/ce1_pluriel_nom_dictee_02.json new file mode 100644 index 0000000..2742162 --- /dev/null +++ b/data/dictations/ce1_pluriel_nom_dictee_02.json @@ -0,0 +1,20 @@ +{ + "id": "ce1_pluriel_nom_dictee_02", + "level": "CE1", + "domain": "grammaire", + "rule_ids": ["regle_pluriel_nom"], + "difficulty": 2, + "target_text": "Le cahier est sur la table.", + "words": [ + { "text": "Le", "expects_capital": true }, + { "text": "cahier", "rule_id": "regle_pluriel_nom" }, + { "text": "est" }, + { "text": "sur" }, + { "text": "la" }, + { "text": "table." } + ], + "audio_id": "ce1_pluriel_nom_dictee_02", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/dictations/ce1_pluriel_nom_dictee_03.json b/data/dictations/ce1_pluriel_nom_dictee_03.json new file mode 100644 index 0000000..02f4b5c --- /dev/null +++ b/data/dictations/ce1_pluriel_nom_dictee_03.json @@ -0,0 +1,21 @@ +{ + "id": "ce1_pluriel_nom_dictee_03", + "level": "CE1", + "domain": "grammaire", + "rule_ids": ["regle_pluriel_nom"], + "difficulty": 3, + "target_text": "Les petites pommes sont dans le panier.", + "words": [ + { "text": "Les", "expects_capital": true }, + { "text": "petites" }, + { "text": "pommes", "rule_id": "regle_pluriel_nom" }, + { "text": "sont" }, + { "text": "dans" }, + { "text": "le" }, + { "text": "panier." } + ], + "audio_id": "ce1_pluriel_nom_dictee_03", + "audio_provisional": true, + "accepted_variants": [], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_accord_determinant_correction_01.json b/data/exercises/ce1/ce1_accord_determinant_correction_01.json new file mode 100644 index 0000000..d0afd0f --- /dev/null +++ b/data/exercises/ce1/ce1_accord_determinant_correction_01.json @@ -0,0 +1,25 @@ +{ + "id": "ce1_accord_determinant_correction_01", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_accord_determinant", + "difficulty": 1, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Le", + "correct": false, + "expected": "La", + "rule_id": "regle_accord_determinant" + }, + { "text": "fleur", "correct": true }, + { "text": "est", "correct": true }, + { "text": "jolie.", "correct": true } + ], + "hint": "Le nom « fleur » est feminin.", + "explanation": "« Fleur » est un nom feminin : il faut le determinant feminin « La ».", + "review_tags": ["genre", "accord_determinant"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_accord_determinant_correction_02.json b/data/exercises/ce1/ce1_accord_determinant_correction_02.json new file mode 100644 index 0000000..3ecfce1 --- /dev/null +++ b/data/exercises/ce1/ce1_accord_determinant_correction_02.json @@ -0,0 +1,27 @@ +{ + "id": "ce1_accord_determinant_correction_02", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_accord_determinant", + "difficulty": 1, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "La", + "correct": false, + "expected": "Le", + "rule_id": "regle_accord_determinant" + }, + { "text": "chat", "correct": true }, + { "text": "dort", "correct": true }, + { "text": "sous", "correct": true }, + { "text": "la", "correct": true }, + { "text": "table.", "correct": true } + ], + "hint": "Le nom « chat » est masculin.", + "explanation": "« Chat » est un nom masculin : il faut le determinant masculin « Le ».", + "review_tags": ["genre", "accord_determinant"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_accord_determinant_correction_03.json b/data/exercises/ce1/ce1_accord_determinant_correction_03.json new file mode 100644 index 0000000..e174f23 --- /dev/null +++ b/data/exercises/ce1/ce1_accord_determinant_correction_03.json @@ -0,0 +1,24 @@ +{ + "id": "ce1_accord_determinant_correction_03", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_accord_determinant", + "difficulty": 2, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Le", + "correct": false, + "expected": "Les", + "rule_id": "regle_accord_determinant" + }, + { "text": "chats", "correct": true }, + { "text": "dorment.", "correct": true } + ], + "hint": "Le nom « chats » est au pluriel.", + "explanation": "« Chats » est au pluriel : il faut le determinant pluriel « Les ».", + "review_tags": ["pluriel", "accord_determinant"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_accord_determinant_correction_04.json b/data/exercises/ce1/ce1_accord_determinant_correction_04.json new file mode 100644 index 0000000..25e6d38 --- /dev/null +++ b/data/exercises/ce1/ce1_accord_determinant_correction_04.json @@ -0,0 +1,26 @@ +{ + "id": "ce1_accord_determinant_correction_04", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_accord_determinant", + "difficulty": 3, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { + "text": "Le", + "correct": false, + "expected": "Les", + "rule_id": "regle_accord_determinant" + }, + { "text": "petites", "correct": true }, + { "text": "fleurs", "correct": true }, + { "text": "sont", "correct": true }, + { "text": "jolies.", "correct": true } + ], + "hint": "Cherche le nom auquel le determinant se rapporte, meme si un autre mot s'intercale.", + "explanation": "Le determinant se rapporte a « fleurs », qui est feminin pluriel, meme si l'adjectif « petites » s'intercale : il faut ecrire « Les ».", + "review_tags": ["pluriel", "accord_determinant"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_accord_determinant_qcm_01.json b/data/exercises/ce1/ce1_accord_determinant_qcm_01.json new file mode 100644 index 0000000..9f0e2c8 --- /dev/null +++ b/data/exercises/ce1/ce1_accord_determinant_qcm_01.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_accord_determinant_qcm_01", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_accord_determinant", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon determinant.", + "question": "... chat dort.", + "answers": ["Le", "La"], + "correct_answer": 0, + "hint": "Le nom « chat » est masculin.", + "explanation": "« Chat » est un nom masculin : il faut le determinant masculin « Le ».", + "review_tags": ["genre", "accord_determinant"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_accord_determinant_qcm_02.json b/data/exercises/ce1/ce1_accord_determinant_qcm_02.json new file mode 100644 index 0000000..91d32b8 --- /dev/null +++ b/data/exercises/ce1/ce1_accord_determinant_qcm_02.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_accord_determinant_qcm_02", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_accord_determinant", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon determinant.", + "question": "... fleur sent bon.", + "answers": ["Le", "La"], + "correct_answer": 1, + "hint": "Le nom « fleur » est feminin.", + "explanation": "« Fleur » est un nom feminin : il faut le determinant feminin « La ».", + "review_tags": ["genre", "accord_determinant"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_accord_determinant_qcm_03.json b/data/exercises/ce1/ce1_accord_determinant_qcm_03.json new file mode 100644 index 0000000..31e66ca --- /dev/null +++ b/data/exercises/ce1/ce1_accord_determinant_qcm_03.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_accord_determinant_qcm_03", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_accord_determinant", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon determinant.", + "question": "... chats dorment.", + "answers": ["Le", "Les"], + "correct_answer": 1, + "hint": "Le nom « chats » est au pluriel.", + "explanation": "« Chats » est au pluriel : il faut le determinant pluriel « Les ».", + "review_tags": ["pluriel", "accord_determinant"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_accord_determinant_qcm_04.json b/data/exercises/ce1/ce1_accord_determinant_qcm_04.json new file mode 100644 index 0000000..6902ed1 --- /dev/null +++ b/data/exercises/ce1/ce1_accord_determinant_qcm_04.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_accord_determinant_qcm_04", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_accord_determinant", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon determinant.", + "question": "... fleurs sentent bon.", + "answers": ["La", "Les"], + "correct_answer": 1, + "hint": "Le nom « fleurs » est au pluriel.", + "explanation": "« Fleurs » est au pluriel : il faut le determinant pluriel « Les ».", + "review_tags": ["pluriel", "accord_determinant"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_accord_determinant_qcm_05.json b/data/exercises/ce1/ce1_accord_determinant_qcm_05.json new file mode 100644 index 0000000..2c76b4d --- /dev/null +++ b/data/exercises/ce1/ce1_accord_determinant_qcm_05.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_accord_determinant_qcm_05", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_accord_determinant", + "difficulty": 2, + "type": "multiple_choice", + "instruction": "Choisis le bon determinant.", + "question": "J'ai ... chat noir.", + "answers": ["un", "une"], + "correct_answer": 0, + "hint": "Le nom « chat » est masculin.", + "explanation": "« Chat » est un nom masculin : il faut le determinant masculin « un ».", + "review_tags": ["genre", "accord_determinant"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_accord_determinant_qcm_06.json b/data/exercises/ce1/ce1_accord_determinant_qcm_06.json new file mode 100644 index 0000000..debecda --- /dev/null +++ b/data/exercises/ce1/ce1_accord_determinant_qcm_06.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_accord_determinant_qcm_06", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_accord_determinant", + "difficulty": 2, + "type": "multiple_choice", + "instruction": "Choisis le bon determinant.", + "question": "J'ai ... fleur rouge.", + "answers": ["un", "une"], + "correct_answer": 1, + "hint": "Le nom « fleur » est feminin.", + "explanation": "« Fleur » est un nom feminin : il faut le determinant feminin « une ».", + "review_tags": ["genre", "accord_determinant"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_accord_determinant_qcm_07.json b/data/exercises/ce1/ce1_accord_determinant_qcm_07.json new file mode 100644 index 0000000..4f0ccbc --- /dev/null +++ b/data/exercises/ce1/ce1_accord_determinant_qcm_07.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_accord_determinant_qcm_07", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_accord_determinant", + "difficulty": 3, + "type": "multiple_choice", + "instruction": "Choisis le bon determinant.", + "question": "... arbre est grand.", + "answers": ["Le", "La"], + "correct_answer": 0, + "hint": "« Arbre » se termine par un -e, mais il est masculin.", + "explanation": "« Arbre » est un nom masculin, meme s'il se termine par -e : il faut le determinant masculin « Le ».", + "review_tags": ["genre", "accord_determinant"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_accord_determinant_qcm_08.json b/data/exercises/ce1/ce1_accord_determinant_qcm_08.json new file mode 100644 index 0000000..791eee8 --- /dev/null +++ b/data/exercises/ce1/ce1_accord_determinant_qcm_08.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_accord_determinant_qcm_08", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_accord_determinant", + "difficulty": 3, + "type": "multiple_choice", + "instruction": "Choisis le bon determinant.", + "question": "... maison est grande.", + "answers": ["Le", "La"], + "correct_answer": 1, + "hint": "« Maison » se termine par un -n, mais ecoute bien son genre.", + "explanation": "« Maison » est un nom feminin : il faut le determinant feminin « La ».", + "review_tags": ["genre", "accord_determinant"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_pluriel_nom_correction_01.json b/data/exercises/ce1/ce1_pluriel_nom_correction_01.json new file mode 100644 index 0000000..442212c --- /dev/null +++ b/data/exercises/ce1/ce1_pluriel_nom_correction_01.json @@ -0,0 +1,27 @@ +{ + "id": "ce1_pluriel_nom_correction_01", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_pluriel_nom", + "difficulty": 1, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { "text": "Les", "correct": true }, + { + "text": "chat", + "correct": false, + "expected": "chats", + "rule_id": "regle_pluriel_nom" + }, + { "text": "dorment", "correct": true }, + { "text": "dans", "correct": true }, + { "text": "le", "correct": true }, + { "text": "jardin.", "correct": true } + ], + "hint": "Le determinant « les » indique plusieurs chats.", + "explanation": "Le nom « chat » doit prendre la marque du pluriel, un -s, car il est annonce par « les » : il faut ecrire « chats ».", + "review_tags": ["pluriel", "pluriel_nom"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_pluriel_nom_correction_02.json b/data/exercises/ce1/ce1_pluriel_nom_correction_02.json new file mode 100644 index 0000000..9702f9b --- /dev/null +++ b/data/exercises/ce1/ce1_pluriel_nom_correction_02.json @@ -0,0 +1,27 @@ +{ + "id": "ce1_pluriel_nom_correction_02", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_pluriel_nom", + "difficulty": 1, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { "text": "Des", "correct": true }, + { + "text": "pomme", + "correct": false, + "expected": "pommes", + "rule_id": "regle_pluriel_nom" + }, + { "text": "sont", "correct": true }, + { "text": "dans", "correct": true }, + { "text": "le", "correct": true }, + { "text": "panier.", "correct": true } + ], + "hint": "Le determinant « des » indique plusieurs pommes.", + "explanation": "Le nom « pomme » doit prendre la marque du pluriel, un -s, car il est annonce par « des » : il faut ecrire « pommes ».", + "review_tags": ["pluriel", "pluriel_nom"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_pluriel_nom_correction_03.json b/data/exercises/ce1/ce1_pluriel_nom_correction_03.json new file mode 100644 index 0000000..05b31c5 --- /dev/null +++ b/data/exercises/ce1/ce1_pluriel_nom_correction_03.json @@ -0,0 +1,24 @@ +{ + "id": "ce1_pluriel_nom_correction_03", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_pluriel_nom", + "difficulty": 2, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { "text": "Le", "correct": true }, + { + "text": "chiens", + "correct": false, + "expected": "chien", + "rule_id": "regle_pluriel_nom" + }, + { "text": "dort.", "correct": true } + ], + "hint": "Le determinant « le » indique un seul chien.", + "explanation": "« Le » indique un seul animal : le nom reste au singulier, sans -s : « chien ».", + "review_tags": ["pluriel_nom"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_pluriel_nom_correction_04.json b/data/exercises/ce1/ce1_pluriel_nom_correction_04.json new file mode 100644 index 0000000..026d6b7 --- /dev/null +++ b/data/exercises/ce1/ce1_pluriel_nom_correction_04.json @@ -0,0 +1,28 @@ +{ + "id": "ce1_pluriel_nom_correction_04", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_pluriel_nom", + "difficulty": 3, + "type": "sentence_correction", + "instruction": "Touche le mot qui contient une erreur, puis corrige-le.", + "tokens": [ + { "text": "Les", "correct": true }, + { "text": "petits", "correct": true }, + { + "text": "chat", + "correct": false, + "expected": "chats", + "rule_id": "regle_pluriel_nom" + }, + { "text": "jouent", "correct": true }, + { "text": "dans", "correct": true }, + { "text": "le", "correct": true }, + { "text": "jardin.", "correct": true } + ], + "hint": "Cherche le determinant, meme si un autre mot s'intercale avant le nom.", + "explanation": "« Les » indique le pluriel, meme si l'adjectif « petits » s'intercale avant le nom : il faut ecrire « chats ».", + "review_tags": ["pluriel", "pluriel_nom"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_pluriel_nom_qcm_01.json b/data/exercises/ce1/ce1_pluriel_nom_qcm_01.json new file mode 100644 index 0000000..89b08e0 --- /dev/null +++ b/data/exercises/ce1/ce1_pluriel_nom_qcm_01.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_pluriel_nom_qcm_01", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_pluriel_nom", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Les ... jouent dans le jardin.", + "answers": ["chat", "chats"], + "correct_answer": 1, + "hint": "Le determinant « les » indique plusieurs chats.", + "explanation": "Pour former le pluriel d'un nom, on ajoute un -s a la fin : « chats ».", + "review_tags": ["pluriel", "pluriel_nom"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_pluriel_nom_qcm_02.json b/data/exercises/ce1/ce1_pluriel_nom_qcm_02.json new file mode 100644 index 0000000..ab9090d --- /dev/null +++ b/data/exercises/ce1/ce1_pluriel_nom_qcm_02.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_pluriel_nom_qcm_02", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_pluriel_nom", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Des ... poussent dans le jardin.", + "answers": ["fleur", "fleurs"], + "correct_answer": 1, + "hint": "Le determinant « des » indique plusieurs fleurs.", + "explanation": "Pour former le pluriel d'un nom, on ajoute un -s a la fin : « fleurs ».", + "review_tags": ["pluriel", "pluriel_nom"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_pluriel_nom_qcm_03.json b/data/exercises/ce1/ce1_pluriel_nom_qcm_03.json new file mode 100644 index 0000000..1bf673c --- /dev/null +++ b/data/exercises/ce1/ce1_pluriel_nom_qcm_03.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_pluriel_nom_qcm_03", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_pluriel_nom", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Les ... sont rouges.", + "answers": ["pomme", "pommes"], + "correct_answer": 1, + "hint": "Le determinant « les » indique plusieurs pommes.", + "explanation": "Pour former le pluriel d'un nom, on ajoute un -s a la fin : « pommes ».", + "review_tags": ["pluriel", "pluriel_nom"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_pluriel_nom_qcm_04.json b/data/exercises/ce1/ce1_pluriel_nom_qcm_04.json new file mode 100644 index 0000000..9df169a --- /dev/null +++ b/data/exercises/ce1/ce1_pluriel_nom_qcm_04.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_pluriel_nom_qcm_04", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_pluriel_nom", + "difficulty": 1, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Des ... roulent sur la route.", + "answers": ["voiture", "voitures"], + "correct_answer": 1, + "hint": "Le determinant « des » indique plusieurs voitures.", + "explanation": "Pour former le pluriel d'un nom, on ajoute un -s a la fin : « voitures ».", + "review_tags": ["pluriel", "pluriel_nom"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_pluriel_nom_qcm_05.json b/data/exercises/ce1/ce1_pluriel_nom_qcm_05.json new file mode 100644 index 0000000..a0ff26f --- /dev/null +++ b/data/exercises/ce1/ce1_pluriel_nom_qcm_05.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_pluriel_nom_qcm_05", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_pluriel_nom", + "difficulty": 2, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Le ... est sur la table.", + "answers": ["cahier", "cahiers"], + "correct_answer": 0, + "hint": "Le determinant « le » indique un seul cahier.", + "explanation": "« Le » indique un seul objet : le nom reste au singulier, sans -s : « cahier ».", + "review_tags": ["pluriel_nom"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_pluriel_nom_qcm_06.json b/data/exercises/ce1/ce1_pluriel_nom_qcm_06.json new file mode 100644 index 0000000..5d62e6a --- /dev/null +++ b/data/exercises/ce1/ce1_pluriel_nom_qcm_06.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_pluriel_nom_qcm_06", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_pluriel_nom", + "difficulty": 2, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "La ... est ouverte.", + "answers": ["porte", "portes"], + "correct_answer": 0, + "hint": "Le determinant « la » indique une seule porte.", + "explanation": "« La » indique un seul objet : le nom reste au singulier, sans -s : « porte ».", + "review_tags": ["pluriel_nom"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_pluriel_nom_qcm_07.json b/data/exercises/ce1/ce1_pluriel_nom_qcm_07.json new file mode 100644 index 0000000..db8b921 --- /dev/null +++ b/data/exercises/ce1/ce1_pluriel_nom_qcm_07.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_pluriel_nom_qcm_07", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_pluriel_nom", + "difficulty": 3, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Les petits ... courent vite.", + "answers": ["chien", "chiens"], + "correct_answer": 1, + "hint": "Cherche le determinant, meme si un autre mot s'intercale avant le nom.", + "explanation": "« Les » indique le pluriel, meme si l'adjectif « petits » s'intercale avant le nom : il faut ecrire « chiens ».", + "review_tags": ["pluriel", "pluriel_nom"], + "review_status": "draft" +} diff --git a/data/exercises/ce1/ce1_pluriel_nom_qcm_08.json b/data/exercises/ce1/ce1_pluriel_nom_qcm_08.json new file mode 100644 index 0000000..e0f138c --- /dev/null +++ b/data/exercises/ce1/ce1_pluriel_nom_qcm_08.json @@ -0,0 +1,17 @@ +{ + "id": "ce1_pluriel_nom_qcm_08", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "rule_id": "regle_pluriel_nom", + "difficulty": 3, + "type": "multiple_choice", + "instruction": "Choisis le bon mot.", + "question": "Les jolies ... sentent bon.", + "answers": ["fleur", "fleurs"], + "correct_answer": 1, + "hint": "Cherche le determinant, meme si un autre mot s'intercale avant le nom.", + "explanation": "« Les » indique le pluriel, meme si l'adjectif « jolies » s'intercale avant le nom : il faut ecrire « fleurs ».", + "review_tags": ["pluriel", "pluriel_nom"], + "review_status": "draft" +} diff --git a/data/missions/mission_04_ruche_qui_multiplie.json b/data/missions/mission_04_ruche_qui_multiplie.json new file mode 100644 index 0000000..97b1725 --- /dev/null +++ b/data/missions/mission_04_ruche_qui_multiplie.json @@ -0,0 +1,9 @@ +{ + "mission_id": "mission_04_ruche_qui_multiplie", + "title": "La ruche qui se multiplie", + "narrative_context": "Dans la ruche, chaque mot veut savoir s'il doit rester seul ou se multiplier. Aide les abeilles a choisir la bonne forme avant que le miel ne deborde !", + "rule_id": "regle_pluriel_nom", + "exercise_type": "multiple_choice", + "map_position": { "x": 0.12, "y": 0.15 }, + "review_status": "draft" +} diff --git a/data/missions/mission_05_verger_paniers_pleins.json b/data/missions/mission_05_verger_paniers_pleins.json new file mode 100644 index 0000000..e594e91 --- /dev/null +++ b/data/missions/mission_05_verger_paniers_pleins.json @@ -0,0 +1,9 @@ +{ + "mission_id": "mission_05_verger_paniers_pleins", + "title": "Le verger aux paniers pleins", + "narrative_context": "Les paniers du verger portent des etiquettes, mais certaines se sont trompees de nombre. Trouve l'etiquette fautive et corrige-la avant la recolte.", + "rule_id": "regle_pluriel_nom", + "exercise_type": "sentence_correction", + "map_position": { "x": 0.38, "y": 0.12 }, + "review_status": "draft" +} diff --git a/data/missions/mission_06_mare_grenouilles.json b/data/missions/mission_06_mare_grenouilles.json new file mode 100644 index 0000000..4e471ef --- /dev/null +++ b/data/missions/mission_06_mare_grenouilles.json @@ -0,0 +1,9 @@ +{ + "mission_id": "mission_06_mare_grenouilles", + "title": "La mare aux grenouilles chanteuses", + "narrative_context": "Les grenouilles de la mare chantent une phrase, une seule fois. Ecoute-les bien et ecris exactement ce qu'elles chantent.", + "rule_id": "regle_pluriel_nom", + "exercise_type": "dictation", + "map_position": { "x": 0.65, "y": 0.15 }, + "review_status": "draft" +} diff --git a/data/missions/mission_07_sentier_bons_compagnons.json b/data/missions/mission_07_sentier_bons_compagnons.json new file mode 100644 index 0000000..b378b78 --- /dev/null +++ b/data/missions/mission_07_sentier_bons_compagnons.json @@ -0,0 +1,9 @@ +{ + "mission_id": "mission_07_sentier_bons_compagnons", + "title": "Le sentier des bons compagnons", + "narrative_context": "Chaque mot du sentier cherche son compagnon : le bon petit mot qui l'accompagne toujours. Aide-les a se retrouver sans se tromper.", + "rule_id": "regle_accord_determinant", + "exercise_type": "multiple_choice", + "map_position": { "x": 0.9, "y": 0.3 }, + "review_status": "draft" +} diff --git a/data/missions/mission_08_cabane_etiquettes.json b/data/missions/mission_08_cabane_etiquettes.json new file mode 100644 index 0000000..0675a5b --- /dev/null +++ b/data/missions/mission_08_cabane_etiquettes.json @@ -0,0 +1,9 @@ +{ + "mission_id": "mission_08_cabane_etiquettes", + "title": "La cabane aux etiquettes melangees", + "narrative_context": "Dans la cabane, les etiquettes des objets ont ete melangees par le vent. Repere celle qui ne va pas et remets le bon petit mot devant.", + "rule_id": "regle_accord_determinant", + "exercise_type": "sentence_correction", + "map_position": { "x": 0.92, "y": 0.78 }, + "review_status": "draft" +} diff --git a/data/missions/mission_09_rocher_qui_repete.json b/data/missions/mission_09_rocher_qui_repete.json new file mode 100644 index 0000000..2e1f247 --- /dev/null +++ b/data/missions/mission_09_rocher_qui_repete.json @@ -0,0 +1,9 @@ +{ + "mission_id": "mission_09_rocher_qui_repete", + "title": "Le rocher qui repete", + "narrative_context": "Le vieux rocher de la foret repete une phrase, une seule fois, avant de se rendormir. Ecoute bien et ecris-la sans faute.", + "rule_id": "regle_accord_determinant", + "exercise_type": "dictation", + "map_position": { "x": 0.45, "y": 0.88 }, + "review_status": "draft" +} diff --git a/data/rules/regle_accord_determinant.json b/data/rules/regle_accord_determinant.json new file mode 100644 index 0000000..2c62a8a --- /dev/null +++ b/data/rules/regle_accord_determinant.json @@ -0,0 +1,9 @@ +{ + "rule_id": "regle_accord_determinant", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "statement": "Le determinant (le, la, les, un, une, des...) s'accorde en genre et en nombre avec le nom qu'il accompagne.", + "example": "Le chat. La fleur. Les chats. Les fleurs.", + "review_status": "draft" +} diff --git a/data/rules/regle_pluriel_nom.json b/data/rules/regle_pluriel_nom.json new file mode 100644 index 0000000..160e79f --- /dev/null +++ b/data/rules/regle_pluriel_nom.json @@ -0,0 +1,9 @@ +{ + "rule_id": "regle_pluriel_nom", + "level": "CE1", + "domain": "grammaire", + "skill": "accord_groupe_nominal", + "statement": "Le plus souvent, on forme le pluriel d'un nom en ajoutant un -s a la fin du mot.", + "example": "Un chat. Des chats. Une fleur. Des fleurs.", + "review_status": "draft" +} diff --git a/docs/review/content-review.md b/docs/review/content-review.md index 563bb40..8c401d1 100644 --- a/docs/review/content-review.md +++ b/docs/review/content-review.md @@ -95,3 +95,189 @@ Genere automatiquement depuis `data/` par `tools/generate_content_review.py`. Ne - Audio : provisoire - Statut : draft +## regle_accord_determinant (CE1, grammaire) + +**Enonce** : Le determinant (le, la, les, un, une, des...) s'accorde en genre et en nombre avec le nom qu'il accompagne. + +**Exemple** : Le chat. La fleur. Les chats. Les fleurs. + +**Statut** : draft + +### Choix multiples + +- **ce1_accord_determinant_qcm_01** (difficulte 1) : ... chat dort. + - Reponses : Le, La + - Reponse attendue : Le + - Indice : Le nom « chat » est masculin. + - Explication : « Chat » est un nom masculin : il faut le determinant masculin « Le ». + - Statut : draft +- **ce1_accord_determinant_qcm_02** (difficulte 1) : ... fleur sent bon. + - Reponses : Le, La + - Reponse attendue : La + - Indice : Le nom « fleur » est feminin. + - Explication : « Fleur » est un nom feminin : il faut le determinant feminin « La ». + - Statut : draft +- **ce1_accord_determinant_qcm_03** (difficulte 1) : ... chats dorment. + - Reponses : Le, Les + - Reponse attendue : Les + - Indice : Le nom « chats » est au pluriel. + - Explication : « Chats » est au pluriel : il faut le determinant pluriel « Les ». + - Statut : draft +- **ce1_accord_determinant_qcm_04** (difficulte 1) : ... fleurs sentent bon. + - Reponses : La, Les + - Reponse attendue : Les + - Indice : Le nom « fleurs » est au pluriel. + - Explication : « Fleurs » est au pluriel : il faut le determinant pluriel « Les ». + - Statut : draft +- **ce1_accord_determinant_qcm_05** (difficulte 2) : J'ai ... chat noir. + - Reponses : un, une + - Reponse attendue : un + - Indice : Le nom « chat » est masculin. + - Explication : « Chat » est un nom masculin : il faut le determinant masculin « un ». + - Statut : draft +- **ce1_accord_determinant_qcm_06** (difficulte 2) : J'ai ... fleur rouge. + - Reponses : un, une + - Reponse attendue : une + - Indice : Le nom « fleur » est feminin. + - Explication : « Fleur » est un nom feminin : il faut le determinant feminin « une ». + - Statut : draft +- **ce1_accord_determinant_qcm_07** (difficulte 3) : ... arbre est grand. + - Reponses : Le, La + - Reponse attendue : Le + - Indice : « Arbre » se termine par un -e, mais il est masculin. + - Explication : « Arbre » est un nom masculin, meme s'il se termine par -e : il faut le determinant masculin « Le ». + - Statut : draft +- **ce1_accord_determinant_qcm_08** (difficulte 3) : ... maison est grande. + - Reponses : Le, La + - Reponse attendue : La + - Indice : « Maison » se termine par un -n, mais ecoute bien son genre. + - Explication : « Maison » est un nom feminin : il faut le determinant feminin « La ». + - Statut : draft + +### Corrections de phrase + +- **ce1_accord_determinant_correction_01** (difficulte 1) : [Le -> La] fleur est jolie. + - Indice : Le nom « fleur » est feminin. + - Explication : « Fleur » est un nom feminin : il faut le determinant feminin « La ». + - Statut : draft +- **ce1_accord_determinant_correction_02** (difficulte 1) : [La -> Le] chat dort sous la table. + - Indice : Le nom « chat » est masculin. + - Explication : « Chat » est un nom masculin : il faut le determinant masculin « Le ». + - Statut : draft +- **ce1_accord_determinant_correction_03** (difficulte 2) : [Le -> Les] chats dorment. + - Indice : Le nom « chats » est au pluriel. + - Explication : « Chats » est au pluriel : il faut le determinant pluriel « Les ». + - Statut : draft +- **ce1_accord_determinant_correction_04** (difficulte 3) : [Le -> Les] petites fleurs sont jolies. + - Indice : Cherche le nom auquel le determinant se rapporte, meme si un autre mot s'intercale. + - Explication : Le determinant se rapporte a « fleurs », qui est feminin pluriel, meme si l'adjectif « petites » s'intercale : il faut ecrire « Les ». + - Statut : draft + +### Dictees + +- **ce1_accord_determinant_dictee_01** : Le chat dort. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft +- **ce1_accord_determinant_dictee_02** : La fleur est belle. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft +- **ce1_accord_determinant_dictee_03** : Les petites fleurs sont jolies. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft + +## regle_pluriel_nom (CE1, grammaire) + +**Enonce** : Le plus souvent, on forme le pluriel d'un nom en ajoutant un -s a la fin du mot. + +**Exemple** : Un chat. Des chats. Une fleur. Des fleurs. + +**Statut** : draft + +### Choix multiples + +- **ce1_pluriel_nom_qcm_01** (difficulte 1) : Les ... jouent dans le jardin. + - Reponses : chat, chats + - Reponse attendue : chats + - Indice : Le determinant « les » indique plusieurs chats. + - Explication : Pour former le pluriel d'un nom, on ajoute un -s a la fin : « chats ». + - Statut : draft +- **ce1_pluriel_nom_qcm_02** (difficulte 1) : Des ... poussent dans le jardin. + - Reponses : fleur, fleurs + - Reponse attendue : fleurs + - Indice : Le determinant « des » indique plusieurs fleurs. + - Explication : Pour former le pluriel d'un nom, on ajoute un -s a la fin : « fleurs ». + - Statut : draft +- **ce1_pluriel_nom_qcm_03** (difficulte 1) : Les ... sont rouges. + - Reponses : pomme, pommes + - Reponse attendue : pommes + - Indice : Le determinant « les » indique plusieurs pommes. + - Explication : Pour former le pluriel d'un nom, on ajoute un -s a la fin : « pommes ». + - Statut : draft +- **ce1_pluriel_nom_qcm_04** (difficulte 1) : Des ... roulent sur la route. + - Reponses : voiture, voitures + - Reponse attendue : voitures + - Indice : Le determinant « des » indique plusieurs voitures. + - Explication : Pour former le pluriel d'un nom, on ajoute un -s a la fin : « voitures ». + - Statut : draft +- **ce1_pluriel_nom_qcm_05** (difficulte 2) : Le ... est sur la table. + - Reponses : cahier, cahiers + - Reponse attendue : cahier + - Indice : Le determinant « le » indique un seul cahier. + - Explication : « Le » indique un seul objet : le nom reste au singulier, sans -s : « cahier ». + - Statut : draft +- **ce1_pluriel_nom_qcm_06** (difficulte 2) : La ... est ouverte. + - Reponses : porte, portes + - Reponse attendue : porte + - Indice : Le determinant « la » indique une seule porte. + - Explication : « La » indique un seul objet : le nom reste au singulier, sans -s : « porte ». + - Statut : draft +- **ce1_pluriel_nom_qcm_07** (difficulte 3) : Les petits ... courent vite. + - Reponses : chien, chiens + - Reponse attendue : chiens + - Indice : Cherche le determinant, meme si un autre mot s'intercale avant le nom. + - Explication : « Les » indique le pluriel, meme si l'adjectif « petits » s'intercale avant le nom : il faut ecrire « chiens ». + - Statut : draft +- **ce1_pluriel_nom_qcm_08** (difficulte 3) : Les jolies ... sentent bon. + - Reponses : fleur, fleurs + - Reponse attendue : fleurs + - Indice : Cherche le determinant, meme si un autre mot s'intercale avant le nom. + - Explication : « Les » indique le pluriel, meme si l'adjectif « jolies » s'intercale avant le nom : il faut ecrire « fleurs ». + - Statut : draft + +### Corrections de phrase + +- **ce1_pluriel_nom_correction_01** (difficulte 1) : Les [chat -> chats] dorment dans le jardin. + - Indice : Le determinant « les » indique plusieurs chats. + - Explication : Le nom « chat » doit prendre la marque du pluriel, un -s, car il est annonce par « les » : il faut ecrire « chats ». + - Statut : draft +- **ce1_pluriel_nom_correction_02** (difficulte 1) : Des [pomme -> pommes] sont dans le panier. + - Indice : Le determinant « des » indique plusieurs pommes. + - Explication : Le nom « pomme » doit prendre la marque du pluriel, un -s, car il est annonce par « des » : il faut ecrire « pommes ». + - Statut : draft +- **ce1_pluriel_nom_correction_03** (difficulte 2) : Le [chiens -> chien] dort. + - Indice : Le determinant « le » indique un seul chien. + - Explication : « Le » indique un seul animal : le nom reste au singulier, sans -s : « chien ». + - Statut : draft +- **ce1_pluriel_nom_correction_04** (difficulte 3) : Les petits [chat -> chats] jouent dans le jardin. + - Indice : Cherche le determinant, meme si un autre mot s'intercale avant le nom. + - Explication : « Les » indique le pluriel, meme si l'adjectif « petits » s'intercale avant le nom : il faut ecrire « chats ». + - Statut : draft + +### Dictees + +- **ce1_pluriel_nom_dictee_01** : Les chats jouent dans le jardin. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft +- **ce1_pluriel_nom_dictee_02** : Le cahier est sur la table. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft +- **ce1_pluriel_nom_dictee_03** : Les petites pommes sont dans le panier. + - Variantes acceptees : aucune + - Audio : provisoire + - Statut : draft + diff --git a/docs/specs/decisions.md b/docs/specs/decisions.md index 01c24eb..bf935b7 100644 --- a/docs/specs/decisions.md +++ b/docs/specs/decisions.md @@ -220,3 +220,17 @@ Ajouts à l'arborescence proposée : **Ajout** : deux dictées supplémentaires (`ce1_accord_adjectif_dictee_02`, difficulté 2, féminin singulier ; `ce1_accord_adjectif_dictee_03`, difficulté 3, féminin pluriel avec nom et adjectif séparés par un complément, comme aux points 18 et 23), portant le total à 3 pour ce chapitre — le minimum du cahier des charges. Audio généré avec `make generate-dictation-audio` (voix Piper, voir point 20), crédité dans `assets/CREDITS.md`. Toutes en `review_status: draft`. **Volume minimal du cahier des charges désormais atteint pour `regle_accord_adjectif`** : 8 choix multiples (point 23), 4 corrections de phrase (point 18), 3 dictées (ci-dessus). Les deux autres règles CE1 prévues par prompt-lancement.md (pluriel du nom, accord du déterminant) et le chapitre CE2 (homophones grammaticaux) restent à écrire entièrement. + +## 25. Extension explicite au-delà du périmètre prototype du §15 + +**Contexte** : prompt-lancement.md est explicite — « Tout ce qui sort du §15 est hors périmètre [...] Ne l'implémente pas [sans le signaler] », et le §15 du cahier des charges scope la première version jouable à « une carte avec trois lieux accessibles » et « un chapitre CE1 sur les accords dans le groupe nominal » (sans préciser que les trois règles de ce chapitre doivent toutes être jouables). Les trois missions existantes couvraient déjà ce périmètre : une par type d'exercice, toutes sur `regle_accord_adjectif`. Ajouter les deux règles CE1 restantes du chapitre (pluriel du nom, accord du déterminant), chacune avec ses trois missions (comme pour `regle_accord_adjectif`), porte la carte à neuf lieux — au-delà du §15. Conformément à CLAUDE.md (« en cas de contradiction ou d'ambiguïté, poser la question »), la question a été posée avant d'implémenter : extension confirmée. + +**Décision** : extension assumée au-delà du prototype §15, en production de contenu plutôt qu'en validation d'architecture. `scenes/world/world_map.gd` reste purement piloté par les données (aucune limite codée en dur sur le nombre de missions), donc aucun changement de code n'était nécessaire pour accueillir plus de lieux — seul le commentaire de tête de fichier, qui affirmait « trois lieux », a été corrigé pour ne pas induire en erreur. + +**Ajouté** : +- Deux nouvelles règles CE1, même compétence `accord_groupe_nominal` que `regle_accord_adjectif` (même granularité de suivi de maîtrise que l'existant) : `regle_pluriel_nom` (« on forme le pluriel d'un nom en ajoutant un -s ») et `regle_accord_determinant` (« le déterminant s'accorde en genre et en nombre avec le nom »). +- Pour chacune : 8 choix multiples, 4 corrections de phrase, 3 dictées — le même volume minimal que pour `regle_accord_adjectif` (points 18, 23, 24), réparti sur les 3 niveaux de difficulté. Vocabulaire volontairement restreint à des noms réguliers (chat, fleur, pomme, cahier, porte, voiture, chien, maison, arbre...) pour rester sur la règle enseignée sans exposer d'exceptions (ex. pluriels en -x) non couvertes par l'énoncé de la règle. +- Six nouvelles missions (`mission_04` à `mission_09`), une par type d'exercice et par règle, sur le thème de « La forêt des accords » déjà établi. `data/curriculum/ce1_accords_groupe_nominal.json` mis à jour avec les trois `rule_ids` (toujours non consommé par le moteur, voir point 14 — métadonnée de référence uniquement). +- Audio des 6 nouvelles dictées généré avec `make generate-dictation-audio` (voix Piper, point 20), crédité dans `assets/CREDITS.md`. + +**Non vérifié** : la disposition des 9 lieux sur la carte (positions fractionnelles choisies à l'écart les unes des autres, mais jamais vues à l'écran) — à vérifier à la main, voir `docs/testing/manual-checklist.md`. diff --git a/docs/testing/manual-checklist.md b/docs/testing/manual-checklist.md index 7ada652..9c7ce2d 100644 --- a/docs/testing/manual-checklist.md +++ b/docs/testing/manual-checklist.md @@ -7,7 +7,7 @@ Tout ce qui suit ne peut pas être vérifié sans écran (rendu, mise en page, a 1. `make run`. 2. Écran de sélection de profil vide → bouton « Nouveau profil » visible et cliquable. 3. Création de profil : le bouton de validation refuse un prénom vide avec un message visible (pas seulement une absence de réaction) ; CE1 est sélectionné par défaut ; le bouton CE2 bascule correctement l'état visuel des deux boutons (ils doivent se comporter comme des boutons radio, un seul actif à la fois). -4. Après création, arrivée sur la carte (« La forêt des accords ») avec trois lieux visibles et positionnés à des endroits différents, pas superposés. +4. Après création, arrivée sur la carte (« La forêt des accords ») avec **neuf** lieux visibles (point 25 de `decisions.md` : extension au-delà du prototype §15) et positionnés à des endroits différents, **jamais vérifié à l'écran avec ce nombre de lieux** — vérifier particulièrement qu'aucun marqueur ne se superpose à un autre, surtout sur petit écran. 5. Chaque lieu affiche un intitulé et un état (« À découvrir », etc.) lisible. 6. Clic sur un lieu → introduction de la mission : le texte narratif s'affiche en entier (pas tronqué), Plume (le hibou) affiche la même phrase dans sa bulle. 7. « Commencer la mission » → panneau de règle : énoncé et exemple lisibles, bouton « C'est parti ! » visible. @@ -16,6 +16,7 @@ Tout ce qui suit ne peut pas être vérifié sans écran (rendu, mise en page, a 10. Mission « Le pont des phrases » (correction de phrase) : toucher un mot le fait apparaître comme sélectionné (état visuel distinct, pas seulement une couleur) ; un champ de saisie apparaît sous le mot sélectionné ; toucher à nouveau le mot fait disparaître le champ. 11. Mission « La clairière de l'écho » (dictée) : à l'arrivée sur l'exercice, la voix de synthèse doit se faire entendre automatiquement ; le bouton « Réécouter » la rejoue sans planter ; le badge « Voix provisoire » est visible ; la zone de saisie accepte le texte et les accents. Le rappel « N'oublie pas : une majuscule au début de la phrase et un point à la fin ! » doit être visible (point 22 de `decisions.md`) ; taper le texte sans majuscule ou sans point final doit être refusé, avec l'erreur correspondante. 12. Après 3 exercices, écran de récompense avec le nombre d'étoiles, puis retour à la carte. +12bis. Répéter rapidement les points 8-12 sur une mission de chacune des deux nouvelles règles (« La ruche qui se multiplie » pour le pluriel du nom, « Le sentier des bons compagnons » pour l'accord du déterminant) : jamais vu à l'écran, seulement validé en headless (point 25 de `decisions.md`). 13. Quitter le jeu puis relancer `make run` : le profil et sa progression doivent être conservés (sélectionner le même profil, vérifier que l'état affiché sur la carte a changé par rapport à l'état initial). 14. Depuis la sélection de profil, supprimer un profil : une confirmation explicite doit apparaître avant la suppression effective ; annuler doit ne rien supprimer. diff --git a/scenes/world/world_map.gd b/scenes/world/world_map.gd index ddca6fb..68a23ff 100644 --- a/scenes/world/world_map.gd +++ b/scenes/world/world_map.gd @@ -1,7 +1,10 @@ extends Control -## Carte a trois lieux (cahier des charges §15). La position de chaque mission -## vient de data/missions/*.json (fractions 0..1 de la zone de carte), jamais -## d'une position fixe en dur dans le script. +## Carte des missions. Le prototype initial (cahier des charges §15) se +## limitait a trois lieux ; le perimetre a ete etendu au-dela (voir +## docs/specs/decisions.md, point 25) pour couvrir plus d'une regle par +## chapitre. La position de chaque mission vient de data/missions/*.json +## (fractions 0..1 de la zone de carte), jamais d'une position fixe en dur +## dans le script. const MARKER_HALF_WIDTH := 80.0 const MARKER_HALF_HEIGHT := 36.0 diff --git a/tests/exercises/test_exercise_engine.gd b/tests/exercises/test_exercise_engine.gd index bfddad5..ccfd600 100644 --- a/tests/exercises/test_exercise_engine.gd +++ b/tests/exercises/test_exercise_engine.gd @@ -15,10 +15,11 @@ func test_unknown_rule_returns_empty_dictionary() -> void: func test_missions_are_loaded_and_sorted() -> void: var missions := ExerciseEngine.get_missions() - assert_eq(missions.size(), 3) + assert_eq(missions.size(), 9) var ids: Array = missions.map(func(m: Dictionary) -> String: return m["mission_id"]) assert_eq(ids, ids.duplicate()) # trivialement vrai, documente l'ordre stable assert_true(ids.has("mission_01_pre_des_mots")) + assert_true(ids.has("mission_09_rocher_qui_repete")) func test_get_mission_returns_the_requested_mission() -> void: