feat: add sticky error-aware key mastery

Persist ranked-only mastery and use it consistently across progression, milestones, counts, and localized UI. Preserve mastery during history rebuilds, replay errors accurately, and generate replay-derived test profiles. Document the follow-up plan to remove the drill history cap.
This commit is contained in:
2026-08-12 01:09:52 -04:00
parent 0f8493eb02
commit 5daa644d3b
47 changed files with 2683 additions and 722 deletions
+17 -6
View File
@@ -319,13 +319,13 @@ milestones:
open_skill_tree: 'Appuyez sur [t] pour ouvrir l''Arbre de Compétences'
branch_complete_msg: 'Vous avez terminé la branche %{branch} !'
all_levels_mastered: 'Les %{count} niveaux sont maîtrisés.'
all_keys_confident: 'Chaque touche de cette branche est à confiance maximale.'
all_keys_confident: 'Chaque touche de cette branche est maîtrisée.'
all_unlocked_msg: 'Vous avez déverrouillé toutes les touches du clavier !'
all_unlocked_desc: 'Chaque caractère, symbole et modificateur est disponible dans vos exercices.'
keep_practicing_mastery: 'Continuez à pratiquer pour atteindre la maîtrise — quand chaque touche atteindra'
confidence_complete: 'la confiance maximale, vous aurez atteint la maîtrise totale du clavier !'
keep_practicing_mastery: 'Continuez à pratiquer — quand chaque touche sera maîtrisée,'
confidence_complete: 'vous aurez atteint la maîtrise totale du clavier !'
all_mastered_msg: 'Félicitations — vous avez atteint la maîtrise totale du clavier !'
all_mastered_desc: 'Chaque touche du clavier est à confiance maximale.'
all_mastered_desc: 'Chaque touche du clavier est maîtrisée.'
mastery_takes_practice: 'La maîtrise n''est pas une destination — elle nécessite une pratique continue.'
keep_drilling: 'Continuez à vous entraîner pour garder votre niveau.'
hint_skill_tree_continue: 'Ouvrir l''Arbre de Compétences [Autre touche] Continuer'
@@ -335,16 +335,24 @@ milestones:
unlock_msg_2: 'Une touche de plus dans votre arsenal !'
unlock_msg_3: 'Votre clavier s''agrandit ! Continuez !'
unlock_msg_4: 'Un pas de plus vers la maîtrise totale !'
mastery_msg_1: 'Cette touche est à confiance maximale !'
unlock_msg_plural_1: 'Bon travail ! Continuez à améliorer vos compétences.'
unlock_msg_plural_2: 'Plusieurs touches de plus dans votre arsenal !'
unlock_msg_plural_3: 'Votre clavier s''agrandit ! Continuez !'
unlock_msg_plural_4: 'Quelques pas de plus vers la maîtrise totale !'
mastery_msg_1: 'Cette touche est maîtrisée.'
mastery_msg_2: 'Vous maîtrisez cette touche parfaitement !'
mastery_msg_3: 'Mémoire musculaire acquise !'
mastery_msg_4: 'Une touche de plus conquise !'
mastery_msg_plural_1: 'Ces touches sont maîtrisées.'
mastery_msg_plural_2: 'Vous maîtrisez ces touches parfaitement !'
mastery_msg_plural_3: 'Mémoire musculaire acquise !'
mastery_msg_plural_4: 'Plusieurs touches de plus conquises !'
# Superposition d'introduction à l'exercice adaptatif
adaptive_intro:
title: ' Bienvenue sur keydr ! '
how_it_works: 'Comment fonctionnent les exercices adaptatifs :'
description: 'Vous commencez avec un petit ensemble des lettres les plus courantes déverrouillées. L''exercice ne génère que des mots qui utilisent ces lettres. Au fur et à mesure que vous les tapez avec confiance, de nouvelles touches se déverrouillent progressivement jusqu''à ce que vous ayez maîtrisé le clavier complet.'
description: 'Vous commencez avec un petit ensemble des lettres les plus courantes déverrouillées. L''exercice ne génère que des mots qui utilisent ces lettres. Au fur et à mesure que vous les maîtrisez, de nouvelles touches se déverrouillent progressivement jusqu''à ce que vous ayez maîtrisé le clavier complet.'
target_wpm_label: 'WPM Objectif :'
target_wpm_desc: 'Cela influence la vitesse de déverrouillage des touches — des objectifs plus élevés nécessitent une frappe plus rapide. 35 WPM est un bon point de départ si vous n''êtes pas sûr. Vous pouvez toujours modifier cela plus tard dans les paramètres.'
hint_adjust: 'Régler WPM'
@@ -390,6 +398,9 @@ keyboard:
in_focus_label: 'En Focus ? : '
mastery_label: 'Maîtrise : '
mastery_locked: 'Verrouillé'
mastery_mastered: 'Maîtrisée'
mastery_in_progress: 'En cours'
speed_confidence_label: 'Confiance de vitesse : '
ranked_avg_time: 'Temps Moy. Classé : '
ranked_best_time: 'Meilleur Temps Classé : '
ranked_samples: 'Échantillons Classés : '