diff --git a/frontend/src/dialogues/socialnetwork/VocabPracticeDialog.vue b/frontend/src/dialogues/socialnetwork/VocabPracticeDialog.vue index 39e09f9..e0a54c6 100644 --- a/frontend/src/dialogues/socialnetwork/VocabPracticeDialog.vue +++ b/frontend/src/dialogues/socialnetwork/VocabPracticeDialog.vue @@ -933,8 +933,13 @@ export default { if (!id) return; const st = this.perId[id] || { c: 0, w: 0, streak: 0, lastAsked: 0 }; if (isCorrect) { - st.c += 1; - st.streak = st.streak >= 0 ? st.streak + 1 : 1; + // Hard-phase drills are tracked separately via hardMasteryByKey. + // We avoid inflating normal success counters here, otherwise the + // graduated vocab can become too unlikely in regular rotation. + if (!this.hardPhaseActive) { + st.c += 1; + st.streak = st.streak >= 0 ? st.streak + 1 : 1; + } if (this.hardPhaseActive && this.current) { const key = this.getHardKey(this.current); this.hardMasteryByKey[key] = Math.max(0, Number(this.hardMasteryByKey[key]) || 0) + 1;