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>
This commit is contained in:
Maxim Dolgolyov
2026-06-26 13:04:52 +03:00
parent 1dcde8790a
commit 2b7f6ab12f
2 changed files with 1689 additions and 0 deletions
+364
View File
@@ -0,0 +1,364 @@
# ИИ-Тренажёр — План развития 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`.
File diff suppressed because it is too large Load Diff