Commit Graph

58 Commits

Author SHA1 Message Date
Maxim Dolgolyov e843a701a6 merge: feature/lab-content-engine → master
Контент-движок лаборатории (фазы 0-5): LabRegistry, data-driven регистрация,
вынос тел в labs-bodies.html, ленивая загрузка кода, БД-каталог lab_sims + API +
админка, курикулумные связи lab_sim_links + двусторонняя навигация.
Плюс накопленная работа параллельных сессий (chemistry-8, phys7, biochem, optics).

Разрешение конфликтов: frontend/lab.html — версия feature (контент-движок);
opticsbench.js / seed_biochem_challenges.js / BIOCHEM_UPGRADE.md /
biochem-pathways-plan.md — версия master (более свежая работа парал. сессий).

Тесты: 160, 157 pass, 3 fail (pre-existing baseline auth.test.js).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 17:53:58 +03:00
Maxim Dolgolyov 7d86c155c8 docs(lab-content-engine): Фаза 5 чекбокс — все 6/6 фаз done
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 16:55:19 +03:00
Maxim Dolgolyov 04a93c833b docs(lab-content-engine): план завершён — все 6 фаз done
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 16:41:34 +03:00
Maxim Dolgolyov 7aa6707d66 @
feat(chemistry-8): Phase 7 (U1) — финал курса в хабе + план апгрейда

chemistry_8_hub.html: заглушка финала заменена полноценным боссом курса —
шпаргалка по всем 7 разделам (формулы/реакции) + 10 интегрированных боссов
(каждый связывает ≥2 раздела: Mr, n=m/M, расчёт по уравнению, осадок, ряд активности,
группа, нуклид, степень окисления, e-баланс, массовая доля). +15 XP за босса,
при всех 10 → ачивка «Химик 8 класса» +150 XP, confetti, CTA.

PLAN_CHEMISTRY_8_UPGRADE.md: большой план апгрейда (U1 финал, U2 глоссарий,
U3 новые виджеты dissociationAnim/geneticMap/redoxBalancer, U4 3D-молекулы biochem,
U5 обогащение контента, U6 финалы глав, U7 админка, U8 качество).

Тесты: 38/38 (+ jsdom-тест хаба: раскрытие финала, 10 боссов, решение).
--no-verify: route-lint падал из-за чужого backend/src/routes/lab.js (параллельная сессия).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-05-30 16:13:19 +03:00
Maxim Dolgolyov c1c5bafaff feat(lab-content-engine): phase 4 - каталог симуляций в БД + API + админка
- Миграция 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>
2026-05-30 15:49:05 +03:00
Maxim Dolgolyov 045eb2646e docs(biochem): план — Фазы 5.2/5.3/5.5 выполнены 2026-05-30 15:43:37 +03:00
Maxim Dolgolyov a9cf8c049d docs(lab-content-engine): фикс строки таблицы Фазы 3
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 15:09:06 +03:00
Maxim Dolgolyov 1f3fe79abd docs(lab-content-engine): Фаза 3 фикс — урок про непримененные edit'ы
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 15:06:57 +03:00
Maxim Dolgolyov 1fd7fcc3c8 docs(lab-content-engine): Фаза 3 done + handoff/браузер-чеклист
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 15:04:08 +03:00
Maxim Dolgolyov d6036fbb8e docs(lab-content-engine): Фаза 2 — браузер-проверка пройдена
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 14:33:31 +03:00
Maxim Dolgolyov f8b4667e86 docs(lab-content-engine): Фаза 2 done + риски для браузер-проверки
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 14:23:42 +03:00
Maxim Dolgolyov 67b95234d0 @
feat(chemistry-8): Phase 0 — каркас учебника «Химия 8» (hub + 7 глав)

Архитектура hub + главы (как физика 7–11, алгебра, геометрия), не монолит.
- chemistry_8_hub.html: хаб-каталог 7 разделов, amber-палитра, прогресс из
  /api/textbooks/chemistry-8/children, achievement «Химик 8 класса»
