Show "Exercise N/3" so repeated content doesn't look like a freeze

Manual report: after "Bravo!", clicking Continue seemed to do
nothing. An automated test proved the mission does advance (a new
exercise instance loads, completed_count increments) -- but
mission_02_pont_des_phrases has exactly one sentence_correction
exercise in the data right now, so the "next" exercise is the
identical sentence the child just solved. Nothing was broken; there
was just no visible signal that progress happened.

Added a persistent progress label at the top of exercise_host,
updated on every exercise load. Doesn't address the underlying
content-volume gap (still tracked in decisions.md point 14), but
makes the repetition legible instead of indistinguishable from a
stall.

Rebuilt both exports.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Denis Defolie
2026-10-11 18:18:40 +02:00
parent 91dcd7e07a
commit ffb3cd5afa
5 changed files with 57 additions and 1 deletions
@@ -58,3 +58,24 @@ func test_correct_word_tap_and_retype_validates_through_exercise_host() -> void:
var skill_state := ProgressManager.get_skill_state("accord_groupe_nominal")
assert_eq(skill_state["recent_results"], [true])
# "Bravo pas de suite ici ?" : cliquer sur Continuer doit faire avancer
# la mission (deuxieme exercice charge), pas rester bloque sur le meme
# panneau.
var old_exercise_scene: Control = exercise_scene
feedback.get_node("%ContinueButton").pressed.emit()
await wait_process_frames(1)
assert_eq(host.get_completed_count(), 1, "le premier exercice doit compter comme termine")
assert_eq(overlay.get_child_count(), 0, "le panneau de retour doit disparaitre")
var new_exercise_scene: Control = host.get_node("%ExerciseContainer").get_child(0)
assert_ne(
new_exercise_scene,
old_exercise_scene,
"une nouvelle instance d'exercice doit remplacer la precedente",
)
assert_eq(host.get_attempt_number(), 1, "le nouvel exercice repart a la premiere tentative")
var progress_label: Label = host.get_node("%ProgressLabel")
assert_string_contains(progress_label.text, "2/3")