# Phase 0: Ядро реестра + адаптер + 3 пилота **Status:** ✅ Done **Parent plan:** [PLAN.md](./PLAN.md) **Domain:** frontend ## Objective Создать `LabRegistry` (реестр + менеджер активной симуляции). Подключить адаптер: ядро лаборатории сначала смотрит в реестр, иначе — старый путь. Мигрировать 3 пилота (graph, quadratic, pendulum) и доказать паритет. Полностью обратимо. ## Tasks - [ ] Создать `frontend/js/labs/_registry.js` — `window.LabRegistry` (register/get/has/all + setActive/stopActive/destroyActive). Без эмоджи. - [ ] Подключить `_registry.js` в lab.html ПЕРВЫМ среди labs-скриптов (до graph.js). - [ ] Адаптер `renderSims()` (lab-glue.js): порядок из SIMS, registry-override + resolve preview (string|fn), append registry-only. - [ ] Адаптер `openSim()` (lab-init.js): base-id, registry-first → stopActive/open/setActive; deep-link `:arg` сохранить. - [ ] Адаптер `loadTheory()` (lab-init.js): registry.theory в приоритете, иначе THEORY[base]. - [ ] Адаптер `closeSim()`/`_pauseAllSims()`: добавить `LabRegistry.stopActive()`/`destroyActive()`. - [ ] Зарегистрировать 3 пилота в конце lab-init.js (после _openXxx): graph, quadratic, pendulum — с preview-fn, theory-объектом, open=_openXxx, stop/destroy. - [ ] Удалить graph/quadratic/pendulum из legacy `THEORY` и `SIMS` (проверка, что адаптер их подхватывает из реестра). ## Files to Modify/Create - `frontend/js/labs/_registry.js` — новый: ядро реестра. - `frontend/lab.html` — добавить `