Фаза A раунда «Конструктор» (под ученика-самоучку). Прямая по 2 точкам
(имена a,b,c…) и плоскость по 3 точкам (имена α,β,γ…) как именованные
объекты сцены. Плоскость рисует полупрозрачный квад + пунктирную рамку +
сечение тела этой плоскостью (через _sliceByPlane) — сразу осмысленна.
- StereoSim: _lines/_planes (сериализуемые {x,y,z}), _constructGroup,
setLineMode/setPlaneMode, _onConstructClick, _createLine/_createPlane,
_rebuildConstructions/_drawLineObject/_drawPlaneObject, removeLast/clear,
getConstructions (с уравнением плоскости). Сброс в setFigure, очистка в
dispose, перерисовка подписей в toggleLabels, счётчик в info().
- Панель «Построения» в labs-bodies.html + glue (stereoLineMode/PlaneMode/
ConstructUndo/Clear, _stereoUpdateConstructList); интеграция в
_stereoDeactivateTools и _stereoUpdateUI.
- План: Фазы A и C в plans/STEREO_3D_IMPROVEMENT.md.
Верификация: node --check OK; headless-смоук 35/35 (создание/имена/нормаль/
коллинеарность/rebuild/summary/remove-last/clear/click-путь/setFigure-сброс/
dispose); эмодзи/eval/new Function — 0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 40 тел симуляций (~4420 строк) вынесены из lab.html в frontend/labs-bodies.html
- lab.html: 4880 -> 484 строк; тела заменены на #sim-bodies-host + синхронная
инъекция (XHR sync во время парсинга -> тела присутствуют до DOMContentLoaded,
сохраняя обработчики geometry.js и порядок инициализации)
- ctrl-бары и theory-panel ОСТАЮТСЯ в lab.html (в topbar)
- partial раздаётся существующим static middleware (frontendDir)
Гарантии: реконструкция before+region+after == оригинал побайтово;
id-мультимножество (newLab без host + partial) == оригинал; 40 sim-body div;
node --check glue/init OK. В БРАУЗЕРЕ НЕ ПРОВЕРЕНО (нужна ручная проверка).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>