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 0000000..f1030db Binary files /dev/null and b/assets/audio/dictations/ce1_accord_determinant_dictee_01.ogg differ 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 0000000..7da938b Binary files /dev/null and b/assets/audio/dictations/ce1_accord_determinant_dictee_02.ogg differ 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 0000000..5d01f56 Binary files /dev/null and b/assets/audio/dictations/ce1_accord_determinant_dictee_03.ogg differ diff --git a/assets/audio/dictations/ce1_accord_determinant_dictee_03.ogg.import b/assets/audio/dictations/ce1_accord_determinant_dictee_03.ogg.import new file mode 100644 index 0000000..3ae7ad5 --- /dev/null +++ b/assets/audio/dictations/ce1_accord_determinant_dictee_03.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://chhy2c0fhp2mc" +path="res://.godot/imported/ce1_accord_determinant_dictee_03.ogg-4b09ab70b613e4162faee4b32eabf794.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce1_accord_determinant_dictee_03.ogg" +dest_files=["res://.godot/imported/ce1_accord_determinant_dictee_03.ogg-4b09ab70b613e4162faee4b32eabf794.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_01.ogg b/assets/audio/dictations/ce1_pluriel_nom_dictee_01.ogg new file mode 100644 index 0000000..264f6d9 Binary files /dev/null and b/assets/audio/dictations/ce1_pluriel_nom_dictee_01.ogg differ 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 0000000..5cd562c Binary files /dev/null and b/assets/audio/dictations/ce1_pluriel_nom_dictee_02.ogg differ diff --git a/assets/audio/dictations/ce1_pluriel_nom_dictee_02.ogg.import b/assets/audio/dictations/ce1_pluriel_nom_dictee_02.ogg.import new file mode 100644 index 0000000..baa316f --- /dev/null +++ b/assets/audio/dictations/ce1_pluriel_nom_dictee_02.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://oc6rdjac3hjn" +path="res://.godot/imported/ce1_pluriel_nom_dictee_02.ogg-b4060318d276b46038ffd375f2e1fbeb.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/dictations/ce1_pluriel_nom_dictee_02.ogg" +dest_files=["res://.godot/imported/ce1_pluriel_nom_dictee_02.ogg-b4060318d276b46038ffd375f2e1fbeb.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_03.ogg b/assets/audio/dictations/ce1_pluriel_nom_dictee_03.ogg new file mode 100644 index 0000000..cd3d821 Binary files /dev/null and b/assets/audio/dictations/ce1_pluriel_nom_dictee_03.ogg differ 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: