0888a707cc
- подключён _registry.js в lab.html (был отсутствует -> LabRegistry был undefined) - регистрация 3 пилотов в _pilots.js (graph/quadratic/pendulum), подключён последним - loadTheory (lab-glue.js) адаптирован: реестр в приоритете, иначе THEORY Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
52 lines
4.8 KiB
Markdown
52 lines
4.8 KiB
Markdown
# 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` — добавить `<script src="/js/labs/_registry.js">` первым (в обоих местах, если дублируется список).
|
||
- `frontend/js/labs/lab-glue.js` — renderSims адаптер; убрать 3 пилота из SIMS.
|
||
- `frontend/js/labs/lab-init.js` — openSim/loadTheory/closeSim/_pauseAllSims адаптеры; регистрация 3 пилотов; убрать 3 пилота из THEORY.
|
||
|
||
## Acceptance Criteria
|
||
- Каталог отображает все симуляции в прежнем порядке; 3 пилота открываются и работают идентично.
|
||
- Остальные 46 симуляций открываются по-старому (legacy путь не сломан).
|
||
- Deep-links и обратная совместимость id работают.
|
||
- Нет дублей карточек (пилот не показан дважды).
|
||
- Нет эмоджи; иконки `.ic`.
|
||
|
||
## Notes
|
||
- Порядок загрузки: см. CONTEXT.md. preview как функция спасает от undefined P_*.
|
||
- `_disabledSimIds` фильтрация должна продолжать работать для registry-записей.
|
||
|
||
## Review Checklist
|
||
- [ ] Адаптер не ломает legacy симуляции
|
||
- [ ] Паритет 3 пилотов (open/stop/close/theory/preview)
|
||
- [ ] Соблюдены конвенции проекта (no emoji, .ic)
|
||
- [ ] Нет дублирования карточек
|
||
|
||
## Handoff to Next Phase
|
||
- Ядро `LabRegistry` готово (`frontend/js/labs/_registry.js`): register/get/has/all + setActive/stopActive/destroyActive + resolvePreview. Подключено первым.
|
||
- Адаптер активен в renderSims (lab-glue.js) и openSim/loadTheory/_pauseAllSims/closeSim (lab-init.js): реестр в приоритете, иначе legacy.
|
||
- Пилоты graph/quadratic/pendulum зарегистрированы в КОНЦЕ lab-init.js (после _openXxx). preview — ленивая функция (P_* из lab-glue, грузится позже). theory ссылается на объекты THEORY (единый источник).
|
||
- Пилоты НЕ удалены из SIMS/THEORY (сохранены для порядка и единого источника); merge перекрывает их по id. В Фазе 1 удалить legacy полностью.
|
||
- РЕВЬЮ-WARNING для Фазы 1: при переключении на LEGACY-симуляцию `_active` в реестре не очищается → следующий closeSim вызовет destroyActive() на уже неактивной. Для пилотов безвредно (idempotent stop). Очистить `_active` на legacy-open при миграции.
|
||
- Паттерн манифеста для Фазы 1: `{id,cat,title,desc,preview(fn|str),theory,open,stop,destroy}`. Регистрировать в самом sim-файле; следить за порядком загрузки (preview как fn спасает).
|