# Spaced Review

> Алгоритм интервальных повторений (SM-2-like) для фактических знаний предметной области. Триггерься когда нужно решить, что и когда повторять, обновить интервалы после ответа, добавить новый item после введения концепции. Также на "повтори", "что я забыл", "проверь знания", spaced repetition. Основан на классической SM-2. Работает с progress/spaced_review.json. Без этого скилла ученик забывает 80% фактов за неделю (кривая забывания Эббингауза).

- Skill: `infinity-kim/spaced-review` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add infinity-kim/spaced-review`
- Raw SKILL.md: https://api.skillmd.com/api/skills/infinity-kim/spaced-review/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: infinity-kim (https://skillmd.com/u/infinity-kim)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/infinity-kim/spaced-review

---


# Интервальные повторения

Кривая забывания Эббингауза: без повторений человек забывает ~80% нового за неделю. Spaced repetition (Cepeda et al. 2006) повышает retention на 10-30% против массированного изучения. В любой области есть пласт **фактов**, которые надо помнить, а не выводить (опорные числа, профили инструментов, дефолтные параметры, мнемонические правила) — именно для них предназначен этот скилл.

Этот скилл управляет `progress/spaced_review.json`: решает, что спрашивать сегодня, и обновляет интервалы.

## Что хранится в spaced_review.json

**Факты предметной области**, которые ученик должен помнить без подглядывания: опорные величины, профили/категории инструментов, дефолтные параметры, устойчивые правила «когда что», мнемоники.

<!-- DOMAIN:examples -->
<!-- Примеры фактов одной из областей (System Design). Доменный слой заменяет своими. -->
- «Round trip в датацентре ≈ 500µs; память ~100ns; SSD random read ~150µs; CA↔Европа ~150ms»
- «1 млн запросов/день ≈ 12 QPS в среднем, ~120 QPS пиково»
- «Cassandra — AP-профиль (жертвует консистентностью ради доступности)»
- «cache-aside — приложение само читает кеш, при промахе идёт в БД и кладёт в кеш»
- «powers of two: 2^10 ≈ 1K, 2^20 ≈ 1M, 2^30 ≈ 1G»
- «99.99% availability ≈ 52 минуты простоя в год»
<!-- /DOMAIN:examples -->

**Что НЕ идёт сюда:**
- Компетенции/умения (они в `competencies.json`, через BKT и `diagnostics`)
- Эмоциональные наблюдения
- Конкретные решения отдельных задач

Граница: spaced_review — про **факты**, competencies — про **умения**. Не помнит опорное число → spaced_review. Не умеет находить узкое место → competencies.

## Схема item

```json
{
  "concept": "<факт, который надо помнить дословно>",
  "category": "<категория области>",
  "introduced": "2026-06-14",
  "next_review": "2026-06-15",
  "interval_days": 1,
  "ease_factor": 2.5,
  "repetitions": 0
}
```

**Категории фактов доменно-зависимы** — их задаёт доменный слой под свою область (это разбивка фактов на смысловые группы, удобная для тематических warm-up). На механику обновления категория не влияет.

<!-- DOMAIN:examples -->
<!-- Категории для одной из областей (System Design). Доменный слой заменяет. -->
`estimation` / `databases` / `caching` / `consistency` / `networking` / `queues` / `reliability` / `architecture`
<!-- /DOMAIN:examples -->

## Когда добавлять новый item

- В уроке введён **новый факт**, который войдёт в рабочий словарь (число, профиль, дефолт)
- Ученик сам открыл что-то важное
- Повторяется ошибка, требующая закрепления факта

**Не добавляй:** слишком гранулярно, дубликаты, абстракции («тема сложная»).

Новый item: `introduced` = сегодня, `next_review` = сегодня+1, `interval_days`=1, `ease_factor`=2.5, `repetitions`=0.

## Когда спрашивать

Через `session-flow` шаг 3:
1. Прочитай `spaced_review.json`
2. Отфильтруй `next_review <= сегодня`
3. Просроченных > 5 — возьми 2-3 самых старых, остальные перенеси
4. Просроченных 1-5 — пройди по всем

## Форматы вопросов (по repetitions)

Формат вопроса усложняется по мере закрепления — от простого recall к применению и обучению другого. Конкретные формулировки зависят от области.

| repetitions | Формат |
|---|---|
| 0 | Простой recall — «вспомни значение/правило» |
| 1 | Применение — «дано …, посчитай/выбери» |
| 2 | Новый контекст — то же правило в другой постановке |
| 3 | Реальная задача — применить в полноразмерной задаче |
| 4+ | Обучить кого-то — «объясни разницу X и Y как коллеге» |

<!-- DOMAIN:examples -->
<!-- Примеры формулировок (System Design). Доменный слой заменяет. -->
| repetitions | Пример |
|---|---|
| 0 | «Сколько примерно round trip в датацентре?» |
| 1 | «У тебя 5М записей/день — сколько QPS пиково?» |
| 2 | «Нужна доступность важнее строгой консистентности — какой выбор?» |
| 3 | «Прикинь storage для сервиса на год» |
| 4+ | «Объясни разницу очереди и стрима как коллеге» |
<!-- /DOMAIN:examples -->

## Обновление после ответа (SM-2)

**Правильно:**
```
interval_days = int(interval_days * ease_factor)
next_review = сегодня + interval_days
repetitions += 1
# ease_factor не меняется
```

**Неправильно / «не помню»:**
```
interval_days = 1
next_review = сегодня + 1
repetitions = 0
ease_factor = max(1.3, ease_factor * 0.8)
```

`ease_factor` нижняя граница 1.3 (иначе застрянет в ежедневных вопросах).

## Реакция на ответ (интеграция с feedback)

- **Правильно** → процессно, связывая факт с умением, которое он питает. Не «молодец».
- **Неправильно** → нормализация: спокойно освежи факт и перенеси на завтра.
- **Частично** → подтверди, что главное помнит, уточни деталь.

<!-- DOMAIN:examples -->
<!-- Примеры реакций (System Design). Доменный слой заменяет. -->
- Правильно: «Ты помнишь, что Cassandra — AP. Значит, модель выбора БД под профиль доступности у тебя встала».
- Неправильно: «Освежим. Round trip в датацентре ~500µs — это в ~1000 раз быстрее, чем запрос в другой континент. Перенесу на завтра».
- Частично: «Главное помнишь — что это быстро. Деталь: порядок ~500µs, а не миллисекунды».
<!-- /DOMAIN:examples -->

## Сколько за сессию

2-3 item в начале (warm-up). Просроченных больше 3 — пройди 3, остальные отложи. Никогда больше 5 за сессию.

## Параметры

Начальный ease 2.5, мин 1.3, старт interval 1. Интервалы: 1 → ~3 → ~7 → ~14 → ~30 дней. После 5-й — «изучено», редкие проверки (30+).

## Связь с другими скиллами

- **`session-flow`** — вызывает на шаге 3
- **`feedback`** — правила реакции
- **`diagnostics`** — параллельный механизм для компетенций (BKT), не фактов
- **Субагент `quiz-master`** — генерирует вопросы из items

## Ссылка

- [references/sm2-algorithm.md](references/sm2-algorithm.md) — полное описание SM-2

