# Feature: Контент-движок лаборатории (симуляции как данные)

**Branch:** `feature/lab-content-engine`
**Base branch:** `master`
**Created:** 2026-05-30
**Status:** ✅ Complete (все 6 фаз; backend полностью, фронт Ф5 — параллельная сессия; не мёржено в master)
**Strategy:** Big Bang
**Mode:** Automated
**Execution:** Direct

## Summary

Превратить захардкоженную в 6 местах регистрацию ~49 симуляций лаборатории в единый
декларативный манифест + реестр (`LabRegistry`). Каждая симуляция сама себя регистрирует
объектом `{id, cat, title, desc, preview, theory, bodyId/mount, open, stop, destroy, subject, grade, topics}`.
Ядро (renderSims/openSim/closeSim/loadTheory) работает с реестром, а не с массивами и
if-цепочками. Далее — ленивая загрузка кода, БД-бэкенд с админкой и курикулумная привязка.

## Build & Test Commands
- **Build:** — (фронт без сборки, статика через Express)
- **Test:** `cd backend && npm test` (актуально для Фаз 4-5; Фазы 0-3 — статическая проверка + ревью по диффу)
- **Lint:** `cd backend && npm run lint:routes` (актуально для Фаз 4-5)

## Phases

- [x] Phase 0: Ядро реестра + адаптер + 3 пилота [domain: frontend] → [subplan](./phase-0-registry-core.md)
- [x] Phase 1: Миграция всех симуляций на манифесты [domain: frontend] → [subplan](./phase-1-migrate-all.md)
- [x] Phase 2: Тела симуляций вынесены в labs-bodies.html (sync-инъекция) [domain: frontend] → [subplan](./phase-2-lazy-mount.md)
- [x] Phase 3: Ленивая загрузка кода симуляций [domain: frontend] → [subplan](./phase-3-lazy-load.md)
- [x] Phase 4: Реестр в БД + API + админка [domain: fullstack] → [subplan](./phase-4-db-admin.md)
- [x] Phase 5: Курикулумная привязка [domain: fullstack] → [subplan](./phase-5-curriculum.md)

## Phase Progress Log

| Phase | Domain | Status | Review | Build | Committed |
|-------|--------|--------|--------|-------|-----------|
| Phase 0: Ядро реестра | frontend | ✅ Done (fix 0888a70) | ✅ PASS (re-review) | ✅ n/a | ⚠️ local only (push auth fail) |
| Phase 1: Миграция всех | frontend | ✅ Done (ebb2a9b) | ✅ PASS | ✅ n/a | ✅ pushed |
| Phase 2: Вынос тел | frontend | ✅ Done | ✅ браузер-проверка пройдена | ✅ n/a | ✅ pushed |
| Phase 3: Ленивая загрузка | frontend | ✅ Done (201e94e +fix) | ✅ E2E harness ALL PASS | ✅ n/a | ⚠️ нужна браузер-проверка |
| Phase 4: БД + админка | fullstack | ✅ Done | ✅ PASS (review) | ✅ 11/11 +0 baseline | ✅ pushed |
| Phase 5: Курикулум | fullstack | ⬜ Not Started | ⬜ | ⬜ | ⬜ |

## Final Review
- [x] Per-phase independent reviews (PASS)
- [x] Backend tests pass (lab-sims 11/11, lab-links 18/18; +0 к baseline)
- [x] route-auth lint: 0 роутов lab.js во флаге
- [ ] Merged to `master` (НЕ выполнено — ветка общая, мёрж за пользователем)

## Notes (Big Bang temporary breakage map)
- Фаза 1 может временно ломать каталог/открытие симуляций пока миграция не завершена — устраняется внутри Фазы 1.
- Фаза 2 временно меняет структуру lab.html (вынос тел) — устраняется внутри Фазы 2.
- Полная работоспособность лаборатории гарантируется после ФИНАЛЬНОЙ фазы.
