c1c5bafaff
- Миграция 042_lab_sims.sql: таблица lab_sims (id, cat, title, subject, grade,
sort_order, enabled, featured, tags JSON), сид 40 симуляций в порядке каталога
- backend/src/routes/lab.js: GET /api/lab/sims (мёрж БД + legacy-флаги, auth),
PATCH /api/lab/sims/:id (admin), POST /api/lab/sims/reorder (admin).
enabled зеркалится в legacy sim_disabled_ids -> lab.html без правок фронта
- server.js: монтирование /api/lab
- tests/lab-sims.test.js: 11 тестов (auth/роли/вкл-выкл+зеркало/featured/tags/
валидация/reorder/404), все проходят; +0 к baseline (3 pre-existing)
- admin/sections/sims.js: убран захардкоженный ADMIN_SIMS, каталог из /api/lab/sims,
тумблеры вкл-выкл и «рекомендуемая»; XSS-эскейп, иконки .ic
- plans/: Фаза 4 done + handoff
Независимое ревью: PASS, блокеров нет. route-auth lint: PATCH-роут защищён inline
requireRole('admin'). Миграция применена к живой БД.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.6 KiB
3.6 KiB
Feature: Контент-движок лаборатории (симуляции как данные)
Branch: feature/lab-content-engine
Base branch: master
Created: 2026-05-30
Status: 🟡 In Progress
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
- Phase 0: Ядро реестра + адаптер + 3 пилота [domain: frontend] → subplan
- Phase 1: Миграция всех симуляций на манифесты [domain: frontend] → subplan
- Phase 2: Тела симуляций вынесены в labs-bodies.html (sync-инъекция) [domain: frontend] → subplan
- Phase 3: Ленивая загрузка кода симуляций [domain: frontend] → subplan
- Phase 4: Реестр в БД + API + админка [domain: fullstack] → subplan
- Phase 5: Курикулумная привязка [domain: fullstack] → subplan
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
- Comprehensive code review
- Full build passes
- Full test suite passes
- Merged to
master
Notes (Big Bang temporary breakage map)
- Фаза 1 может временно ломать каталог/открытие симуляций пока миграция не завершена — устраняется внутри Фазы 1.
- Фаза 2 временно меняет структуру lab.html (вынос тел) — устраняется внутри Фазы 2.
- Полная работоспособность лаборатории гарантируется после ФИНАЛЬНОЙ фазы.