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: 'Premi [t] per aprire l''Albero delle Abilità'
branch_complete_msg: 'Hai completato il ramo %{branch}!'
all_levels_mastered: 'Tutti i %{count} livelli padroneggiati.'
all_keys_confident: 'Ogni tasto in questo ramo è a confidenza massima.'
all_keys_confident: 'Ogni tasto in questo ramo è stato padroneggiato.'
all_unlocked_msg: 'Hai sbloccato tutti i tasti della tastiera!'
all_unlocked_desc: 'Ogni carattere, simbolo e modificatore è disponibile nei tuoi esercizi.'
keep_practicing_mastery: 'Continua a esercitarti per raggiungere la padronanza — quando ogni tasto raggiungerà'
confidence_complete: 'la confidenza massima, avrai raggiunto la padronanza totale della tastiera!'
keep_practicing_mastery: 'Continua a esercitarti — quando ogni tasto sarà padroneggiato,'
confidence_complete: 'avrai raggiunto la padronanza totale della tastiera!'
all_mastered_msg: 'Congratulazioni — hai raggiunto la padronanza totale della tastiera!'
all_mastered_desc: 'Ogni tasto della tastiera è a confidenza massima.'
all_mastered_desc: 'Ogni tasto della tastiera è stato padroneggiato.'
mastery_takes_practice: 'La padronanza non è una destinazione — richiede pratica continua.'
keep_drilling: 'Continua ad esercitarti per mantenere il tuo livello.'
hint_skill_tree_continue: 'Apri Albero delle Abilità [Altro tasto] Continua'
@@ -335,16 +335,24 @@ milestones:
unlock_msg_2: 'Un altro tasto aggiunto al tuo arsenale!'
unlock_msg_3: 'La tua tastiera cresce! Continua così.'
unlock_msg_4: 'Un passo più vicino alla padronanza totale!'
mastery_msg_1: 'Questo tasto è a confidenza massima!'
unlock_msg_plural_1: 'Ottimo lavoro! Continua a migliorare le tue abilità.'
unlock_msg_plural_2: 'Altri tasti aggiunti al tuo arsenale!'
unlock_msg_plural_3: 'La tua tastiera cresce! Continua così.'
unlock_msg_plural_4: 'Diversi passi più vicino alla padronanza totale!'
mastery_msg_1: 'Questo tasto è stato padroneggiato.'
mastery_msg_2: 'Hai questo tasto sotto controllo!'
mastery_msg_3: 'Memoria muscolare acquisita!'
mastery_msg_4: 'Un altro tasto conquistato!'
mastery_msg_plural_1: 'Questi tasti sono stati padroneggiati.'
mastery_msg_plural_2: 'Hai questi tasti sotto controllo!'
mastery_msg_plural_3: 'Memoria muscolare acquisita!'
mastery_msg_plural_4: 'Altri tasti conquistati!'
# Sovrapposizione introduzione esercizio adattivo
adaptive_intro:
title: ' Benvenuto su keydr! '
how_it_works: 'Come funzionano gli esercizi adattivi:'
description: 'Inizi con un piccolo insieme delle lettere più comuni sbloccate. L''esercizio genera solo parole che usano queste lettere. Man mano che le digiti con sicurezza, nuovi tasti vengono gradualmente sbloccati finché non hai padroneggiato la tastiera completa.'
description: 'Inizi con un piccolo insieme delle lettere più comuni sbloccate. L''esercizio genera solo parole che usano queste lettere. Man mano che le padroneggi, nuovi tasti vengono gradualmente sbloccati finché non hai padroneggiato la tastiera completa.'
target_wpm_label: 'WPM Obiettivo:'
target_wpm_desc: 'Questo influenza la velocità di sblocco dei tasti — obiettivi più alti richiedono una digitazione più veloce. 35 WPM è un buon punto di partenza se non sei sicuro. Puoi sempre modificarlo più tardi nelle impostazioni.'
hint_adjust: 'Regola WPM'
@@ -390,6 +398,9 @@ keyboard:
in_focus_label: 'In Focus?: '
mastery_label: 'Padronanza: '
mastery_locked: 'Bloccato'
mastery_mastered: 'Padroneggiato'
mastery_in_progress: 'In corso'
speed_confidence_label: 'Confidenza velocità: '
ranked_avg_time: 'Tempo Med. Classificato: '
ranked_best_time: 'Miglior Tempo Classificato: '
ranked_samples: 'Campioni Classificati: '