Current State
Reschedule takes []ReviewHistory (Rating + Review timestamp + State + Due + S + D) and replays every review through Next() or handleManualRating(). It handles both graded reviews and manual ratings (set due date, suspension, reset) in a single pass.
HistoricalMemoryStates takes ReviewEntries (Rating + DeltaT) and computes []MemoryState (S/D per review) via nextStateInner. It is simpler and only handles graded reviews.
Proposed Enhancement
Explore using HistoricalMemoryStates internally within Reschedule for the graded review portion of the replay. This could:
- Reduce the complexity of
Reschedule for the common case (graded-only history)
- Provide a simpler entry point for users who only need S/D reconstruction
- Keep the full
ReviewHistory path only when manual ratings are present
Expected Improvement
- Simpler API surface for the majority use case
- Better separation between "compute memory state" and "reconstruct full card with scheduling"
- Lower barrier to entry for non-advanced users
Context
Suggested by @ishiko732 during review of PR #52 (Reschedule feature).
Current State
Rescheduletakes[]ReviewHistory(Rating + Review timestamp + State + Due + S + D) and replays every review throughNext()orhandleManualRating(). It handles both graded reviews and manual ratings (set due date, suspension, reset) in a single pass.HistoricalMemoryStatestakesReviewEntries(Rating + DeltaT) and computes[]MemoryState(S/D per review) vianextStateInner. It is simpler and only handles graded reviews.Proposed Enhancement
Explore using
HistoricalMemoryStatesinternally withinReschedulefor the graded review portion of the replay. This could:Reschedulefor the common case (graded-only history)ReviewHistorypath only when manual ratings are presentExpected Improvement
Context
Suggested by @ishiko732 during review of PR #52 (Reschedule feature).