fix(vocab): restore due daily reviews after empty session
All checks were successful
Deploy to production / deploy (push) Successful in 2m6s

This commit is contained in:
Torsten Schulz (local)
2026-09-30 10:32:32 +02:00
parent 01752ddb3e
commit 017e3f1a1b
2 changed files with 11 additions and 7 deletions

View File

@@ -143,7 +143,9 @@ const PRACTICE_MIN_EXPOSURES = 3;
// The original daily batch remains stable when the dialog is reopened.
// Keep in sync with VocabCourseView. v3 discards legacy empty sessions that
// could block cards due later on the same calendar day.
const SRS_SESSION_STORAGE_VERSION = 3;
// Keep this in sync with VocabCourseView. Version 4 discards stale empty
// sessions that could mask a new daily SRS batch.
const SRS_SESSION_STORAGE_VERSION = 4;
const HARD_REQUIRED_CONSECUTIVE_CORRECT = 5;
const MAX_DAILY_DUE = 50;
const MAX_DAILY_HARD_VOCABS = 7;

View File

@@ -377,7 +377,9 @@ import { localizeVocabCourseTitle } from '@/utils/vocabCourseTitle.js';
// v3 invalidates old empty daily sessions. Those could be created before a
// scheduled card became visible and then incorrectly hide today's due batch.
const SRS_SESSION_STORAGE_VERSION = 3;
// Version 4 invalidates the old zero-card day sessions. Those sessions could
// hide a server-reported due backlog for the rest of a calendar day.
const SRS_SESSION_STORAGE_VERSION = 4;
export default {
name: 'VocabCourseView',
@@ -602,11 +604,11 @@ export default {
return;
}
const total = Math.max(0, Number(session.initialTotalDue) || 0);
// A session with no originally scheduled cards must not take
// precedence over cards that are now due. This happened when the
// page was opened before the old time-of-day threshold and kept a
// zero-card session for the rest of the calendar day.
if (total === 0 && this.srsDueItems.length > 0) {
// A session with no originally scheduled cards must never take
// precedence over a server-reported due backlog. Check the server
// total rather than just the loaded first page of cards: an empty or
// late item array must not turn e.g. "588 due" into "0 of 0 today".
if (total === 0 && this.srsDueCount > 0) {
localStorage.removeItem(key);
this.srsTodayRemaining = null;
this.srsTodayQuota = null;