Files
Learn_System/plans/ai-trainer/ROADMAP_V4.md
T
Maxim Dolgolyov 2b7f6ab12f docs(trainer): план развития v4 — разнообразие задач/условий по темам + все направления
ROADMAP_V4.md — мастер-план: 103 новых генератора по 6 группам тем (матрица
диверсификации), 38 формулировок условий, 10 новых форматов заданий (kinds:
choice/verify/findError/fillBlank/estimate/multi/order/match/context/figureAsk),
педагогика (3-уровн. подсказки, библиотека ошибок, образцы, guided, сократ.),
адаптивность (запись уровня/времени, мастерство на L3, граф пререквизитов,
диагностика, due-mix), вовлечение+учитель (XP, задания+журнал, аналитика,
карта-созвездие), охват ЦТ (функции/корни/логарифмы/тригонометрия/коорд-геометрия,
ЦТ-режим), техника/качество. Рекомендуемая последовательность V4.1–V4.6.

V4_GENERATOR_SPECS.md — спутник: полные «корень-вперёд»-рецепты всех 103
генераторов (форма/пример/вывод/фигура), формулировки и сквозные предложения
с what/why/how/effort. Собрано анализом 11 агентов по реальному движку
(каждое предложение реализуемо в текущем контракте, инварианты соблюдены).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 13:04:52 +03:00

