Does scheduler v3 schedule a card with a card with 2 days interval with 3 months as scheduler v2?

I had some cards that due to siblings burring took 2 months to come back to my review. The problem is that the old card interval was 2 days, but the card shows up 3 months later, anki hard button 3 days (ok), but the good/easy buttons show some quite big intervals (3 and 7 months). I would expect something like 14 and 25 days).

I do not use any addons that change the scheduling of cards (awesometts-anki-addon, bury_source_siblings, speed-focus-mode, advanced_copy_fields, Color Confirmation)

It looks like that just because the card took some time to show up (due to siblings burying), anki thinks the card was scheduled previously with something like a 1.9-month interval, while it was not true.


The behaviour should be the same in both: Due times after a break - Frequently Asked Questions

I see, thank you for the link. I think for now I will stick with Hard button, which gradually increases instead of jumping big as Good and Easy buttons do. This is because if I jump as big as they suggest, I would more often forget than remember, but this problem is only with new cards or cards I do not know quite well. Usually, after a long time, I remember them at luck, and two days later I just forget about them at all.

This scheduler was causing too much trouble for my sibling’s cards, I fixed the code by removing the extra kick-off of sibling cards.

It takes the last interval as a base, instead of some
possible high value (i.e., since the last study),
but only replaces if the value is lower than the default
Anki algorithm to not schedule cards worse than before.

--- a/pylib/anki/scheduler/
+++ b/pylib/anki/scheduler/
@@ -962,7 +962,13 @@ limit ?"""
     def _daysLate(self, card: Card) -> int:
         "Number of days later than scheduled."
         due = card.odue if card.odid else card.due
-        return max(0, - due)
+        delay = max(0, - due)
+        lastIvl = card.lastIvl if hasattr(card, 'lastIvl') else ( card.ivl if hasattr(card, 'ivl') else 5 )
+        lastIvl = lastIvl if lastIvl > 0 else 3
+        # print(f'{} Default delay {delay}, Fixed delay {lastIvl}, Using new {lastIvl < delay}.')
+        if lastIvl < delay:
+            delay = lastIvl
+        return delay
     def _updateRevIvl(self, card: Card, ease: int) -> None:
         card.ivl = self._nextRevIvl(card, ease, fuzz=True)