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: 'Presiona [t] para abrir el Árbol de Habilidades'
branch_complete_msg: '¡Has completado la rama %{branch}!'
all_levels_mastered: 'Los %{count} niveles dominados.'
all_keys_confident: 'Cada tecla en esta rama está a máxima confianza.'
all_keys_confident: 'Cada tecla en esta rama ha sido dominada.'
all_unlocked_msg: '¡Has desbloqueado todas las teclas del teclado!'
all_unlocked_desc: 'Cada carácter, símbolo y modificador está disponible en tus ejercicios.'
keep_practicing_mastery: 'Sigue practicando para alcanzar el dominio — cuando cada tecla llegue a'
confidence_complete: 'máxima confianza, ¡habrás logrado el dominio total del teclado!'
keep_practicing_mastery: 'Sigue practicando — cuando cada tecla haya sido dominada,'
confidence_complete: '¡habrás logrado el dominio total del teclado!'
all_mastered_msg: '¡Felicidades — has alcanzado el dominio total del teclado!'
all_mastered_desc: 'Cada tecla del teclado está a máxima confianza.'
all_mastered_desc: 'Cada tecla del teclado ha sido dominada.'
mastery_takes_practice: 'El dominio no es un destino — requiere práctica continua.'
keep_drilling: 'Sigue practicando para mantener tu nivel.'
hint_skill_tree_continue: 'Abrir Árbol de Habilidades [Otra tecla] Continuar'
@@ -335,16 +335,24 @@ milestones:
unlock_msg_2: '¡Otra tecla añadida a tu arsenal!'
unlock_msg_3: '¡Tu teclado crece! Sigue así.'
unlock_msg_4: '¡Un paso más cerca del dominio total!'
mastery_msg_1: Esta tecla está a máxima confianza!'
unlock_msg_plural_1: Buen trabajo! Sigue mejorando tus habilidades.'
unlock_msg_plural_2: '¡Más teclas añadidas a tu arsenal!'
unlock_msg_plural_3: '¡Tu teclado crece! Sigue así.'
unlock_msg_plural_4: '¡Varios pasos más cerca del dominio total!'
mastery_msg_1: '¡Esta tecla ha sido dominada!'
mastery_msg_2: '¡Dominas esta tecla a la perfección!'
mastery_msg_3: '¡Memoria muscular asegurada!'
mastery_msg_4: '¡Una tecla más conquistada!'
mastery_msg_plural_1: '¡Estas teclas han sido dominadas!'
mastery_msg_plural_2: '¡Dominas estas teclas a la perfección!'
mastery_msg_plural_3: '¡Memoria muscular asegurada!'
mastery_msg_plural_4: '¡Más teclas conquistadas!'
# Superposición de introducción al ejercicio adaptativo
adaptive_intro:
title: ' ¡Bienvenido a keydr! '
how_it_works: 'Cómo funcionan los ejercicios adaptativos:'
description: 'Comienzas con un pequeño conjunto de las letras más comunes desbloqueadas. El ejercicio solo genera palabras que usan estas letras. A medida que las escribes con confianza, nuevas teclas se desbloquean gradualmente hasta que dominas el teclado completo.'
description: 'Comienzas con un pequeño conjunto de las letras más comunes desbloqueadas. El ejercicio solo genera palabras que usan estas letras. A medida que las dominas, nuevas teclas se desbloquean gradualmente hasta que dominas el teclado completo.'
target_wpm_label: 'WPM Objetivo:'
target_wpm_desc: 'Esto afecta la velocidad con que se desbloquean las teclas — objetivos más altos requieren escritura más rápida. 35 WPM es un buen punto de partida si no estás seguro. Siempre puedes cambiar esto más tarde en la configuración.'
hint_adjust: 'Ajustar WPM'
@@ -390,6 +398,9 @@ keyboard:
in_focus_label: '¿En Foco?: '
mastery_label: 'Dominio: '
mastery_locked: 'Bloqueado'
mastery_mastered: 'Dominada'
mastery_in_progress: 'En progreso'
speed_confidence_label: 'Confianza de velocidad: '
ranked_avg_time: 'Tiempo Prom. Clasificado: '
ranked_best_time: 'Mejor Tiempo Clasificado: '
ranked_samples: 'Muestras Clasificadas: '