365 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ИИ-Тренажёр — План развития v4: разнообразие задач + все направления
**Дата:** 2026-06-26. Фокус заказа — **разнообразие задач и условий по текущим темам**;
плюс полный охват направлений (форматы, педагогика, адаптивность, вовлечение, охват ЦТ, техника).
План собран глубоким анализом (11 агентов, каждый сверялся с РЕАЛЬНЫМ движком):
**103 новых генератора, 38 новых формулировок условий, 44 сквозных улучшения.**
## Что уже есть (база v1–v3)
- Движок параметрических генераторов + детерминированная проверка `SimExpr`.
- **64 генератора / 21 тема** (алгебра + геометрия). Виды: `solve`, `compute`, `roots`,
`simplify`, `inequality`, `system`.
- Геометрия с **чертежами-данными** (`figures.js`, 13 типов) + режим **«читать с чертежа»**
(`figurePrompt` у всех 19 геом-генераторов, тумблер «Текст / На чертеже»).
- Структурные уровни сложности (1–3), умная тренировка + интервальное повторение (SR,
мигр.081/082), LLM-задачи с серверной проверкой (мигр.083), пошаговое решение (`checkStep`),
правиловый разбор ошибок (`analyzeMistake`), 3-уровневое объяснение (`/api/practice/explain`),
мат-клавиатура + live-KaTeX, аналитика класса, авторинг/раздача учителем, конструктор
генераторов (`/trainer-builder`, мигр.084).
## Инварианты (НЕ нарушать ни в одном пункте)
1. ⛔ Только `SimExpr`**без `eval`/`new Function`**.
2. **«Корень-вперёд»**: сначала выбираем целый корень/множители, ВЫВОДИМ остальное → ответ
всегда чистый (целое ИЛИ конечная десятичная дробь, как окружность с π≈3,14), самопроверка
движка проходит. Ответ ВСЕГДА вводим без потери точности.
3.**Без эмодзи** — только inline SVG `.ic` / Lucide. Тексты экранируются.
4. Зарезервированные имена параметров: `t, w, h, pi, e, E, PI, tau` — нельзя.
5. Каждая фаза — со смоуками/тестами и коммитом; `lint:routes` baseline 0.
### Ключевые ограничения движка (выявлены анализом — важно для реализации)
- `roots` проверяет КАЖДЫЙ корень подстановкой → `|ax+b|=c` реализуется как `roots` с
`lhs:'abs(...)'` (exprToLatex уже рендерит `\left|...\right|`).
- `inequality` поддерживает только ОДНУ полупрямую `{op, bound}`. Двойные неравенства
`a<bx+c<d`, `|x|<c`, знак-чарты — **через `compute`** («сколько целых решений», «наименьшее
целое x»), они остаются самопроверяемыми. Не делать их `inequality` — самопроверка упадёт.
- `system` поддерживает `answerVars` длины 3 → система 3×3 возможна ЧИСТО ДАННЫМИ.
- Новые виды (`choice/verify/fillBlank/findError/estimate/multi/order/match`) требуют правок
движка + страницы (Часть II).
---
# ЧАСТЬ I — РАЗНООБРАЗИЕ ЗАДАЧ И УСЛОВИЙ (главное по запросу)
Разнообразие растёт по двум осям: **(A) новые форматы условий/ответов** (применимы ко ВСЕМ
темам) и **(B) новые варианты и формулировки внутри каждой темы** (103 генератора + 38 рамок).
## I.A. Новые форматы условий (новые `kind` — Часть II.формат)
Это умножает разнообразие сразу во всех темах. Подробности и приоритеты — в разделе
[«II. Форматы заданий»](#часть-ii--новые-форматы-заданий-kinds).
| Формат | kind | Что даёт |
|---|---|---|
| Выбор ответа | `choice` | дистракторы из `analyzeMistake` (типовые ошибки) |
| Верно/неверно | `verify` | проверить утверждение (1/0 через SimExpr-булеву) |
| Найди ошибку | `findError` | указать неверный шаг в готовом решении |
| Вставь пропуск | `fillBlank` | число/выражение в тождестве |
| Оценка/прикидка | `estimate` | ответ в допуске (интервал) |
| Многошаговая | `multi` | одна задача — несколько проверяемых под-ответов |
| Упорядочи | `order` | расставить числа/шаги по порядку |
| Сопоставь | `match` | формула↔результат, фигура↔площадь |
| Реальный контекст | `context` | обёртка существующих задач в бытовые сюжеты |
| Читать с фигуры/таблицы | `figureAsk` | ответ берётся с чертежа/таблицы |
## I.B. Матрица диверсификации по темам (103 генератора)
Условные обозначения: **L** — структурный уровень (1–3), вид — `kind`. Все «корень-вперёд».
Многие новые формулировки реализуются **чистыми данными** (без правок движка): инверсные
(«найди коэффициент по корню»), пропущенный шаг, словесный контекст, «что больше», истина/ложь
кодом (1/0), «вставь знак», «сколько целых решений».
### Группа 1. Линейные: Уравнения · Неравенства · Системы (15 генераторов)
| Тема | id | Форма / условие | L | kind |
|---|---|---|---|---|
| linear-eq | `lin-both-frac` | ax+b=cx+d с делением на (ac)≥2 | 2 | solve |
| linear-eq | `lin-x-denom` | a/(x+b)=c (x в знаменателе) | 3 | solve |
| linear-eq | `lin-k-over-x` | k/x=c (обратная пропорция) | 2 | solve |
| linear-eq | `lin-abs` | \|ax+b\|=c (два корня) | 3 | roots |
| linear-eq | `lin-frac-eq-frac` | (ax+b)/c=(dx+e)/f | 3 | solve |
| linear-eq | `lin-nested-paren` | a(b(x+c)+d)=e (вложенные скобки) | 3 | solve |
| linear-eq | `lin-literal` | ax=b·k−c·x (буквенный коэффициент) | 3 | solve |
| inequalities | `ineq-both-sides` | ax+b<cx+d | 2 | inequality |
| inequalities | `ineq-both-flip` | ax+b≥cx+d, c>a (смена знака) | 3 | inequality |
| inequalities | `ineq-paren` | a(x+b)>c | 2 | inequality |
| inequalities | `ineq-count-int` | сколько целых решений / наим. целое | 2 | compute |
| systems | `sys-subst` | подстановка (одно ур-е разрешено) | 2 | system |
| systems | `sys-sum-diff` | x+y=S, xy=D | 1 | system |
| systems | `sys-3x3` | система 3×3 (тизер, answerVars=3) | 3 | system |
| systems | `sys-word` | текстовая на два неизвестных | 2 | system |
**Формулировки:** инверс «при каком a корень = R», конструктор «дополни 2x+▢=10 чтобы корень
3», пропущенный шаг (берётся из `solution[]`), счёт целых решений (обход ограничения
`inequality`), инверс параметра системы «при каком k решение (1;2)».
### Группа 2. Пропорции · Проценты · Текстовые (17 генераторов)
| Тема | id | Форма / условие | L | kind |
|---|---|---|---|---|
| proportions | `prop-direct-word` | прямая пропорция (цена/кол-во) | 1 | compute |
| proportions | `prop-inverse-word` | обратная (рабочие/дни) | 2 | compute |
| proportions | `prop-scale-map` | масштаб карты | 2 | compute |
| proportions | `prop-compound` | тройная пропорция | 3 | compute |
| proportions | `prop-share-ratio` | деление в отношении a:b | 2 | compute |
| percents | `pct-increase` | увеличение на p% | 2 | compute |
| percents | `pct-decrease` | уменьшение на p% | 2 | compute |
| percents | `pct-change` | на сколько % изменилось | 3 | compute |
| percents | `pct-simple-interest` | простые проценты (вклад) | 2 | compute |
| percents | `pct-compound-2y` | сложные проценты (2 года) | 3 | compute |
| percents | `pct-restore-before` | исходное до изменения | 3 | compute |
| applied | `app-meet` | встречное движение | 2 | compute |
| applied | `app-overtake` | движение вдогонку | 3 | compute |
| applied | `app-upstream` | по реке (по/против течения) | 2 | compute |
| applied | `app-work-joint` | совместная работа | 3 | compute |
| applied | `app-mix-blend` | смешивание растворов | 3 | compute |
| applied | `app-profit-pct` | прибыль в процентах | 3 | compute |
**Формулировки:** «что больше: 30% от 80 или 40% от 50», таблица-данные, цепочка скидка→налог,
проценты vs процентные пункты, прикидка, средняя скорость кругового рейса (2v₁v₂/(v₁+v₂)).
### Группа 3. Выражения: Упрощение · Степени · Формулы (16 генераторов)
| Тема | id | Форма / условие | L | kind |
|---|---|---|---|---|
| simplify | `simp-like-multivar` | привести подобные (две буквы) | 2 | simplify |
| simplify | `simp-like-const` | подобные с числом | 2 | simplify |
| simplify | `simp-sub-bracket` | вычесть скобку (знаки) | 3 | simplify |
| simplify | `simp-distribute-combine` | раскрыть и привести | 3 | simplify |
| simplify | `simp-factor-common` | вынести общий множитель | 2 | simplify |
| simplify | `simp-factor-group` | группировка | 3 | simplify |
| formulas | `diff-sq-factor` | разложить разность квадратов | 3 | simplify |
| formulas | `sq-trinom-factor` | свернуть в квадрат | 3 | simplify |
| formulas | `sq-sum-coef` | квадрат суммы с коэффициентом | 3 | simplify |
| formulas | `cube-sum` | куб суммы | 3 | simplify |
| formulas | `sum-cubes-factor` | сумма кубов | 3 | simplify |
| powers | `pow-div` | частное степеней | 2 | simplify |
| powers | `pow-product-base` | степень произведения | 2 | simplify |
| powers | `pow-frac-combine` | дробь степеней | 3 | simplify |
| powers | `pow-numeric-laws` | степени одного основания (число) | 2 | compute |
| powers | `pow-standard-form` | стандартный вид числа | 2 | compute |
**Формулировки:** вставь число в тождество (`(x+a)²=x²+▢x+a²`), найди-ошибку→правильный ответ,
«запиши в виде произведения» (обратное разложение, simplify-эквивалентность), «в какую степень
возвести», упрости-и-вычисли при x=x₀ (мост к арифметике, защита от заучивания строки).
### Группа 4. Квадратные · Прогрессии (16 генераторов)
| Тема | id | Форма / условие | L | kind |
|---|---|---|---|---|
| quadratic | `quad-incomplete-bx` | ax²+bx=0 (вынесение x) | 2 | roots |
| quadratic | `quad-incomplete-c` | ax²=c (корень) | 2 | roots |
| quadratic | `quad-disc-clean` | ax²+bx+c=0 (дискриминант, чистый D) | 3 | roots |
| quadratic | `quad-trinomial-factor` | разложить трёхчлен | 2 | simplify |
| quadratic | `quad-find-b` | найти b по корню | 3 | compute |
| quadratic | `quad-count-roots` | сколько корней (знак D) | 2 | compute |
| quadratic | `quad-vertex-x` | вершина x₀=b/2a | 2 | compute |
| quadratic | `quad-complete-square` | выделить полный квадрат | 3 | simplify |
| progressions | `prog-arith-sum` | сумма n членов (арифм.) | 2 | compute |
| progressions | `prog-arith-find-d` | найти d по двум членам | 2 | compute |
| progressions | `prog-arith-find-n` | каким по счёту идёт член | 3 | compute |
| progressions | `prog-arith-mean` | вставить среднее арифм. | 2 | compute |
| progressions | `prog-geom-find-q` | найти знаменатель q | 2 | compute |
| progressions | `prog-geom-mean` | геометрическое среднее | 3 | compute |
| progressions | `prog-geom-sum` | сумма n членов (геом.) | 3 | compute |
| progressions | `prog-arith-word` | ряды кресел / зарплата | 2 | compute |
**Формулировки:** корни-как-пара (сумма/произведение по Виета), «составь приведённое ур-е по
корням» (simplify), классификация по знаку D, кратный корень (полный квадрат, 1 корень), числовой
сюжет (произведение последовательных), инверс a₁/n/q, сумма 1..n и 1+3+..+(2n1), реальный геом.
сюжет (мяч/бактерии, q∈{2,3}).
### Группа 5. Арифметика 5–6: НОД/НОК · Дроби · Десятичные · Отрицательные (19 генераторов)
| Тема | id | Форма / условие | L | kind |
|---|---|---|---|---|
| gcd-lcm | `gcd-triple` | НОД трёх чисел | 2 | compute |
| gcd-lcm | `lcm-triple` | НОК трёх чисел | 3 | compute |
| gcd-lcm | `coprime-check` | взаимно простые? (1/0) | 2 | compute |
| gcd-lcm | `lcm-buses` | «снова вместе» (НОК-задача) | 2 | compute |
| fractions | `frac-reduce` | сократить дробь | 2 | compute |
| fractions | `frac-add-unlike` | сложение (разные знаменатели) | 3 | compute |
| fractions | `frac-mult` | умножение дробей | 2 | compute |
| fractions | `frac-compare` | сравнить дроби (код 1/2/0) | 2 | compute |
| fractions | `frac-of-whole-inverse` | число по его части | 3 | compute |
| fractions | `frac-to-decimal` | дробь → десятичная | 2 | compute |
| decimals | `dec-div` | деление десятичных | 3 | compute |
| decimals | `dec-round` | округление | 2 | compute |
| decimals | `dec-times-pow10` | ×/÷ на 10/100/1000 | 1 | compute |
| decimals | `dec-compare` | сравнить десятичные | 1 | compute |
| negatives | `neg-div` | деление (отрицательные) | 2 | compute |
| negatives | `neg-order-ops` | порядок действий со знаками | 3 | compute |
| negatives | `neg-abs` | модуль числа/выражения | 2 | compute |
| negatives | `neg-compare-line` | сравнение на коорд. прямой | 1 | compute |
| negatives | `neg-square` | квадрат отрицательного | 2 | compute |
**Формулировки:** истина/ложь (1/0), «что больше» кодом (1/2/0), «вставь знак» (1/2/0), словесный
контекст (НОК-автобусы, остаток пирога), прикидка с округлением, смешанное число ↔ неправильная дробь.
### Группа 6. Геометрия: Углы · Пифагор · Площади · Многоугольники · Подобие · Окружность (20 генераторов)
Все используют систему **фигур-данных** (`figures.js`); где нужно — новый тип фигуры.
| Тема | id | Форма / условие | L | Нужна фигура |
|---|---|---|---|---|
| g-angles | `ang-parallel-transversal` | параллельные + секущая | 2 | новый тип `parallel-lines` |
| g-angles | `ang-isosceles-base` | углы равнобедренного | 2 | `triangle-angles` (расш.) |
| g-angles | `ang-vertical-bisector` | вертикальные / биссектриса | 1 | новый `crossing-lines` |
| g-pyth | `pyth-perimeter` | периметр прям. треугольника | 3 | `right-triangle` |
| g-pyth | `pyth-distance` | расстояние между точками | 3 | новый `coord-points` |
| g-pyth | `pyth-rect-diagonal` | диагональ прямоугольника | 2 | `rectangle`+диагональ |
| g-pyth | `pyth-space-diagonal` | диагональ параллелепипеда | 3 | новый `box-3d` |
| g-area | `area-rect-inverse` | сторона по площади | 2 | `rectangle` (▢) |
| g-area | `area-l-shape` | площадь L-фигуры | 3 | новый `l-shape` |
| g-area | `area-sector` | площадь сектора | 3 | `circle-arc`+заливка |
| g-poly | `poly-diagonals` | число диагоналей | 2 | `regular-polygon`+диаг. |
| g-poly | `poly-find-n` | число сторон по углу | 3 | `regular-polygon` |
| g-poly | `poly-exterior-sum` | внешний угол правильного | 2 | `regular-polygon`+метка |
| g-sim | `sim-scale-factor` | коэффициент по сторонам | 2 | `two-similar` |
| g-sim | `sim-area-ratio` | отношение площадей (k²) | 3 | `two-similar` |
| g-sim | `sim-thales` | отрезок по т. Фалеса | 3 | новый `thales` |
| g-sim | `sim-map-scale` | масштаб карты | 2 | (без фигуры) |
| g-circle | `circ-inscribed-angle` | вписанный/центральный угол | 3 | `circle`+две хорды |
| g-circle | `circ-chord-pyth` | длина хорды через радиус | 3 | `circle`+хорда |
| g-circle | `circ-tangent-len` | длина касательной | 3 | `circle`+касательная |
**Формулировки:** только-с-чертежа (L3-вариант любого углового), двухшаговая «погоня за углом»
(вертикальный→смежный; накрест→сумма треугольника), обратная «прямоугольный ли?» (1/0,
`rhs:'(a*a+b*b==c*c)'`), закрашенная область (круг в квадрате, π≈3,14), инверс «сколько сторон
по сумме углов», подобие через тени (дерево/столб), угол в полуокружности (Фалес).
---
# ЧАСТЬ II — НОВЫЕ ФОРМАТЫ ЗАДАНИЙ (kinds)
Дают наибольший прирост разнообразия условий — применимы ко всем темам. Каждый сохраняет
SimExpr-проверку.
| # | Формат | Усилие | Суть реализации |
|---|---|---|---|
| P1 | `choice` (выбор) | M | 4 варианта; дистракторы из `analyzeMistake` (типовые ошибки) + случайные; правильный — текущий ответ |
| P2 | `verify` (верно/неверно) | M | утверждение → булева SimExpr (1/0); часть истинных, часть ложных |
| P3 | `findError` (найди ошибку) | M | портим ОДИН шаг `solution[]`; ученик указывает номер неверного шага |
| P4 | `fillBlank` (вставь пропуск) | M | равенство с ▢; ответ — число/выражение, проверка подстановкой/эквивалентностью |
| P5 | `estimate` (оценка) | S | ответ в допуске (band ±ε); для прикидки/π |
| P6 | `multi` (многошаговая) | M | несколько gated под-ответов в одной задаче (путь→время→…) |
| P7 | `order` (упорядочи) | M | расставить числа/шаги; идеально для отрицательных/дробей/десятичных |
| P8 | `match` (сопоставь) | L | два столбца: выражение↔форма, фигура↔площадь |
| P9 | `context` (бытовой сюжет) | S | тонкая обёртка существующих compute/solve в случайные сюжеты (данными) |
| P10 | `figureAsk` (с чертежа/таблицы) | M | ответ ЧИТАЕТСЯ с фигуры; + новый тип фигуры `table` |
**Старт:** P9 (контекст-обёртки — почти бесплатно), P5 (estimate), затем P1/P4/P2 (высокая
ценность, средняя цена). P8 (match) — позже.
---
# ЧАСТЬ III — ПЕДАГОГИКА / РЕПЕТИТОР
| # | Что | Усилие |
|---|---|---|
| C1 | 3-уровневые подсказки (намёк → первый шаг → полное решение) из `solution[]` | S |
| C2 | Библиотека типовых ошибок по темам (`MISTAKES` data, расширяет `analyzeMistake`) | M |
| C3 | Режим «сначала образец» (worked example) → задача-близнец | M |
| C4 | Направляемые пропуски в шагах (валидатор — `checkStep`) | M |
| C5 | Мастерство с учётом помощи (флаг `assisted` → «освоено» = без подсказок) | M |
| C6 | Сократический «объясни мою ошибку» (вопрос вместо ответа, анти-чит) | M |
| C7 | Интервальное повторение МЕТОДА (мини-карточки «вспомни формулу») | L |
---
# ЧАСТЬ IV — АДАПТИВНОСТЬ / МАСТЕРСТВО / ДИАГНОСТИКА
| # | Что | Усилие |
|---|---|---|
| D5 | **Фундамент:** писать структурный `level` и `time_ms` в попытку (POST attempt) | S |
| D3 | Мастерство = серия верных на уровне 3 (а не на 1) | M |
| D7 | Авто-калибровка уровня по точности/времени последних попыток | M |
| D1 | Граф пререквизитов навыков + гейтинг (как `unlockStars` в Квантике) | M |
| D2 | Входная диагностика → персональный стартовый план | L |
| D6 | Подмешивание due-навыков (кривая забывания) в КАЖДУЮ сессию | M |
| D4 | «Повторить всё слабое» — кросс-темовый режим слабых навыков | M |
| D8 | Полоса мастерства на чипе навыка + аналитика глубины учителю | S |
> Начинать с **D5** — без записи уровня/времени остальные пункты слепы.
---
# ЧАСТЬ V — ВОВЛЕЧЕНИЕ + УЧИТЕЛЬ
| # | Что | Усилие |
|---|---|---|
| E1 | XP/монеты за практику (хук в `submitAttempt`, reuse геймификации) | S |
| E2 | Практика в Дневной цели + календарь серий на странице | M |
| E3 | Достижения/бейджи (объёмы, мастерство, идеальная сессия) | M |
| E4 | Задания учителя + журнал (`practice_assignments`: темы/цель/дедлайн, трекинг) | L |
| E5 | Глубже аналитика класса (помастерство, слабые места, время, динамика) | M |
| E6 | Карта-созвездие навыков (reuse `QuantikMap`) с пререквизитами | L |
| E7 | Очередь ревью LLM-пула (одобрить/править/удалить черновики) | M |
| E8 | Конструктор генераторов на ВСЕ виды + шаринг/клон | L |
> Учитывать **kill-switch геймификации** (`body.no-gamification`) для E1E3/E6.
---
# ЧАСТЬ VI — ОХВАТ ЦТ/ЦЭ (новые темы) + ТЕХНИКА/КАЧЕСТВО
**Новые темы (к программе 9–11 и ЦТ):**
| id | Тема | Усилие | Заметка |
|---|---|---|---|
| `g-func` | Функции: чтение графика, значение, область | M | новые kinds `graph-read`/`domain`; линейная/квадратичная |
| `roots` | Корни и иррациональности (7–9) | S | √ из точных квадратов; √(a²b)→a√b (simplify) |
| `logs` | Логарифмы и показательные (1011) | M | log_a(aᵏ)=k, aˣ=aᵏ; целые логи |
| `trig` | Тригонометрия (9–11) | M | значения в особых углах (0/30/45/60/90) |
| `g-coord` | Координатная геометрия (9) | M | середина, расстояние (пифагоровы пары), прямая |
**ЦТ-режим (B5, L):** формат А1–А10 / В1–В20, бланк ответов, таймер, тег `ct_code` со связью
с таксономией exam-prep (как `tag-exam-textbook`).
**Техника/качество (сквозное):**
| # | Что | Усилие |
|---|---|---|
| H1 | Ленивая загрузка KaTeX/Lucide, defer модулей тренажёра (first-paint) | S |
| H4 | **Закоммиченный** смоук: инстанс КАЖДОГО генератора × сидов + покрытие всех kinds | M |
| H3 | Телеметрия: труднейшие навыки, эффективность подсказок | M |
| A11y | ARIA, клавиатура, `prefers-reduced-motion`, озвучка формул | M |
| H2 | Офлайн/PWA для параметрики + очередь синка прогресса | L |
---
# ЧАСТЬ VII — РЕКОМЕНДУЕМАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ
Сначала — то, что даёт максимум разнообразия при минимуме риска (чистые данные), затем форматы,
затем педагогика/адаптивность/вовлечение, затем охват ЦТ.
1. **V4.1 — Контент-разнообразие волнами (★ главное по запросу).** Выкатить 103 генератора
группами (1→6) + формулировки, требующие ТОЛЬКО данных (инверс, пропущенный шаг, словесные,
«что больше», 1/0, счёт целых решений) + контекст-обёртки P9. Геометрия — с расширением
`figures.js` (новые типы: `parallel-lines`, `crossing-lines`, `coord-points`, `box-3d`,
`l-shape`, `thales`, таблица). Риск низкий — движок не меняется (кроме фигур).
2. **V4.2 — Новые форматы условий (kinds):** P9→P5→P1→P4→P2→P3→P6→P7→P10→P8 (движок + страница + смоуки).
3. **V4.3 — Педагогика:** C1→C2→C5→C3→C4→C6→C7.
4. **V4.4 — Адаптивность:** D5 (фундамент)→D3→D7→D6→D4→D8→D1→D2.
5. **V4.5 — Вовлечение + учитель:** E1→E2→E3→E5→E7→E4→E6→E8.
6. **V4.6 — Охват ЦТ:** `roots``g-coord``g-func``logs``trig`→ЦТ-режим (B5) + `ct_code`.
7. **Сквозное (каждую фазу):** H4 (закоммиченный смоук всех генераторов/kinds), затем H1/H3/A11y/H2.
**Каждая фаза:** смоук движка (инстанс всех генераторов + самопроверка) + смоук страницы +
бэкенд-тесты (где есть API) + коммит/пуш; эмодзи/eval = 0; `lint:routes` baseline 0.
---
## Приложение — где что в коде
- Генераторы (данные): `frontend/js/trainer/generators.js`
- Движок/проверка/kinds: `frontend/js/trainer/_trainer_engine.js`
- Чертежи-данные: `frontend/js/trainer/figures.js`
- Умная сессия: `frontend/js/trainer/adaptive.js`
- Страница: `frontend/trainer.html`
- Прогресс/SR/пул: `backend/src/controllers/practiceController.js`, `routes/practice.js`,
мигр.081/082/083; конструктор — `customGeneratorController` + мигр.084.
- Предыдущие планы: `plans/ai-trainer/PLAN.md`, `ROADMAP_V2.md`, `ROADMAP_V3.md`.