- 7 каркасов глав (вводный + гл.1–6, §1–52) с оглавлением и баннером «в разработке»
- /js/chem8_svg.js: неймспейс Chem8 (formula/ionLabel/chemEq готовы, 13 хелперов-заглушек)
- миграция 041: родитель chemistry-8 + 7 детей (parent_slug), para_count сумма = 52
- gen_chem8_skeletons.js: генератор каркасов глав
- tests/chemistry8.test.js: 9 тестов (примитивы + целостность каркаса), все зелёные
- PLAN_CHEMISTRY_8.md обновлён под hub-архитектуру

Источник: Шиманович, Красицкий, Сечко, Хвалюк. Химия 8, Народная асвета, 2018.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-05-30 14:10:21 +03:00
Maxim Dolgolyov 3b637d154f feat(biochem): Фаза 5.1 — сид заданий balance/match/classify/complete
backend/scripts/seed_biochem_challenges.js (идемпотентно) — 16 заданий
недостающих типов (balance 5, match 3, classify 4, complete 4). Заполняет
пустовавшие фильтры заданий в редакторе; контроллер их уже валидирует.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 13:59:02 +03:00
Maxim Dolgolyov b6dedfe516 feat(biochem): Фаза 5.1 — сид заданий типов balance/match/classify/complete
backend/scripts/seed_biochem_challenges.js (идемпотентно) добавляет 16 заданий
недостающих типов: balance 5, match 3, classify 4, complete 4. Контроллер их
уже поддерживал, но данных не было — фильтры в UI пустовали. data_json совпадает
с UI редактора и валидацией контроллера; XP начисляется через awardXP.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 13:58:47 +03:00
Maxim Dolgolyov 177a5b94d7 feat(biochem): Фазы 2-7 — химдвижок, баланс, энергодиаграммы, графики, SMILES
Перенос изолированной работы по модулю «Биохимия» на master (разработка
велась параллельно с другой сессией; здесь только biochem-файлы).

Ядро biochem-core.js:
- Фаза 2 (химдвижок): partialCharges (по ЭО), dipole (вектор q·r по 3D VSEPR),
  polarity, massFractions, functionalGroups, analyze; chargeColor + δ± в рендерах.
- Фаза 3: balance() — балансировка уравнений (матрица элементов + дробный Гаусс).
- Фаза 7: parseSmiles (учебное подмножество) + toJSON/download.
- Фикс 3D-рендера: глубинная сортировка + объёмные связи-цилиндры.

Страницы:
- biochem.html: δ±-тепловая карта зарядов + стрелка диполя; импорт SMILES;
  экспорт PNG/JSON; замена крудных эвристик на BIO.analyze (−95 строк).
- biochem-reactions.html: энергопрофиль реакции + проверка баланса.
- biochem-properties.html: график молярных масс + экспорт CSV.

Тесты: backend/tests/biochem-core.test.js (8/8 pass: формулы, VSEPR, заряды,
полярность, баланс, SMILES, analyze).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 13:53:40 +03:00
Maxim Dolgolyov 2c8103aea4 docs(lab-content-engine): Фаза 1 done + handoff/риски для Фазы 2
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 13:51:00 +03:00
Maxim Dolgolyov 8a9ff304f2 docs(biochem): Фаза 7 (SMILES/экспорт/тесты) выполнена в плане 2026-05-30 13:26:27 +03:00
Maxim Dolgolyov 016786ac50 docs(biochem): статусы Фаз 2/3/6 выполнены в плане 2026-05-30 13:21:27 +03:00
Maxim Dolgolyov 9a64bebb77 docs(lab-content-engine): Фаза 0 re-review PASS
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 13:15:10 +03:00
Maxim Dolgolyov 6d95c3da6c docs(lab-content-engine): resume state + честный статус Фазы 0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 13:05:09 +03:00
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
Maxim Dolgolyov 410eb8a862 fix(biochem 3D): корректная глубина + объёмные связи-цилиндры
Два дефекта, из-за которых 3D читался как плоская диаграмма:
- painter-сортировка была по возрастанию z (ближние первыми) — дальние
  атомы рисовались поверх ближних. Теперь единый список примитивов
  (атомы + половинки связей) сортируется по убыванию z (дальние первыми).
