Add regle_pluriel_nom and regle_accord_determinant (CE1)

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 <noreply@anthropic.com>
This commit is contained in:
Denis Defolie
2026-10-11 21:36:04 +02:00
parent 26d588f1bc
commit 1c036658bc
57 changed files with 993 additions and 9 deletions
+1 -3
View File
@@ -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.
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
+9
View File
@@ -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"
}
+9
View File
@@ -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"
}
+186
View File
@@ -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
+14
View File
@@ -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`.
+2 -1
View File
@@ -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.
+6 -3
View File
@@ -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
+2 -1
View File
@@ -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: