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
@@ -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"
}