Files
Learn_System/plans/simulations-improvement/README.md
T
Maxim Dolgolyov c0442d6803 feat(labs): задания ещё для 12 симуляций + прогресс плана
LAB_TASKS расширен: waves, circuit, radioactive, heatengine, hydrostatics,
isoprocess, probability, emfield, geometry, photosynthesis, celldivision (+
ранее quadratic/trigcircle/normaldist/projectile/pendulum) — итого 17.
Только валидные single-concept id (мульти-модули molphys/chemistry пропущены).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 10:44:28 +03:00

6.8 KiB

План улучшения симуляций (лаборатория)

Утверждён 2026-06-13. Цель — улучшить текущие симуляции (~50 шт.), а не наплодить новые.

Текущее состояние

База сильная: data-driven реестр (_registry.js) с ленивой загрузкой и самовосстановлением (_loader.js, _sim_deps.js), движок LabFX (частицы/звук/анимации), LSGraphPanel, _phys_visuals, _chem_visuals. Каталог в БД (lab_sims миграция 042 + lab_sim_links 043), синхрон в онлайн-уроке (controllers/classroom/sim.js).

Эталоны: projectile, pendulum (RK4), opticsbench (Снелл/линзы/дисперсия), circuit (MNA-решатель), trigcircle, titration, race (единственная с задачами+проверкой).

Состав: физика 13, химия 16, математика 9, биология 2, игра 1.

Сквозные пробелы (подтверждены ревью кода, 3 среза)

  1. Педагогика тонкая — задания/цели/проверка лишь у ~6-8 из ~50; остальные — песочницы. Теория = голые формулы.
  2. Тач сломан в ~80% — мост _addTouchSupport (lab-init.js:158) подключён в 2 симуляциях; вёрстка адаптивна, взаимодействие — нет.
  3. Доступность ≈ 0 — нет aria/role/alt на canvas, нет клавиатуры, контраст подписей < AA, нет prefers-reduced-motion.
  4. Нет сохранения состояния и «в Мои материалы» — нельзя возобновить опыт/сдать результат; PNG-экспорт у 2 симуляций.
  5. Синхрон в онлайн-уроке частичныйgetState/applyState у ~11, часто 1 под-режим.
  6. Тех-долг жизненного цикла — нет destroy, «дробовик» _pauseAllSims/closeSim по ~40 глобалам; добавить сим = 6+ мест; утечки; мёртвый SimUtil (_util.js).
  7. Палитра/DPR дублируются в каждом canvas-файле; нет общего JS-модуля токенов; canvas игнорирует светлую тему.
  8. Производительность — пул частиц обходит все 1500/кадр; нет «эконом-режима»; тяжёлые 3D/двойной маятник.
  9. Хрупкая вставка в урокsimId сырым текстом без списка/валидации (lesson-editor.html).

Фазы

Фаза 0 — Фундамент

  • SimBase/миксин жизненного цикла: fit/play/pause/reset/destroy/getState/applyState + DPR из одного места (подключать постепенно).
  • LabPalette — общий JS-модуль цветов/констант (PX_PER_M), задел под светлую тему canvas.
  • Заполнить manifest.stop/destroy per-sim → убрать «дробовик».
  • Убрать мёртвый SimUtil (или перевести симуляции на него).
  • lesson-editor: выпадающий список симуляций из /api/lab/sims вместо сырого simId.
  • prefers-reduced-motion + «эконом-режим» в LabFX (центрально). Закрывает 6,7,8(част.),9.

Фаза 1 — Педагогический слой (макс. эффект)

  • Фреймворк заданий (обобщить race.js): tasks:[{prompt, check(state), tolerance, hint}] + панель ввода ответа/проверки/прогресса.
  • «Что понять» + deep-link на § учебника.
  • XP за задания (с дневным лимитом, анти-фарм). Закрывает 1.

Фаза 2 — Ценность для ученика

  • Сохранение/возобновление параметров (поверх getState, localStorage + опц. БД).
  • «В Мои материалы» (скриншот canvas → student_materials) + «Скачать PNG» везде.
  • Общие измерительные инструменты (линейка/транспортир/курсор). Закрывает 4.

Фаза 3 — Тач и доступность

  • Тач везде (_addTouchSupport во все canvas-открытия / pointer-events как geometry.js); pinch-zoom.
  • aria/role/alt + текстовая сводка состояния; клавиатура; контраст до AA; prefers-reduced-motion. Закрывает 2,3.

Фаза 4 — Полный синхрон в онлайн-уроке

  • getState/applyState для всех симуляций и под-режимов. Закрывает 5 (опирается на Фазу 0).

Фаза 5 — Производительность и стабильность

  • Пул частиц: список живых вместо обхода 1500/кадр; общий RAF-планировщик + пауза по visibilitychange.
  • Асинхронная загрузка тел симуляций (сейчас синхронный XHR).
  • Фронт-тесты движка. Закрывает 8 + отсутствие тестов.

Фаза 6 — Контент и охват

  • Усилить биологию (генетика, экосистемы, ферменты, кровообращение).
  • Доработать crystal/orbitals (статичные 3D) — интерактив + задания.
  • Допривязать lab_sim_links к §§ учебников.

Порядок

Старт — Фаза 0. Затем Фаза 1 (педагогика) + Фаза 3 (тач/доступность) параллельно. Быстрые победы: тач массово, список симуляций в редакторе урока, reduced-motion/эконом, убрать SimUtil.

Прогресс

  • [~] Фаза 0 — сделано: эконом-режим/reduced-motion (LabFX, тумблер), выбор симуляции из списка в редакторе урока. Осталось: SimBase, LabPalette, чистка дробовика/SimUtil.
  • [~] Фаза 1 — сделано: фреймворк LabTasks (_tasks.js) + интеграция в теорию; задания на 17 симуляций. Осталось: XP за задания, deep-link на §, наполнение остальных.
  • Фаза 2
  • Фаза 3
  • Фаза 4
  • Фаза 5
  • Фаза 6