# Phase 7: Доска онлайн-урока **Status:** ⬜ Not Started **Parent plan:** [PLAN.md](./PLAN.md) **Domain:** fullstack ## Objective Открывать custom-симуляцию на доске онлайн-урока через существующий конвейер встраивания sim, с синхроном параметров классу и аннотациями поверх. ## Tasks - [ ] Учитель в classroom выбирает sim для доски: добавить в список источников свои+published custom-sims (рядом со встроенными). - [ ] Открытие на доске через существующий `simOpen` (controller `classroom/sim.js`, роут `/:id/sim`) — для custom передаётся `custom:`; рантайм `SimEngine` монтируется в sim-контейнер доски. - [ ] Синхрон состояния: параметры/play-pause/время транслировать классу через `simState/simMode` (как для встроенных) — ученики видят те же значения слайдеров и фазу анимации. - [ ] Аннотации поверх — через существующий `simAnnotate` (без изменений конвейера). - [ ] Закрытие/смена sim корректно размонтирует `SimEngine` (destroy). - [ ] Тест/проверка: открыть custom-sim на доске, подвигать слайдер у учителя → у ученика синхрон. ## Files to Modify/Create - `frontend/classroom.html` — выбор custom-sim в источниках доски, монтаж SimEngine, проброс состояния (modify) - `backend/src/controllers/classroom/sim.js` — поддержать `custom:` (валидация доступа к published/own) (modify) - `js/api.js` — при необходимости (modify, опц.) ## Acceptance Criteria - Учитель открывает custom-sim на доске; ученики видят её синхронно (параметры/анимация/режим). - Аннотации поверх работают; закрытие чистит ресурсы. - Существующее встраивание встроенных sim не регрессировало. ## Notes - Reuse simOpen/simState/simMode/simAnnotate — НЕ строить новый канал синхрона. - Доступ: на доску можно класть только свои или published (проверка на сервере). - classroom.html большой (8240 строк) — править точечно. ## Review Checklist - [ ] Все задачи выполнены - [ ] Синхрон параметров учитель→ученики работает - [ ] Доступ к custom-sim на доске проверяется - [ ] Встроенные sim на доске не сломаны; SimEngine корректно размонтируется ## Handoff to Next Phase