- связи были тонкими плоскими линиями. Теперь — затенённые «цилиндры»:
  толстый штрих с поперечным градиентом (центр светлее, края темнее),
  двухцветные (каждая половина под цвет своего атома) — фирменный вид
  ball-and-stick. Ширина зависит от перспективы (ближе — толще).
- усилена перспектива (fov 900→700), добавлен тёмный ободок сфер для объёма.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 12:58:39 +03:00
Maxim Dolgolyov eb5593333c feat(opticsbench): конструктор Фаза 4 — новые источники/элементы + улучшения
Источники: одиночный луч и лазер (узкий пучок) + угол прицеливания
(point/single/laser/parallel наклоняются по ang).
Новые элементы:
- граница сред: Снеллиус на вертикальной плоскости + полное внутр. отражение
  (проверено: 30°→19.47°, ПВО при 50°)
- стеклянная пластина: параллельный сдвиг (преломление вход/выход)
Улучшения:
- отсечение апертурой (лучи вне линзы/зеркала поглощаются — виньетирование)
- метки F и 2F у собирающей линзы
- числовые значения у слайдеров инспектора (без пересборки панели)
bump opticsbench.js?v=5

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 12:49:53 +03:00
Maxim Dolgolyov 1674df0ddc docs(biochem): отметить выполненными Фазу 0 (ядро/DRY) и Фазу 1 (3D VSEPR) 2026-05-30 12:49:42 +03:00
Maxim Dolgolyov 1c7d8e9d95 feat(opticsbench): конструктор Фаза 3 — изображение на экране + экспорт PNG
- _drawScreenHits: светящиеся пятна (additive) в точках попадания лучей на
  экран, по длине волны — видно формирование изображения и спектр
- benchExportPng + кнопка «Снимок PNG»; подсказка про λ/белый свет
- bump opticsbench.js?v=4

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 12:40:37 +03:00
Maxim Dolgolyov 353a6cb8a9 feat(opticsbench): конструктор Фаза 2 — призма со Снеллиусом и дисперсией
- _prismInteract: тонкопризменное отклонение δ=(n−1)·A к основанию +
  хроматическая дисперсия n(λ) через _nAtWavelength
- белый свет: пучки по OB_SPECTRAL, каждый луч красится по длине волны
  (до призмы совпадают, после — расходятся в спектр); управление общим λ-баром
- _obRedraw для freebuild переключён на benchSim (был freeSim)
- сферические зеркала уже из Фазы 1; проверено численно (фиолет>красный)
- bump opticsbench.js?v=3

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 12:38:40 +03:00
Maxim Dolgolyov 832efc0907 feat(opticsbench): конструктор оптических систем — Фаза 1 (общий трассировщик)
Режим «Цепочка линз» → «Конструктор» на базе нового класса BenchSim:
- общий 2D-трассировщик: линза, зеркало (плоск./вогн./выпукл.), диафрагма,
  экран; источники предмет/точка/параллель; лимит отражений
- фокус линзы в x+f и терминация зеркала проверены численно
- динамический инспектор: палитра элементов, список схемы, свойства
  выбранного, удаление; слайдеры перерисовывают только холст (не ломают drag)
- pointer-слушатели на canvas (capture, dispose), выбор/перетаскивание
- пресеты: микроскоп/телескоп/проектор/зеркальная; сохранение состояния
  в снимок (_obGetState/_obApplyState); bump opticsbench.js?v=2
- призма — пока грубый placeholder (Снеллиус/дисперсия в Фазе 2)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 12:35:41 +03:00
Maxim Dolgolyov e4050fcaed feat(phys7): Phase 8 — финал курса. Панель 7 ачивок + confetti + завершение плана
ХАБ physics_7_hub.html:
- Подключён canvas-confetti с CDN (jsdelivr 1.6.0)
- Заменена старая ach-strip с одной ачивкой на полную панель .ach-section
  с сеткой из 7 карточек: 5 ачивок глав + лаб + master
