Files
Maxim Dolgolyov 0888a707cc fix(lab-content-engine): phase 0 - устранены 3 блокера ревью
- подключён _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>
2026-05-30 13:04:39 +03:00

4.8 KiB
Raw Permalink Blame History

Phase 0: Ядро реестра + адаптер + 3 пилота

Status: Done Parent plan: PLAN.md Domain: frontend

Objective

Создать LabRegistry (реестр + менеджер активной симуляции). Подключить адаптер: ядро лаборатории сначала смотрит в реестр, иначе — старый путь. Мигрировать 3 пилота (graph, quadratic, pendulum) и доказать паритет. Полностью обратимо.

Tasks

  • Создать frontend/js/labs/_registry.jswindow.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 спасает).