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: 'Druk op [t] om de Vaardigheidsboom te openen'
branch_complete_msg: 'Je hebt de tak %{branch} voltooid!'
all_levels_mastered: 'Alle %{count} niveaus beheerst.'
all_keys_confident: 'Elke toets in deze tak heeft vol vertrouwen.'
all_keys_confident: 'Elke toets in deze tak is beheerst.'
all_unlocked_msg: 'Je hebt elke toets op het toetsenbord ontgrendeld!'
all_unlocked_desc: 'Elk teken, symbool en elke modifier is nu beschikbaar in je oefeningen.'
keep_practicing_mastery: 'Blijf oefenen om meesterschap op te bouwen — zodra elke toets vol'
confidence_complete: 'vertrouwen bereikt, heb je volledige toetsenbordbeheersing!'
keep_practicing_mastery: 'Blijf oefenen — zodra elke toets beheerst is,'
confidence_complete: 'heb je volledige toetsenbordbeheersing bereikt!'
all_mastered_msg: 'Gefeliciteerd — je hebt volledige toetsenbordbeheersing bereikt!'
all_mastered_desc: 'Elke toets op het toetsenbord heeft maximaal vertrouwen.'
all_mastered_desc: 'Elke toets op het toetsenbord is beheerst.'
mastery_takes_practice: 'Meesterschap is geen bestemming — het vereist voortdurend oefenen.'
keep_drilling: 'Blijf oefenen om je niveau te behouden.'
hint_skill_tree_continue: 'Vaardigheidsboom [Andere toets] Doorgaan'
@@ -335,16 +335,24 @@ milestones:
unlock_msg_2: 'Weer een toets erbij in je arsenaal!'
unlock_msg_3: 'Je toetsenbord groeit! Ga zo door.'
unlock_msg_4: 'Een stap dichter bij volledige toetsenbordbeheersing!'
mastery_msg_1: 'Deze toets heeft nu vol vertrouwen!'
unlock_msg_plural_1: 'Goed gedaan! Blijf je typvaardigheden opbouwen.'
unlock_msg_plural_2: 'Meer toetsen erbij in je arsenaal!'
unlock_msg_plural_3: 'Je toetsenbord groeit! Ga zo door.'
unlock_msg_plural_4: 'Meerdere stappen dichter bij volledige toetsenbordbeheersing!'
mastery_msg_1: 'Deze toets is nu beheerst.'
mastery_msg_2: 'Je beheerst deze toets perfect!'
mastery_msg_3: 'Spiergeheugen verankerd!'
mastery_msg_4: 'Weer een toets veroverd!'
mastery_msg_plural_1: 'Deze toetsen zijn nu beheerst.'
mastery_msg_plural_2: 'Je beheerst deze toetsen perfect!'
mastery_msg_plural_3: 'Spiergeheugen verankerd!'
mastery_msg_plural_4: 'Meer toetsen veroverd!'
# Adaptive drill intro overlay
adaptive_intro:
title: ' Welkom bij keydr! '
how_it_works: 'Hoe adaptieve oefeningen werken:'
description: 'Je begint met een kleine set van de meest voorkomende letters ontgrendeld. De oefening genereert alleen woorden die deze letters gebruiken. Naarmate je ze met vertrouwen typt, worden nieuwe toetsen geleidelijk ontgrendeld totdat je het volledige toetsenbord beheerst.'
description: 'Je begint met een kleine set van de meest voorkomende letters ontgrendeld. De oefening genereert alleen woorden die deze letters gebruiken. Naarmate je ze beheerst, worden nieuwe toetsen geleidelijk ontgrendeld totdat je het volledige toetsenbord beheerst.'
target_wpm_label: 'Doel-WPM:'
target_wpm_desc: 'Dit bepaalt hoe snel toetsen ontgrendelen — hogere doelen vereisen sneller typen. 35 WPM is een goed startpunt als je het niet zeker weet. Je kunt dit later altijd wijzigen in de instellingen.'
hint_adjust: 'WPM aanpassen'
@@ -390,6 +398,9 @@ keyboard:
in_focus_label: 'In focus?: '
mastery_label: 'Beheersing: '
mastery_locked: 'Vergrendeld'
mastery_mastered: 'Beheerst'
mastery_in_progress: 'Bezig'
speed_confidence_label: 'Snelheidsvertrouwen: '
ranked_avg_time: 'Gerangschikte gem. tijd: '
ranked_best_time: 'Gerangschikte beste tijd: '
ranked_samples: 'Gerangschikte steekproeven: '