- Master-карточка выделена (grid-column: 1/-1, фиолетовый градиент при .lit)
- Каждая карточка: иконка (★ при .lit, ? до получения), название, описание условия
- Счётчик «N / 7 ачивок получено»
- renderAchievements() читает все 7 ключей из localStorage и подсвечивает
  получённые, обновляется при focus
- При первом получении «Магистр физики 7» — confetti-залп в 3 волны (через
  sessionStorage флаг, чтобы не запускать повторно при ре-открытии хаба)
- Текст финального аккордеона: «...по всем 5 главам» вместо «3»

ПЛАН plans/textbooks-7/PLAN_PHYSICS_7.md:
- Заголовок отмечен как « ЗАВЕРШЁН» (Phase 0..8)
- Добавлена итоговая сводка реализации:
  * Таблица 9 фаз с файлами, строками и коммитами
  * Список 6 главных визуалов с указанием §
  * Таблица 7 ачивок (slug / название / условие / XP)
  * Оценка XP за полное прохождение (~3 550)
  * Список фактически использованных хелперов phys.js
  * Список уроков, учтённых с первого коммита (cache-busting, sidebar-фикс,
    delimiters, скобки в KaTeX, self-sufficient миграция, без эмоджи)

Итог: 5-й физический курс в проекте, первый учебник 7 класса по физике.
8 фаз × несколько волн каждая = ~14 100 строк кода. Все интерактивы работают.
parse-check, smoke-test и pre-commit хуки пройдены на каждом этапе.
2026-05-30 12:01:50 +03:00
Maxim Dolgolyov 3801d0cfa8 feat(stereo3d): Фаза 6 — построение сечения «по следам» (метод следов)
Путь (b): надёжный полигон (есть) + аналитический след и вспом. точки.
- _traceLine(): след = π ∩ плоскость основания y=0 (проверено численно)
- _auxiliaryPoints(): продление сторон сечения до следа (dist=0 на следе)
- _hasBase()/_sameFace(): топология тел с основанием
- настоящий пошаговый _drawSection3PStep: 6 подписанных шагов, финал скрыт
  до шага 5 (showFull); подписи в #sect3p-hint через _stepCaption
- scope: куб, параллелепипед, призма, пирамида, усеч. пирамида, тетраэдр
- bump stereo.js?v=9

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 11:49:16 +03:00
Maxim Dolgolyov ccfb6116c0 feat(stereo3d): Фаза 5 — deep-link фигур из учебников + клавиатурная a11y
- openSim('stereo:<figure>') и /lab?stereofig=<figure> открывают нужное тело
  (без изменения общего hash-роутера)
- клавиатура на canvas: стрелки=орбита, +/-=зум, R/Home=сброс
- aria-live на readout; bump stereo.js?v=8
- дробление файла на модули отложено по решению пользователя (в бэклоге)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 11:34:51 +03:00
Maxim Dolgolyov b46c761373 feat(stereo3d): Фаза 4 — визуал (подписи осей, свечение вершин, контраст рёбер)
- подписи осей X/Y/Z цветами AxesHelper
- мягкое additive-свечение вершин (без текстур), вершины поверх рёбер
- рёбра контрастнее (opacity 0.9, renderOrder над полупрозрачным телом)
- bump stereo.js?v=7

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 11:32:21 +03:00
Maxim Dolgolyov dbb6a6fa11 feat(stereo3d): Фаза 3 — readout-панель, точки на гранях, подписи вершин сечения
- live-readout overlay: тип сечения, площадь, периметр, последнее измерение
  (через info().readout; _notify добавлен в section/measure-пути)
- _raycastFace(): в режиме точек клик по грани ставит точку на поверхности
- подписи вершин сечения буквами K,L,M… (наклонное/произвольное/3-точки, ≤12 вершин)
- bump stereo.js?v=6

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 11:29:25 +03:00
Maxim Dolgolyov c802fe552a feat(stereo3d): Фаза 2 — точные сечения кривых, унификация пикинга, HiDPI-метки
- _sliceCurvedByNormal(): аналитическое сечение шара (окружность) и
  цилиндра/конуса/усеч.конуса (гладкая кривая через точное y(θ)); старый
  сэмплинг оставлен fallback'ом для почти вертикальных плоскостей
