From 09ef69db919396d735dd16f06bf9bbd753dee239 Mon Sep 17 00:00:00 2001 From: Luc Mcgrady Date: Sat, 1 Nov 2025 13:00:28 +0000 Subject: [PATCH 1/4] Fix/Per deck retention not used for filtered decks --- rslib/src/scheduler/answering/mod.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rslib/src/scheduler/answering/mod.rs b/rslib/src/scheduler/answering/mod.rs index 6ff8c6e2d..7be18ba1b 100644 --- a/rslib/src/scheduler/answering/mod.rs +++ b/rslib/src/scheduler/answering/mod.rs @@ -444,8 +444,12 @@ impl Collection { .get_deck(card.deck_id)? .or_not_found(card.deck_id)?; let config = self.home_deck_config(deck.config_id(), card.original_deck_id)?; + let original_deck = self + .storage + .get_deck(card.original_or_current_deck_id())? + .ok_or(AnkiError::DatabaseCheckRequired)?; - let desired_retention = deck.effective_desired_retention(&config); + let desired_retention = original_deck.effective_desired_retention(&config); let fsrs_enabled = self.get_config_bool(BoolKey::Fsrs); let fsrs_next_states = if fsrs_enabled { let params = config.fsrs_params(); From ba5d8e4579011000f6bdd055bf785e8479500e57 Mon Sep 17 00:00:00 2001 From: Luc Mcgrady Date: Sat, 1 Nov 2025 13:45:25 +0000 Subject: [PATCH 2/4] improve error --- rslib/src/scheduler/answering/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rslib/src/scheduler/answering/mod.rs b/rslib/src/scheduler/answering/mod.rs index 7be18ba1b..05a9699cc 100644 --- a/rslib/src/scheduler/answering/mod.rs +++ b/rslib/src/scheduler/answering/mod.rs @@ -447,7 +447,7 @@ impl Collection { let original_deck = self .storage .get_deck(card.original_or_current_deck_id())? - .ok_or(AnkiError::DatabaseCheckRequired)?; + .or_not_found(card.original_or_current_deck_id())?; let desired_retention = original_deck.effective_desired_retention(&config); let fsrs_enabled = self.get_config_bool(BoolKey::Fsrs); From 0e3089d7a813244489e0abc2abcde8126e58bab9 Mon Sep 17 00:00:00 2001 From: Luc Mcgrady Date: Sun, 2 Nov 2025 22:22:35 +0000 Subject: [PATCH 3/4] Perf: prevent double "home_deck" read --- rslib/src/scheduler/answering/mod.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/rslib/src/scheduler/answering/mod.rs b/rslib/src/scheduler/answering/mod.rs index 05a9699cc..b5170c7d9 100644 --- a/rslib/src/scheduler/answering/mod.rs +++ b/rslib/src/scheduler/answering/mod.rs @@ -443,13 +443,16 @@ impl Collection { .storage .get_deck(card.deck_id)? .or_not_found(card.deck_id)?; - let config = self.home_deck_config(deck.config_id(), card.original_deck_id)?; - let original_deck = self + let home_deck = self .storage .get_deck(card.original_or_current_deck_id())? .or_not_found(card.original_or_current_deck_id())?; + let config = self + .storage + .get_deck_config(home_deck.config_id().or_invalid("home deck is filtered")?)? + .unwrap_or_default(); - let desired_retention = original_deck.effective_desired_retention(&config); + let desired_retention = home_deck.effective_desired_retention(&config); let fsrs_enabled = self.get_config_bool(BoolKey::Fsrs); let fsrs_next_states = if fsrs_enabled { let params = config.fsrs_params(); From 3b043c7e856d21f0adb2221bdeb49ab50b535834 Mon Sep 17 00:00:00 2001 From: Luc Mcgrady Date: Sun, 2 Nov 2025 23:59:48 +0000 Subject: [PATCH 4/4] Perf: prevent duplicate database read when home deck --- rslib/src/scheduler/answering/mod.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/rslib/src/scheduler/answering/mod.rs b/rslib/src/scheduler/answering/mod.rs index b5170c7d9..a71c6330f 100644 --- a/rslib/src/scheduler/answering/mod.rs +++ b/rslib/src/scheduler/answering/mod.rs @@ -443,10 +443,14 @@ impl Collection { .storage .get_deck(card.deck_id)? .or_not_found(card.deck_id)?; - let home_deck = self - .storage - .get_deck(card.original_or_current_deck_id())? - .or_not_found(card.original_or_current_deck_id())?; + let home_deck = if card.original_deck_id.0 == 0 { + &deck + } else { + &self + .storage + .get_deck(card.original_deck_id)? + .or_not_found(card.original_deck_id)? + }; let config = self .storage .get_deck_config(home_deck.config_id().or_invalid("home deck is filtered")?)?