| name | spaced-review |
| description | Алгоритм интервальных повторений (SM-2-like) для фактических знаний предметной области. Триггерься когда нужно решить, что и когда повторять, обновить интервалы после ответа, добавить новый item после введения концепции. Также на "повтори", "что я забыл", "проверь знания", spaced repetition. Основан на классической SM-2. Работает с progress/spaced_review.json. Без этого скилла ученик забывает 80% фактов за неделю (кривая забывания Эббингауза). |
| user-invocable | false |
Интервальные повторения
Кривая забывания Эббингауза: без повторений человек забывает ~80% нового за неделю. Spaced repetition (Cepeda et al. 2006) повышает retention на 10-30% против массированного изучения. В любой области есть пласт фактов, которые надо помнить, а не выводить (опорные числа, профили инструментов, дефолтные параметры, мнемонические правила) — именно для них предназначен этот скилл.
Этот скилл управляет progress/spaced_review.json: решает, что спрашивать сегодня, и обновляет интервалы.
Что хранится в spaced_review.json
Факты предметной области, которые ученик должен помнить без подглядывания: опорные величины, профили/категории инструментов, дефолтные параметры, устойчивые правила «когда что», мнемоники.
- «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 минуты простоя в год»
Что НЕ идёт сюда:
- Компетенции/умения (они в
competencies.json, через BKT и diagnostics)
- Эмоциональные наблюдения
- Конкретные решения отдельных задач
Граница: spaced_review — про факты, competencies — про умения. Не помнит опорное число → spaced_review. Не умеет находить узкое место → competencies.
Схема item
{
"concept": "<факт, который надо помнить дословно>",
"category": "<категория области>",
"introduced": "2026-06-14",
"next_review": "2026-06-15",
"interval_days": 1,
"ease_factor": 2.5,
"repetitions": 0
}
Категории фактов доменно-зависимы — их задаёт доменный слой под свою область (это разбивка фактов на смысловые группы, удобная для тематических warm-up). На механику обновления категория не влияет.
estimation / databases / caching / consistency / networking / queues / reliability / architecture
Когда добавлять новый item
- В уроке введён новый факт, который войдёт в рабочий словарь (число, профиль, дефолт)
- Ученик сам открыл что-то важное
- Повторяется ошибка, требующая закрепления факта
Не добавляй: слишком гранулярно, дубликаты, абстракции («тема сложная»).
Новый item: introduced = сегодня, next_review = сегодня+1, interval_days=1, ease_factor=2.5, repetitions=0.
Когда спрашивать
Через session-flow шаг 3:
- Прочитай
spaced_review.json
- Отфильтруй
next_review <= сегодня
- Просроченных > 5 — возьми 2-3 самых старых, остальные перенеси
- Просроченных 1-5 — пройди по всем
Форматы вопросов (по repetitions)
Формат вопроса усложняется по мере закрепления — от простого recall к применению и обучению другого. Конкретные формулировки зависят от области.
| repetitions | Формат |
|---|
| 0 | Простой recall — «вспомни значение/правило» |
| 1 | Применение — «дано …, посчитай/выбери» |
| 2 | Новый контекст — то же правило в другой постановке |
| 3 | Реальная задача — применить в полноразмерной задаче |
| 4+ | Обучить кого-то — «объясни разницу X и Y как коллеге» |
| repetitions | Пример |
|---|
| 0 | «Сколько примерно round trip в датацентре?» |
| 1 | «У тебя 5М записей/день — сколько QPS пиково?» |
| 2 | «Нужна доступность важнее строгой консистентности — какой выбор?» |
| 3 | «Прикинь storage для сервиса на год» |
| 4+ | «Объясни разницу очереди и стрима как коллеге» |
Обновление после ответа (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)
- Правильно → процессно, связывая факт с умением, которое он питает. Не «молодец».
- Неправильно → нормализация: спокойно освежи факт и перенеси на завтра.
- Частично → подтверди, что главное помнит, уточни деталь.
- Правильно: «Ты помнишь, что Cassandra — AP. Значит, модель выбора БД под профиль доступности у тебя встала».
- Неправильно: «Освежим. Round trip в датацентре ~500µs — это в ~1000 раз быстрее, чем запрос в другой континент. Перенесу на завтра».
- Частично: «Главное помнишь — что это быстро. Деталь: порядок ~500µs, а не миллисекунды».
Сколько за сессию
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
Ссылка