# Feature: Конструктор симуляций (SimForge) **Branch:** `feature/sim-builder` **Base branch:** `master` **Created:** 2026-06-13 **Status:** 🟡 In Progress **Strategy:** Incremental **Mode:** Automated **Execution:** Orchestrator ## Summary Полноценный движок авторинга интерактивных 2D-симуляций для учителя-непрограммиста. Учитель собирает симуляцию из **данных** (JSON-спека): параметры-слайдеры, объекты (фигуры/векторы/точки/подписи с LaTeX), привязанные **формулами** к параметрам и времени `t`; настоящая физика (гравитация/пружины/столкновения/трение); графики; перетаскивание. Сохраняет в БД, публикует в каталог лаборатории, раздаёт классу, открывает на доске онлайн-урока, клонирует чужие и стартует из шаблонов. Спека — это **данные, не код**. Движок выражений — безопасный (whitelisted-математика), ⛔ без `eval`/`Function`/доступа к DOM/глобалам: спека шарится между людьми. ## Build & Test Commands - **Build:** нет (vanilla JS, без бандлера) - **Test:** `npm test` (в `backend/`, `node --test tests/*.test.js`) - **Lint:** `npm run lint:routes` (в `backend/`) - ⚠️ После роутов/миграций: `npm run migrate` (живая БД) + рестарт сервера (авто-перезагрузки нет). - ⚠️ `npm test` имеет baseline 3 pre-existing fail (auth.test.js) — хук толерантен (BASELINE_FAILS=3). ## Project Constraints (соблюдают ВСЕ агенты) - ⛔ Никаких эмодзи в коде — только inline SVG `.ic`. - Поиск по коду: `ast-index` (символы/usages/callers) + `vex` (semantic). НЕ Grep tool. - БД — встроенный `node:sqlite` (`DatabaseSync`), НЕ better-sqlite3. Живая БД `backend/data/learnspace.db`. - Frontend — vanilla JS, `window.LS.*` (js/api.js), без бандлера. Статика через Express. - Стейджить файлы поимённо (НЕ `git add -A` — в репо много мусорных untracked). - Движок выражений — безопасный парсер, не `eval`/`new Function`. - Переиспользовать: LabRegistry, `_fx_motion`, `_graph_panel`, `_phys_visuals`, `_util`, парсер `y=f(x)` из graph.js; паттерн раздачи из «Мои материалы»; `lab_sim_links`; конвейер встраивания sim на доску (`simOpen/simState/simMode/simAnnotate`). ## Phases - [x] Phase 0: Спека v1 + рантайм (формульные сцены) [domain: frontend] → [subplan](./phase-0-runtime-core.md) - [x] Phase 1: Графики + интеракции [domain: frontend] → [subplan](./phase-1-plots-interactions.md) - [x] Phase 2: Физический интегратор [domain: frontend] → [subplan](./phase-2-physics.md) - [x] Phase 3: БД + API (custom_sims) [domain: backend] → [subplan](./phase-3-persistence-api.md) - [x] Phase 4: Билдер (редактор) [domain: frontend] → [subplan](./phase-4-builder-ui.md) - [x] Phase 5: Каталог (custom-sims в /lab) [domain: fullstack] → [subplan](./phase-5-catalog.md) - [x] Phase 6: Раздача / шаблоны / клон / программа [domain: fullstack] → [subplan](./phase-6-sharing.md) - [ ] Phase 7: Доска онлайн-урока [domain: fullstack] → [subplan](./phase-7-classroom.md) ## Phase Progress Log | Phase | Domain | Status | Review | Build | Committed | |-------|--------|--------|--------|-------|-----------| | Phase 0: Runtime core | frontend | ✅ Done | ✅ | ✅ | ✅ | | Phase 1: Plots & interactions | frontend | ✅ Done | ✅ | ✅ | ✅ | | Phase 2: Physics | frontend | ✅ Done | ✅ | ✅ | ✅ | | Phase 3: Persistence + API | backend | ✅ Done | ✅ | ✅ | ✅ | | Phase 4: Builder UI | frontend | ✅ Done | ✅ | ✅ | ✅ | | Phase 5: Catalog | fullstack | ✅ Done | ✅ | ✅ | ✅ | | Phase 6: Sharing | fullstack | ✅ Done | ✅ | ✅ | ✅ | | Phase 7: Classroom | fullstack | ⬜ Not Started | ⬜ | ⬜ | ⬜ | ## Final Review - [ ] Comprehensive code review (final-reviewer) - [ ] Security review (safe expression eval, ownership, sanitization) - [ ] Full test suite passes (within baseline) - [ ] Merged to `master`