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: 'Nacisnij [t], aby otworzyc drzewo umiejetnosci'
branch_complete_msg: 'Ukonczyles galaz %{branch}!'
all_levels_mastered: 'Wszystkie %{count} poziomow opanowanych.'
all_keys_confident: 'Kazdy klawisz w tej galezi jest na pelnej pewnosci.'
all_keys_confident: 'Kazdy klawisz w tej galezi zostal opanowany.'
all_unlocked_msg: 'Odblokowano kazdy klawisz na klawiaturze!'
all_unlocked_desc: 'Kazdy znak, symbol i modyfikator jest teraz dostepny w Twoich treningach.'
keep_practicing_mastery: 'Kontynuuj cwiczenie, aby budowac bieglosc — gdy kazdy klawisz osiagnie pelna'
confidence_complete: 'pewnosc, osiagniesz pelne opanowanie klawiatury!'
keep_practicing_mastery: 'Kontynuuj cwiczenie — gdy kazdy klawisz zostanie opanowany,'
confidence_complete: 'osiagniesz pelne opanowanie klawiatury!'
all_mastered_msg: 'Gratulacje — osiagnales pelne opanowanie klawiatury!'
all_mastered_desc: 'Kazdy klawisz na klawiaturze jest na maksymalnej pewnosci.'
all_mastered_desc: 'Kazdy klawisz na klawiaturze zostal opanowany.'
mastery_takes_practice: 'Bieglosc to nie cel — wymaga ciaglej praktyki.'
keep_drilling: 'Kontynuuj treningi, aby utrzymac swoj poziom.'
hint_skill_tree_continue: 'Otworz drzewo [Inny klawisz] Kontynuuj'
@@ -335,16 +335,24 @@ milestones:
unlock_msg_2: 'Kolejny klawisz w Twoim arsenale!'
unlock_msg_3: 'Twoja klawiatura rosnie! Tak trzymaj.'
unlock_msg_4: 'Krok blizej do pelnego opanowania klawiatury!'
mastery_msg_1: 'Ten klawisz jest teraz na pelnej pewnosci!'
unlock_msg_plural_1: 'Swietna robota! Rozwijaj swoje umiejetnosci pisania.'
unlock_msg_plural_2: 'Wiecej klawiszy w Twoim arsenale!'
unlock_msg_plural_3: 'Twoja klawiatura rosnie! Tak trzymaj.'
unlock_msg_plural_4: 'Kilka krokow blizej do pelnego opanowania klawiatury!'
mastery_msg_1: 'Ten klawisz zostal opanowany.'
mastery_msg_2: 'Ten klawisz masz w malym palcu!'
mastery_msg_3: 'Pamiec miesniowa zablokowana!'
mastery_msg_4: 'Kolejny klawisz podbity!'
mastery_msg_plural_1: 'Te klawisze zostaly opanowane.'
mastery_msg_plural_2: 'Te klawisze masz w malym palcu!'
mastery_msg_plural_3: 'Pamiec miesniowa zablokowana!'
mastery_msg_plural_4: 'Wiecej klawiszy podbitych!'
# Adaptive drill intro overlay
adaptive_intro:
title: ' Witaj w keydr! '
how_it_works: 'Jak dzialaja treningi adaptacyjne:'
description: 'Zaczynasz z malym zestawem najczestszych liter odblokowanych. Trening generuje tylko slowa, ktore uzywaja tych liter. W miare jak piszesz je pewnie, nowe klawisze sa stopniowo odblokowywane, az opanujesz cala klawiature.'
description: 'Zaczynasz z malym zestawem najczestszych liter odblokowanych. Trening generuje tylko slowa, ktore uzywaja tych liter. W miare jak je opanowujesz, nowe klawisze sa stopniowo odblokowywane, az opanujesz cala klawiature.'
target_wpm_label: 'Docelowy WPM:'
target_wpm_desc: 'Wplywa to na szybkosc odblokowywania klawiszy — wyzsze cele wymagaja szybszego pisania. 35 WPM to dobry punkt startowy, jesli nie jestes pewien. Zawsze mozesz to zmienic pozniej w ustawieniach.'
hint_adjust: 'Dostosuj WPM'
@@ -390,6 +398,9 @@ keyboard:
in_focus_label: 'W fokusie?: '
mastery_label: 'Bieglosc: '
mastery_locked: 'Zablokowany'
mastery_mastered: 'Opanowany'
mastery_in_progress: 'W toku'
speed_confidence_label: 'Pewnosc szybkosci: '
ranked_avg_time: 'Rankingowy sr czas: '
ranked_best_time: 'Rankingowy najl czas: '
ranked_samples: 'Rankingowe probki: '