Practice

Drilling a study's own book moves, with a per-position knowledge score that fades over time.

Purpose and access

The Stats tab reports how good a study is if perfectly memorized; Practice is where that memorization actually happens. Each session drills exactly one study's own-side moves and updates a per-position knowledge score that decays with time, so the numbers reflect real, current recall rather than "was once learned." Requires Lichess sign-in, same as Studies and Stats.

Practice list

Knowledge score

Tracked per position — one own-side decision node in the tree, since the tree already guarantees exactly one prepared reply there. Not tracked for opponent nodes; there is nothing to know about a move you don't choose.

Each position carries a streak (0–3 consecutive correct answers), a stability value in days, and the timestamp of its last attempt. A correct answer increments the streak and doubles the stability; a wrong answer resets both the streak and the stability to their starting values. Retention at any moment is $$r = e^{-t/s},$$ where \(t\) is days since the last attempt — 100% right after a correct answer, decaying continuously afterward, faster for low-stability (fresh) positions than high-stability (well-rehearsed) ones.

The streak cap and the stability growth are independent: once the streak is already at 3, a further correct answer leaves it at 3 but still doubles the stability. So answering correctly always resets retention to 100% at that instant — regardless of how low it had decayed to beforehand, since that decayed value only ever mattered for whether the position was due for review in the first place — and correctly answering a fully-known position repeatedly keeps extending how long it takes to become due again, not just until it first reaches streak 3.

The displayed knowledge score is $$K = \frac{\text{streak}}{3} \times r,$$ or "Not started" if never attempted. A position answered correctly once today shows 33%, not 100% — one repetition is progress, not mastery. A position mastered weeks ago and gone stale can show less than a position learned yesterday; a faded mastery is genuinely worse than fresh partial progress, and the number should say so. A position becomes due for review once its retention drops below a fixed threshold (80%), independent of the number currently shown for it.

Session mechanics

A session starts from the study's effective starting point (its custom starting point if one is set, otherwise the tree's real root — same resolution rule the Stats tab uses) and builds a bounded queue (default 20 positions): due positions first, oldest first, then new positions in tree order. Not leverage-ranked; queue order is due-ness only. If that leaves nothing queued but the study has drill items, the queue falls back to a voluntary review of whatever isn't already at a full, rounded 100% knowledge, oldest-practiced first — only if literally everything is at 100% does it fall back further, to reviewing all of them. Practice is never blocked just because the schedule is currently satisfied, but a mostly-mastered line also shouldn't have to be re-answered from its first move just to reach the one position that's actually worth reviewing: since only selected nodes get prompted (everything else is silently auto-played), excluding maxed-out nodes from that fallback is what makes the session start right at the first move that isn't already perfect.

Session view reuses the Study editor's board, theme, and piece set, with the Opening Explorer panel hidden. Its Stockfish toggle is kept, though, as a read-only "explore this position" option — arrows and a ranked eval list, no click-to-play — available at any point in the session for understanding why a missed move was right.

Reaching a rounded 100% knowledge score pauses the otherwise open-ended session with a one-time celebration — a short animation, then an explicit choice between "End session" and "Continue practicing" — rather than silently rolling into another round. It only fires once per tab visit, not on every subsequent correct answer that happens to still be at 100%.

Data model

Practice state is stored separately from a study's tree — it changes on every attempt, not on every Save — keyed by owner, study, and node ID: streak, stability, and last-attempt timestamp per position. The knowledge score itself is never stored; it is always computed from those three fields plus the current time, so tuning the decay formula later needs no migration.

Deleting a subtree orphans its practice rows harmlessly, since a deleted node ID is never reused. Rebuilding "the same" line afterward gets a new node ID and starts with no practice history — intentional: a rebuilt line is honestly a new thing to learn, not a continuation of a branch that no longer structurally exists.

Scope and limits

Full design write-up