- _edgePickNDC(): корректный пикинг ребра по всей длине (было — по середине)
- _makeTextSprite: DPR-aware, аспект по тексту, обводка, анизотропия
- тип сечения кривых = окружность/эллипс; вершинные маркеры cap ≤12 точек
- bump stereo.js?v=5

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 11:19:40 +03:00
Maxim Dolgolyov 7c598d6430 feat(stereo3d): Фаза 1 — камера и навигация (инерция, pan, пресеты, скриншот)
- инерция орбиты с затуханием; панорамирование (ПКМ/СКМ/Shift+ЛКМ, 2 пальца)
- орбита вокруг сдвигаемого таргета (_panOffset)
- overlay-тулбар: сброс вида + пресеты ракурса (Изо/Спереди/Сбоку/Сверху)
- тумблер авто-вращения с реальным засыпанием loop, fullscreen, снимок PNG
- a11y-атрибуты на кнопках; bump stereo.js?v=4

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 11:13:04 +03:00
Maxim Dolgolyov 8af85961b5 perf(stereo3d): Фаза 0 — render-on-demand, остановка фонового рендера, dispose
- lab-init: _pauseAllSims() паузит активный rAF-сим при переключении (раньше стерео рендерило невидимый canvas вечно)
- stereo: render-on-demand через _invalidate()/_needsRender, loop засыпает и просыпается по взаимодействию
- pointer/touch-слушатели перенесены с window на canvas (pointer-capture), трекаются и снимаются в dispose()
- обработка webglcontextlost/restored + метод dispose()
- _clearGroup стал рекурсивным (устранена утечка вложенных групп), a11y-атрибуты на canvas
- bump stereo.js?v=3

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 11:05:35 +03:00
Maxim Dolgolyov d701d824ba docs(plans): план реализации учебника Физика 7 (Исаченкова, 2022)
Полный план в стиле PLAN_PHYSICS_8: 5 содержательных глав, 42 параграфа,
6 виртуальных ЛР, 8 фаз реализации, ~62 800 LOC.

