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: 'Press [t] to open the Skill Tree now'
branch_complete_msg: 'You''ve completed the %{branch} branch!'
all_levels_mastered: 'All %{count} levels mastered.'
all_keys_confident: 'Every key in this branch is at full confidence.'
all_keys_confident: 'Every key in this branch has been mastered.'
all_unlocked_msg: 'You''ve unlocked every key on the keyboard!'
all_unlocked_desc: 'Every character, symbol, and modifier is now available in your drills.'
keep_practicing_mastery: 'Keep practicing to build mastery — once every key reaches full'
confidence_complete: 'confidence, you''ll have achieved complete keyboard mastery!'
keep_practicing_mastery: 'Keep practicing — once every key has been mastered,'
confidence_complete: 'you''ll have achieved complete keyboard mastery!'
all_mastered_msg: 'Congratulations — you''ve reached full keyboard mastery!'
all_mastered_desc: 'Every key on the keyboard is at maximum confidence.'
all_mastered_desc: 'Every key on the keyboard has been mastered.'
mastery_takes_practice: 'Mastery is not a destination — it takes ongoing practice.'
keep_drilling: 'Keep drilling to maintain your edge.'
hint_skill_tree_continue: 'Open Skill Tree [Any other key] Continue'
@@ -335,16 +335,24 @@ milestones:
unlock_msg_2: 'Another key added to your arsenal!'
unlock_msg_3: 'Your keyboard is growing! Keep it up.'
unlock_msg_4: 'One step closer to full keyboard mastery!'
mastery_msg_1: 'This key is now at full confidence!'
unlock_msg_plural_1: 'Nice work! Keep building your typing skills.'
unlock_msg_plural_2: 'More keys added to your arsenal!'
unlock_msg_plural_3: 'Your keyboard is growing! Keep it up.'
unlock_msg_plural_4: 'Several steps closer to full keyboard mastery!'
mastery_msg_1: 'This key is now mastered.'
mastery_msg_2: 'You''ve got this key down pat!'
mastery_msg_3: 'Muscle memory locked in!'
mastery_msg_4: 'One more key conquered!'
mastery_msg_plural_1: 'These keys are now mastered.'
mastery_msg_plural_2: 'You''ve got these keys down pat!'
mastery_msg_plural_3: 'Muscle memory locked in!'
mastery_msg_plural_4: 'More keys conquered!'
# Adaptive drill intro overlay
adaptive_intro:
title: ' Welcome to keydr! '
how_it_works: 'How adaptive drills work:'
description: 'You start with a small set of the most common letters unlocked. The drill only generates words that use these letters. As you type them with confidence, new keys are gradually unlocked until you''ve mastered the full keyboard.'
description: 'You start with a small set of the most common letters unlocked. The drill only generates words that use these letters. As you master them, new keys are gradually unlocked until you''ve mastered the full keyboard.'
target_wpm_label: 'Target WPM:'
target_wpm_desc: 'This affects how quickly keys unlock — higher targets require faster typing. 35 WPM is a good starting point if unsure. You can always change this later in settings.'
hint_adjust: 'Adjust WPM'
@@ -390,6 +398,9 @@ keyboard:
in_focus_label: 'In Focus?: '
mastery_label: 'Mastery: '
mastery_locked: 'Locked'
mastery_mastered: 'Mastered'
mastery_in_progress: 'In progress'
speed_confidence_label: 'Speed confidence: '
ranked_avg_time: 'Ranked Avg Time: '
ranked_best_time: 'Ranked Best Time: '
ranked_samples: 'Ranked Samples: '