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
+5 -2
View File
@@ -4,9 +4,9 @@ use ratatui::style::Style;
use ratatui::text::{Line, Span};
use ratatui::widgets::{Block, Paragraph, Widget};
use crate::i18n::t;
use crate::session::drill::DrillState;
use crate::session::result::DrillResult;
use crate::i18n::t;
use crate::ui::theme::Theme;
pub struct StatsSidebar<'a> {
@@ -198,7 +198,10 @@ impl Widget for StatsSidebar<'_> {
if prior_count > 0 {
lines.push(Line::from(vec![
Span::styled(vs_avg_label.as_ref(), Style::default().fg(colors.text_pending())),
Span::styled(
vs_avg_label.as_ref(),
Style::default().fg(colors.text_pending()),
),
Span::styled(wpm_delta_str, Style::default().fg(wpm_delta_color)),
]));
}