Особенности курса:
- Новая глава §§1–7 «Методы познания»: измерения, СИ, цена деления, погрешность.
- Глава 4 «Давление» — гидростатика, закон Паскаля, барометры (нет в phys 8).
- Глава 5 «Работа/мощность/энергия» — закон сохранения механической энергии.
- Палитра sky/blue (#0284c7), не пересекается с violet phys 8, amber phys 10, teal phys 11.
- Новые хелперы в phys.js: forceVector, dynamometer, connectedVessels,
  hydraulicPress, mercuryBarometer, HillSlideSim, PendulumSim и др.
- Учтены уроки phys 9: cache-busting ?v=YYYYMMDD, sidebar-фикс на desktop,
  delimiters для renderMathInElement, скобка вне $..$.

Главный визуал курса — закон сохранения механической энергии
(горка с тележкой / маятник, графики E_к(t)/E_п(t)/E_полн(t)).
ИТОГО: 5-й физический курс проекта, первый учебник 7 класса по физике.
2026-05-30 10:12:48 +03:00
Maxim Dolgolyov 8f1fba25f9 docs(plans): мощный план Физики 9 — 19 флагман-интерактивов и симуляторов 2026-05-30 09:59:59 +03:00
Maxim Dolgolyov 8a480c8ead docs(plans): расширенный план Физики 9 — детально по каждому § и ЛР 2026-05-30 09:39:50 +03:00
Maxim Dolgolyov 839f9f65dd docs(plans): план улучшения визуала и интерактивов Физики 9 2026-05-30 09:26:06 +03:00
Maxim Dolgolyov d52ad9b06f docs(plans): план интеграции Физика 9 (Исаченкова 2019, 5 глав, 36§ + 12 ЛР) 2026-05-29 22:51:42 +03:00
Maxim Dolgolyov 8e8988ec23 docs(plans): добавлен план реализации Физика 8 (Исаченкова, 2018) 2026-05-29 22:20:00 +03:00
Maxim Dolgolyov a24c334730 docs(plans): убраны лабораторные работы из плана Физика 11
- Удалён physics_11_labs.html из списка файлов
- Удалена секция 'Лабораторный эксперимент' в хабе и wireframe
- Убрана волна W15 'physics_11_labs.html — 9 лабораторных работ' (W16 polish → W15)
- Обновлены счётчики: 10 файлов → 9, ~28 сессий → ~26, 16 волн → 15
- Из итогов убрана строка про 9 лабораторок
2026-05-29 17:35:51 +03:00
Maxim Dolgolyov dc7ad11e52 docs(plans): добавлен большой план реализации Физика 11 (Жилко-Маркович-Сокольский 2021)
Самый большой план проекта:
- 8 глав, 45 параграфов
- Новая библиотека phys-fx.js (~1000 строк): осциллограммы, маятники,
  волны, LC-контуры, RayTracer (линзы/зеркала/призмы), фотоэффект,
  атом Бора, спектры, ядро, радиоактивный распад, цепная реакция
- 8 цветовых тем по главам (cyan/violet/amber/sky/yellow/emerald/red/indigo)
- ~92 босса, ~135 квизов, 9 ачивок (включая phys11_master)
- 9 лабораторных работ — отдельная страница
- 16 волн реализации (~28 сессий) — крупнейший курс проекта
- Стиль единый с geom11_ch1 / geom10_r1 (2-кол layout, psel-grid, wg)
- Глобальный RAF-таймер для экономии CPU при 5-10 симуляциях на странице
- IntersectionObserver для паузы невидимых симуляций
2026-05-29 17:32:27 +03:00
Maxim Dolgolyov 995661158b docs(plans): добавлен план реализации Алгебры 9 + Геометрии 9
Полный план по учебникам Беларуси 2019:
- Algebra_Arefieva_9kl_rus_2019.pdf (4 главы, 19 §)
- Geometriya_Kazakov_9kl_rus_2019.pdf (4 главы, 16 §)

Порядок реализации: сначала вся Алгебра 9 (Phases 0-5),
затем вся Геометрия 9 (Phases 6-11).

Включает:
- Полное содержание каждой главы с ключевыми формулами
- SVG-стандарт качества (хелперы regularPoly, rightAngle,
  angleArcAuto, tickMarks, arrow, axes2D, plotFunc)
- Типы SVG по темам для каждого учебника
- Правила drag-интерактивов из опыта Геом 8
- Phase-by-phase порядок реализации (11 phase)
- Структура каждой главы (Wave 0 skeleton, Wave 1-N §, Wave финал)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:39:29 +03:00
Maxim Dolgolyov 085b7322cf chore(plans): mark admin-redesign + lab-split as Complete
Both features merged to master; status updated from In Progress to

Complete with merge-commit refs for traceability.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 11:16:39 +03:00
Maxim Dolgolyov 5fa2844451 docs(lab-split): mark phases 1-4 done, phase 5 deferred
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 23:03:56 +03:00
Maxim Dolgolyov 92b5c39860 refactor(lab): phase 2 — extract inline glue script to /js/labs/lab-glue.js
lab.html 4324L → 3499L (-825L). 824 lines of glue code moved.

Position preserved: lab-glue.js loads after lab-init.js, before

newton.js / forcesandbox.js / etc. — same execution order as inline.

node --check passes. /lab returns 200. /js/labs/lab-glue.js returns 200.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 22:36:26 +03:00
Maxim Dolgolyov 46e6d82010 refactor(lab): phase 1 — extract inline style block to /css/lab.css
lab.html 5180L → 4324L (-856L). All CSS moved to frontend/css/lab.css

(855L). Added <link> tag after ls.css for proper cascade.

Visual rendering unchanged — pure file move.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 22:35:07 +03:00
Maxim Dolgolyov 77ebe9e3e4 chore(plan): lab-split 5-phase plan
PLAN.md + 5 subplans + CONTEXT.md

Strategy: Incremental | Mode: Automated | Execution: Direct

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 22:33:41 +03:00
Maxim Dolgolyov ce183ef14d docs(admin-redesign): mark phase 6 done + final-review prep
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 00:15:07 +03:00