feat(trainer): P13 — конструктор параметрических генераторов

- custom_generators (мигр.084, spec_json + draft/published); customGeneratorController: validateGenSpec без исполнения (лимиты/типы), CRUD own+published + ownership
- /api/practice/generators[/:id]; клиент LS.practiceGen*
- страница /trainer-builder (учитель): форма (pick/derive/lhs/rhs/display/answer/solution) + живое превью через TE.instantiate(strict) (материализация + проверка ответа подстановкой) + список своих (правка/удаление/публикация)
- тренажёр грузит свои+опубликованные генераторы в тему «Мои генераторы» (пошаговый режим работает); пункт сайдбара /trainer-builder (teacher-only)
- тесты custom-generators.test.js 12/12; смоук движка 402/402 (T17 кастомный спек + strict-валидация); страница 33/33; ROADMAP_V2 P13 → DONE

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-25 15:30:08 +03:00
parent 47d4f71eac
commit 6d600ad576
9 changed files with 694 additions and 7 deletions
+13 -2
View File
@@ -82,8 +82,19 @@ solved-форме `x=c` → общий `onSolved` (засчитывается к
прогресс трекается; учитель видит выполнение и результаты; интеграция с journal/homework.
- Апгрейд текущего `assign` (уведомление) до отслеживаемого задания (таблица).
## P13 — Конструктор генераторов + управление пулом
Учитель создаёт ПАРАМЕТРИЧЕСКИЕ генераторы (не только одиночные задачи).
## P13 — Конструктор генераторов + управление пулом — DONE (частично)
**Сделано:** таблица `custom_generators` (мигр.**084**, spec_json + status draft/published),
`customGeneratorController` (`validateGenSpec` без исполнения — лимиты/типы; CRUD,
own+published, per-row ownership), роуты `/api/practice/generators[/:id]`, клиент
`LS.practiceGen*`. **Страница-конструктор** `/trainer-builder` (учитель/админ): форма
(заголовок/тема/тип/диапазоны pick/формулы derive/lhs/rhs/display/ответ/решение) +
**живое превью** (тот же `TE.instantiate(strict)` материализует и проверяет ответ
подстановкой) + список своих с правкой/удалением/публикацией. Тренажёр грузит свои+
опубликованные генераторы в тему **«Мои генераторы»** (пошаговый режим работает и для
них). Пункт сайдбара `/trainer-builder` (teacher-only). Тесты `custom-generators.test.js`
12/12; смоук движка T17 (кастомный спек + strict-валидация). **Осталось (стретч):**
форма для kind roots/simplify/inequality (движок их поддерживает), управление пулом
LLM-задач (P3) из UI, генерация по теме урока.
- Визуальный билдер: диапазоны `pick`, формулы `derive`, шаблоны `lhs/rhs`, ответ,
шаги решения + live-превью + валидация (отложенный «полный P4»).
- Управление пулом (ревью/правка/удаление), генерация по теме урока/§ учебника.