<!-- Generated from skills/spaced-repetition/SKILL.md; edit the canonical source. -->

# Spaced Repetition (Ebbinghaus, Leitner)

**Evidence tier: bedrock.** Distributed practice is one of the two highest-utility techniques in Dunlosky et al.'s (2013) review of ten learning techniques.

See also: `state-schema` KB (`spaced-review.json` shape), `difficulty-calibration` KB (why spacing works), `metacognition` KB (calibrating self-rated confidence against actual retention).

## The Forgetting Curve

Without review, memory decays steeply: most forgetting happens within the first day, and the curve keeps falling over the following weeks. (The widely-quoted percentage tables are a pop rendering of Ebbinghaus's savings-method data — the shape of the curve is the finding, not the digits.) Each successful recall resets and flattens the curve. The first review is the most critical.

## Leitner Box System (BodhiKit Implementation)

| Box | Review Interval | Meaning |
|-----|----------------|---------|
| 1   | 1 day          | New or forgotten concept |
| 2   | 3 days         | Recalled once successfully |
| 3   | 7 days         | Building retention |
| 4   | 14 days        | Strong retention |
| 5   | 30 days        | Long-term mastery |

The spacing is the bedrock part; the expanding 1/3/7/14/30 ladder is a convention. Expanding schedules have not reliably beaten equal spacing for long-term retention (Karpicke & Roediger, *Expanding retrieval practice promotes short-term retention, but equally spaced retrieval enhances long-term retention*, 2007).

**Rules (canonical — skills MUST cite this KB, not redeclare; implemented in code by `bodhi-state record-review`):**
- New concepts start in Box 1, `nextReview` = tomorrow
- Correct recall **on a due review** (today ≥ `nextReview`): move up one box (max 5), `nextReview` = today + new box interval
- **Only a due review moves the box.** A Leitner interval is earned by recalling *after* the gap. Every other correct is evidence — history, Bloom ratchet, applied flag — but not a spaced success: the box, `nextReview` and the mastery streak hold, and `record-review` reports `boxHeld`:
  - `not yet due` — before `nextReview` (a `practice` skill rep two days into a 7-day interval). With no readable `nextReview` (parked, legacy, malformed) the interval is measured from `lastReviewed`.
  - `already reviewed today` — a second graded review on the same date (`practice` skill after `teach` skill). A same-day miss still demotes; the correct that follows it is the relearning rep and holds, exactly as `--retry` does.
  - `first review` — the concept's first graded review: the lesson's own check, or a `learn` skill seed taught weeks after seeding (overdue on paper). Nothing has been spaced yet; the first promotion comes from the first recall after the gap, and `nextReview` restarts at tomorrow if it had passed.

  Why: performance during and right after instruction is an unreliable index of what is retained (Soderstrom & Bjork, *Learning versus performance: An integrative review*, 2015). Recall is easy while access is fresh and builds little; recall after access has begun to fade is what strengthens storage (Bjork & Bjork, *A new theory of disuse*, 1992). In tutoring-system data, the number of distinct days a skill was practised predicts retention a week later where the amount of practice does not (Wang & Beck, *Using student modeling to estimate student knowledge retention*, EDM 2012). Physical Leitner boxes enforce the rule by construction — a card is only seen when its box comes due.
- Incorrect recall: move to Box 1, `nextReview` = tomorrow
- Partial recall: box held, `nextReview` = tomorrow (re-test soon; partial is not a Leitner demotion — but it does reset the `consecutiveCorrectAtL4Plus` mastery streak, per the `state-schema` KB)
- Learner-initiated demote (`forget` skill, including a reset the learner asks for in `reflect` skill): same box effect as incorrect recall. A low confidence rating or a hard session is never a demotion on its own — the box tracks demonstrated recall; confidence is the separate calibration axis of the `metacognition` KB
- `nextReview` = `lastReviewed` + box interval

For the JSON shape of `spaced-review.json` and the write path, see the `state-schema` KB.

## Successive Relearning (Rawson & Dunlosky)

A missed retrieval should not end with the demotion. Within the same session, after the remaining items, **re-ask the missed concept (reframed, not verbatim) until the learner produces one successful retrieval** — cap at 2 retries, then explain and move on. The demotion to Box 1 stands either way; the in-session relearning rep is additional, not a substitute. Combining retrieval practice with relearning-to-criterion roughly doubles long-term retention versus single-shot retrieval (Rawson & Dunlosky, *Optimizing schedules of retrieval practice for durable and efficient learning*, 2011). `quiz` skill Phase 2 runs the loop; retries are recorded with `record-review --retry`, which appends the history entry WITHOUT box, counter, or bloom movement — the evidence is kept, the demotion stands.

## Retention Rollup Views (canonical — skills MUST cite this section)

For dashboards and reports, the 5-box system rolls up into one named 3-tier view. Skills MUST NOT invent their own bucket boundaries inline — `progress` skill and `evaluate` skill previously diverged on this and each invented a slightly different rollup.

**Canonical 3-tier rollup:**

| Tier | Boxes | Meaning |
|---|---|---|
| **Strong retention** | Box 4-5 | Long-term retention. Reviews are infrequent (14d / 30d intervals); the concept has held across multiple successful recalls. |
| **Building retention** | Box 2-3 | Mid-curve. The concept has been successfully recalled once or twice but has not yet stabilized at the long intervals. |
| **Needs review** | Box 1 | New concept OR demoted concept. Either freshly introduced (tomorrow's review) or returned-to-square-one by an incorrect recall / `forget` skill. |

`progress` skill Spaced Repetition Health section and `evaluate` skill Phase 4 Spaced Repetition Health line cite this section by name ("Strong / Building / Needs review per the spaced-repetition KB rollup"). Both display the same buckets so a learner reading either skill sees consistent numbers.

## Application to Programming

Spaced repetition for coding is NOT just flashcards. It includes:
- **Spaced problem-solving**: Solve a coding problem, then solve it again from scratch at expanding intervals
- **Pattern-based spacing**: After learning a pattern, solve new problems using it at intervals
- **Code review as retrieval**: Revisit code you wrote days/weeks ago and explain what it does
- **Concept re-explanation**: Periodically explain previously learned concepts from memory
- **Predict before running**: Before executing code, predict the output — this forces retrieval
