Commit Graph

71 Commits

Author SHA1 Message Date
Maxim Dolgolyov 5a2a1be089 feat(math5): Глава 3 «Обыкновенные дроби» — §1–18 + финал (Sonnet по эталону)
Дроби и доли, основное свойство и сокращение, смешанные числа, сравнение,
сложение/вычитание/умножение/деление дробей, задачи на дроби; геометрия:
параллельные/перпендикулярные прямые, периметр многоугольника, площадь и
площадь треугольника, среднее арифметическое, столбчатые диаграммы,
параллелепипед и объём (2D-изометрия). Inline-SVG визуалы (полоса долей,
сетка умножения, изометрия). Реализовано Sonnet-агентом инкрементально по
образцу math_5_ch1; проверено: грузится без ошибок, §1–18 без заглушек.

Учебник «Математика 5» наполнен ЦЕЛИКОМ (3 главы, 44 §). Тесты math5: 12/12.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 10:34:15 +03:00
Maxim Dolgolyov 06e9846cc3 feat(math5): Глава 2 «Выражения. Уравнения» — §1–9 + финал (Sonnet по эталону)
Числовые выражения и порядок действий, выражения с переменными, уравнение
(SVG-весы + решение/проверка корня), формулы (P,S,путь), решение задач
уравнением, угол (SVG-рисунок + классификация острый/прямой/тупой/развёрнутый),
прикладные/занимательные/исторические § + финал-боссы. Реализовано Sonnet-агентом
по образцу math_5_ch1, проверено: грузится без ошибок, §1–9 без заглушек. Тесты: 11/11.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 10:18:29 +03:00
Maxim Dolgolyov 12a08e7d42 feat(math5): Глава 1 ЗАВЕРШЕНА — §15–§17 (вокруг нас, движение, история чисел)
§15 Математика вокруг нас (задачи из жизни + прикидка в уме). §16 Движение/
взвешивание/переливание (s=v·t тренажёр + логические задачи). §17 Исторические
сведения (системы счисления; тренажёр римских цифр + квиз по истории чисел).
Глава 1 целиком: §1–17 + финал, все § наполнены (тест «нет заглушек»). Эталон
для Sonnet по Гл.2–3. Тесты math5: 9/9.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 09:41:17 +03:00
Maxim Dolgolyov 6e64339e8a feat(math5): Глава 1 §13–§14 — признаки делимости, простые/составные числа
§13 Признаки делимости (на 2/3/4/5/9/10; живой чекер: вводишь число → флажки
с объяснениями + квиз «делится ли нацело»). §14 Простые/составные (определения,
разложение на множители; интерактивное решето Эратосфена «найди простые 2..30»
+ квиз «простое или составное»). Шпаргалки/типсы §13–14. Тесты math5: 8/8.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 09:38:10 +03:00
Maxim Dolgolyov a4a0ae1a77 feat(math5): Глава 1 §10–§12 — степень, деление с остатком, НОД и НОК
§10 Степень (a^n, основание/показатель; квадрат из клеток a×a + тренажёр степеней).
§11 Деление с остатком (a=bq+r; точки по b в ряд, остаток красным + тренажёр
неполного частного). §12 Делители/кратные, НОД/НОК (делители-чипсы с подсветкой
общих → НОД + тренажёр НОК). Шпаргалки/типсы §10–12. Тесты math5: 8/8.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 09:36:02 +03:00
Maxim Dolgolyov 9ed89ab0c8 feat(math5): Глава 1 §7–§9 — округление, сложение/вычитание, умножение/деление
§7 Округление (правило + округление на координатном луче до десятков + до
сотен/тысяч). §8 Сложение/вычитание (столбик, свойства + тренажёр + «найди
неизвестное» как подготовка к уравнениям). §9 Умножение/деление (прямоугольник
из точек a×b как визуал + тренажёр ×/÷). Шпаргалки/типсы §7–9. Тесты math5: 8/8.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 09:33:03 +03:00
Maxim Dolgolyov 5eb9fe3f1c feat(math5): Глава 1 §3–§6 — сравнение, фигуры, измерение, координатный луч
§3 Сравнение (правила + тренажёр знаков + «выбери наибольшее»).
§4 Точка/прямая/луч/отрезок/плоскость (SVG-галерея фигур + квиз «что изображено»
+ счёт отрезков по точкам). §5 Измерение отрезков (SVG-линейка с цветным отрезком
+ перевод единиц длины). §6 Координатный луч (Math6.numberLine ray: назови
координату + расстояние между точками). Шпаргалки/типсы §3–6. Тесты math5: 8/8.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 09:29:59 +03:00
Maxim Dolgolyov bcc6c7e79b feat(math5): Глава 1 — §1 «Как решать задачу», §2 «Чтение и запись. Разряды», финал
§1: 4 шага решения (Пойа) + тренажёр «на каком шаге ученик» + решатель задач.
§2: натуральные числа и нуль, классы/разряды, интерактивная разрядная таблица
(ввод числа → раскладка по классам единицы/тысячи/миллионы) + тренажёр «цифра
в разряде». Финал главы 1 — 5 боссов (разряды/округление/действия/степень).
Шпаргалки/типсы/глоссарий для §1/§2/финала. §3–17 пока заглушки движка.
Тесты math5: 8/8.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 09:18:41 +03:00
Maxim Dolgolyov c020a2c948 feat(math5): Phase 0 — фундамент учебника «Математика 5»
План (PLAN_MATH_5 + VISUAL: карта 22 визуал-компонентов), миграция
050_math5_hub (хаб math-5 + 3 главы: Натуральные числа §1–17, Выражения.
Уравнения §1–9, Обыкновенные дроби §1–18), страница-хаб (3 карточки +
курсовой финал из 3 боссов + звание «Математик 5 класса») и 3 каркаса глав
на ОБЩЕМ движке math6 (window.M6 с slug math-5-chN, ключи math5_*).
Baseline-тест math5-page: 6/6. § без билдера → заглушка движка.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 09:09:42 +03:00
Maxim Dolgolyov 21c18ce477 feat(math6): полировка Гл.6 §3 — перетаскиваемый треугольник
Math6Anim.triangleDrag (SVG): тащишь вершины A/B/C — тип пересчитывается
вживую по сторонам и по углам, штрихи равных сторон + метка прямого угла.
Блок «Песочница» перед интерактивами §3. Тесты math6: 20/20.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 22:13:01 +03:00
Maxim Dolgolyov 51db000545 feat(math6): полировка Гл.2 — pieGrow, balanceScale, constAreaRect
Math6Anim.pieGrow (растущие сектора, §7 — заменил статичный Math6.pie,
цвета синхронны легенде), balanceScale (весы a·d ? b·c, §3, кнопка «другой
пример»), constAreaRect (обратная проп. = постоянная площадь, §4, ползунок x).
Headless-safe. Тесты math6: 20/20 (поправлен ассерт §7 svg→canvas).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 22:07:56 +03:00
Maxim Dolgolyov 302b062649 feat(math6): полоса процента (Гл.2 §1) + фильтр множества (Гл.3 §1)
Math6Anim.barModel — полоса 0..100%, заполняется (easing) к проценту,
синхронно %↔десятичная↔дробь; вшита в §2.1 на тот же ползунок, что и сетка 100.
Math6Anim.setFilter — числа 1..12 по очереди проходят сквозь «фильтр свойства»
(чётные/кратные 3/больше 6), подходящие падают в множество; кнопки смены свойства;
вшита в §3.1. Теперь во ВСЕХ 6 главах есть canvas-анимации + stepPlayer везде.
Headless-safe. Тесты math6: 20/20.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 22:00:57 +03:00
Maxim Dolgolyov 97966ba2df feat(math6): симметрия (Гл.6 §4 центральная, §5 осевая) — reflectFold
Math6Anim.reflectFold: на координатной плоскости треугольник плавно
переходит на свой образ — центральная (поворот 180° вокруг O, режим
'central') или осевая (отражение через Oy, режим 'axial'); образ показан
красным пунктиром, ось/центр выделены. Один компонент закрыл §4 и §5.
Headless-safe. Тесты math6: 20/20.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 21:56:57 +03:00
Maxim Dolgolyov 555f701b57 feat(math6): умножение-прыжки (Гл.4 §7) + координатный тир (Гл.5 §1)
Math6Anim.numberLineJumps — a·b как a прыжков-дуг по b на числовой прямой
(зелёные вправо, красные влево, приземление на произведение); ползунки a,b.
Math6Anim.coordGame — «поставь точку (x;y)»: клик по узлу сетки, проверка,
счёт, при промахе показывает верную точку. План: 3D-тела исключены.
Headless-safe. Тесты math6: 20/20.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 21:53:47 +03:00
Maxim Dolgolyov f4ece6f5b1 feat(math6): термометр (Гл.4 §1) — ±числа и модуль наглядно
Math6Anim.thermometer: вертикальный термометр на canvas, ртуть плавно
поднимается/опускается к значению (easing), выше нуля — красный, ниже — синий;
подпись поясняет знак и |x| как расстояние до нуля. Ползунок −10..10.
Вшит в Гл.4 §1. Headless-safe. Тесты math6: 20/20.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 21:47:22 +03:00
Maxim Dolgolyov 8edab2196f feat(math6): stepPlayer — все «Разборы по шагам» стали интерактивными
Math6Anim.stepPlayer (DOM): пошаговый плеер с кнопками Назад/Дальше/Авто
и точками прогресса, рендерит KaTeX по шагам. Math6Anim.stepifyExamples
сканирует секцию и превращает карточки «Разбор по шагам» (<ol> в теле) в
такой плеер. Движок зовёт stepifyExamples в goTo (guarded) → автоматически
во ВСЕХ главах и параграфах, включая простые работы с дробями/столбиком.
Подключён math6_anim в Гл.2,3 (теперь во всех 6). Тесты math6: 20/20.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 21:44:34 +03:00
Maxim Dolgolyov 1fc1672acd feat(math6): живой график y=kx / y=k/x (Гл.5 §3) — плавное перетекание при k
Math6Anim.plotLive: canvas-плоскость с сеткой/осями; кривая плавно «перетекает»
(easing к целевому k). Переключатель прямая (y=kx, через начало) / обратная
(y=k/x, две ветви). Слайдер k (−4..4, шаг 0,5) двигает кривую вживую.
Вшито в Гл.5 §3 рядом со статичным графиком. Headless-safe. Тесты 19/19.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 21:33:47 +03:00
Maxim Dolgolyov 61de12e2de feat(math6): ещё 2 canvas-демо — прыжки по прямой (±) и машинка+график
Math6Anim расширен: numberLineWalk (анимированные стрелки-шаги a→b на
числовой прямой для сложения рациональных) и carGraph (машина едет по
дороге, а график «путь–время» вычерчивается синхронно; горизонталь = стоянка).
Вшито: Гл.4 §4 (прыжки, ползунки a,b) и Гл.5 §2 (машинка+график).
Headless-safe. Тесты math6: 19/19 (анимации в Гл.1/4/5/6 монтируются).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 21:29:03 +03:00
Maxim Dolgolyov 6b734957e9 feat(math6): canvas-анимации — движок math6_anim.js + 3 флагмана
Новый headless-safe движок window.Math6Anim (по канве chem7_anim:
RAF-цикл с паузой вне экрана через IntersectionObserver, prefers-reduced-motion,
в jsdom/HeadlessChrome getContext НЕ вызывается → тесты не падают).
Демо: rollingCircle (колесо катится → путь = C=2πr=πd), sweepArea
(радиус заметает круг → S=πr²), areaModel (площадная модель умножения a·b
на сетке 0,1). Вшито: Гл.6 §2 (колесо + заметание), Гл.1 §6 (умножение).
Тесты math6: 19/19 (+canvas-демо монтируются headless-safe).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 21:24:37 +03:00
Maxim Dolgolyov fe378371bd fix(math6): запускать init() после экспортов хелперов в window
Реальная причина пустых §1 (заглушки) во всех главах: в math6_engine.js
вызов init() стоял ВЫШЕ строк window.makeCard=…/secNav=…. При обычной
загрузке через defer скрипт исполняется при readyState='interactive',
поэтому ветка `else init()` срабатывала синхронно — init→goTo→buildP1()
звал makeCard ДО его экспорта → ReferenceError 'makeCard is not defined'
→ перехват в ensureBuilt → заглушка. В jsdom-тестах баг не воспроизводился
(там старт шёл через DOMContentLoaded, экспорты успевали).

- init() теперь вызывается СТРОГО после всех window.* экспортов.
- ensureBuilt перечитывает window.M6 (надёжнее против устаревшего замыкания).
- html учебника всегда no-store (убрал кэш-причину стале-страниц).
- регресс-тест: init() обязан идти после window.makeCard. Тесты 18/18.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 20:58:05 +03:00
Maxim Dolgolyov 0bb48d3f04 feat(math6): курсовой финал на хабе + звание «Математик 6 класса»
Капстоун-бой из 6 испытаний (по одному из каждой главы: десятичные,
проценты, множества, рациональные, координаты, геометрия) с HP-баром.
Победа 5/6 → +150 XP (LS.xp) + звание «Математик 6 класса» (зажигается
ачивка-strip, флаг localStorage math6_course_done). Тесты math6: 17/17.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 20:11:15 +03:00
Maxim Dolgolyov 21853bdc27 feat(math6): Глава 4 — Рациональные числа (§1–§11 + финал)
§1 числа со знаком + координатная прямая; §2 модуль, противоположные,
диаграмма N⊂Z⊂Q; §3 сравнение (прямая + наибольшее из трёх);
§4 сложение (демонстратор на прямой + тренажёр); §5 вычитание = +противоп.
(тренажёр + перепиши сложением); §6 законы сложения (удобный счёт +
определи закон); §7 умножение (таблица знаков + тренажёр); §8 деление
(тренажёр + знак частного); §9 порядок действий; §11 прикладной
(температуры/долги/глубина); финал — 6 боссов. ВСЕ 6 глав готовы.
Тесты math6: 17/17.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 20:08:48 +03:00
Maxim Dolgolyov 203807ada8 feat(math6): Глава 3 — Множество (§1–§5 + финал)
§1 множество/элементы/∅ (∈ или ∉ + счёт элементов);
§2 способы задания (свойство→множество + проверка по свойству);
§3 операции ∩/∪ (наглядно через Math6.venn + счёт результата);
§4 круги Эйлера (задача с числами в областях + формула |A∪B|=|A|+|B|−|A∩B|);
финал — 5 боссов. Добавлен Math6.venn (две окружности с заливкой
областей и числами). Тесты math6: 16/16.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 20:03:03 +03:00
Maxim Dolgolyov a7835659d5 feat(math6): Глава 2 — Проценты и пропорции (§1–§9 + финал)
§1 процент наглядно (сетка 100) + конвертер %↔дробь↔десятичная;
§2 три типа задач (классификатор + тренажёр % от числа);
§3 пропорция (найди член крест-накрест + проверка свойства);
§4 прямая/обратная зависимость (классификатор + таблица);
§5 решение пропорцией (прямые и обратные задачи);
§6 масштаб (карта↔местность); §7 круговые диаграммы (Math6.pie +
%↔градусы); §9 прикладной; финал — 5 боссов. Тесты math6: 15/15.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 19:58:48 +03:00
Maxim Dolgolyov 670ae80124 feat(math6): Глава 6 — Наглядная геометрия (§1–§5 + финал)
§1 тела (куб/призма/пирамида/цилиндр/конус) + развёртки: квиз грани/рёбра/
вершины + «какое тело из развёртки»; §2 окружность и круг (слайдер r → C, S
при π=3,14) + тренажёр; §3 виды треугольников по сторонам и по углам
(классификация вычисляется из координат, штрихи равных сторон, метка прямого
угла); §4 центральная симметрия (построй A'); §5 осевая симметрия (Oy/Ox);
финал — 5 боссов. SVG: тела/развёртки/треугольники inline, симметрия на
Math6.plane. Тесты math6: 14/14.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 19:48:23 +03:00
Maxim Dolgolyov 09c61d8eed feat(math6): Глава 5 — Координатная плоскость (§1–§5, на Math6.plane)
§1 чтение координат + определение четверти (плоскость с точкой);
§2 чтение графиков реальных процессов + изменение величины (polyline);
§3 слайдер y=kx + классификатор прямая/обратная пропорциональность;
§5 прикладной (путь–время); финал — 5 боссов (координаты, четверти,
график, k для y=kx и y=k/x). Math6.plane получил поддержку polyline.
Тесты math6: 13/13.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 19:42:48 +03:00
Maxim Dolgolyov 4b949f7ce2 feat(math6): Глава 1, волна 4 — §12 прикладной + финал-боссы (глава завершена)
§12 «Математика вокруг нас»: задачи из жизни (покупки, сдача, измерения)
+ среднее значение. Финал главы: бой с 5 боссами (разряды, округление,
сложение/вычитание, умножение, деление на дробь) с HP-баром; победа 4/5+
даёт +40 XP и достижение «Глава 1 пройдена». Эталонная Глава 1 готова: все
12 параграфов наполнены. Тесты 12/12.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 15:06:54 +03:00
Maxim Dolgolyov 826e7b04f2 feat(math6): Глава 1, волна 3 — §7–§10 (деление, период, преобразования)
§7 деление на натуральное (тренажёр + восстанови делимое);
§8 деление на десятичную (демонстратор переноса запятой + тренажёр);
§9 конечная/бесконечная (классификатор по множителям 2·5 + период через
долгое деление с отслеживанием остатков, выбор десятичной записи);
§10 сопоставление десятичная↔обыкновенная (DnD) + вычисление выражений.
Шпаргалки/типсы/глоссарий §7–§10. Тесты 11/11.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 15:03:30 +03:00
Maxim Dolgolyov dd0d63d25a feat(math6): Глава 1, волна 2 — §4–§6 (сложение/вычитание, сдвиг запятой, умножение)
§4 столбик «запятая под запятой» + ловушка выравнивания;
§5 демонстратор сдвига запятой ×/÷10,100,1000 + тренажёр;
§6 подсчёт знаков после запятой (ползунки) + тренажёр умножения.
Целочисленные мантиссы вместо float. Шпаргалки/типсы/глоссарий. Тесты 10/10.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 14:58:44 +03:00
Maxim Dolgolyov 653d3564df feat(math6): Глава 1, волна 1 — §1–§3 (разряды, сравнение/округление, координатный луч)
§1 разрядный конструктор (ползунки) + квиз «цифра в разряде»;
§2 сравнение на числовой прямой + тренажёр округления;
§3 чтение координаты и поиск точки A–D на координатном луче (Math6.numberLine).
Теория-карточки, шпаргалки, подсказки, глоссарий. Тесты: 9/9.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 14:54:28 +03:00
Maxim Dolgolyov 1d95f72d45 feat(math6): Phase 0 — инфраструктура учебника «Математика 6»
Хаб + 6 каркасов глав на общем движке math6_engine.js (плумбинг:
прогресс/XP/ачивки/навигация/сайдбар/поиск/глоссарий + хелперы),
math6_svg.js (window.Math6: numberLine, plane), math6.css (фреймворк
по образцу Алгебры 7). Миграция 049: хаб math-6 + math-6-ch1..ch6.
Секции глав генерируются движком из M6.paras; § без билдера → заглушка.
Тест math6-page.test.js: 8/8 (хаб 6 карточек, 6 глав, навигация, прогресс).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 14:47:21 +03:00
Maxim Dolgolyov ac6552b44f feat(chemistry7): визуал V1-хвост — §9 валентные связи + §12 подсчёт атомов
§9: добавлена схема «связей-крючков» (Chem7Anim.valenceLink, SVG) — атомы A и B
с чёрточками валентности, связи прорисовываются (draw-in); число связей = НОК.
§12: под балансировщиком — анимированный подсчёт атомов (реагенты vs продукты),
атомы-точки появляются масштабированием; подтверждается баланс слева=справа.

Все интерактивы Химии 7 анимированы. Тесты chem7: 16/16; полный прогон 162/165.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 20:07:06 +03:00
Maxim Dolgolyov 639f985e6f feat(chemistry7): визуал V4 (Глава 4) — электролиз 2:1, индикаторы, титрование
Подключён chem7_anim.js в Главу 4.
- §23 (звёздный): электролиз воды — два потока пузырьков H₂ (18) и O₂ (9),
  наглядно 2:1;
- §24/ЛО5 индикаторы щёлочи: блок плавно меняет цвет (фенолфталеин → малиновый);
- §25/ПР4 нейтрализация (звёздный): раствор плавно обесцвечивается
  малиновый → бесцветный (colorBlock).

Все 4 главы анимированы. Тесты chem7: 16/16; полный прогон 162/165 (3 — baseline Auth).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 19:54:50 +03:00
Maxim Dolgolyov 33f968bff9 feat(chemistry7): визуал V3 (Глава 3) — пузырьки, морфинг цвета, индикаторы
Подключён chem7_anim.js в Главу 3.
- §21 ряд активности (звёздный): клик металла левее H₂ → анимация пузырьков
  H₂ (bubbleField); правее (Cu, Ag) — «реакция не идёт»;
- §19 восстановление CuO: colorBlock плавно чёрный→красный (медь); горение —
  пламя водорода;
- §20/ЛО3 индикаторы: блок плавно меняет цвет на цвет индикатора в кислоте.

Тесты chem7: 16/16; полный прогон 162/165 (3 — baseline Auth).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 19:51:27 +03:00
Maxim Dolgolyov e8cb95be55 feat(chemistry7): визуал V2 — звёздный флагман §15 «Горение» (анимация пламени)
Подключён chem7_anim.js в Главу 2. §15: статичное SVG-пламя заменено на
анимированный flameBox с достоверным цветом по веществу — углерод оранжевое,
сера синее, фосфор ярко-белое, железо/магний с искрами; продукт-оксид и
уравнение всплывают. Тесты chem7: 16/16 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 19:45:53 +03:00
Maxim Dolgolyov 41985a93eb feat(chemistry7): визуал V1 — анимация §10 (признаки реакции) и §11 (осадок)
chem7_anim.js: CSS-хелперы (jsdom-safe, без canvas) — bubbleField (пузырьки
газа), precipField (падающий осадок + слой), flameBox (мерцающее пламя+искры),
colorBlock (плавная смена цвета вещества).
§10/ЛО1: «Провести опыт» проигрывает анимацию по типу опыта (малахит
зеленеет→чернеет, голубой осадок CuSO4+NaOH, синее пламя серы, пузырьки CO2).
§11: при «Смешать» формируется осадок Cu(OH)2, весы остаются ровными.

Тесты chem7: 16/16 pass; полный прогон 162/165 (3 — baseline Auth).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 19:42:33 +03:00
Maxim Dolgolyov f620562124 feat(chemistry7): визуальный апгрейд V0 (движок) + пилот V1
chem7_anim.js — анимационный движок (window.Chem7Anim): RAF-цикл с паузой
вне экрана (IntersectionObserver), prefers-reduced-motion, headless-guard
(jsdom-safe: молекулы на SVG, canvas без getContext в тестах),
molecule3d (вращающаяся 3D-модель, drag), separation (частицы:
фильтр/выпаривание/магнит/отстаивание/перегонка), colorMorph, confettiSmall.

Пилот в Главе 1:
- §5/§6: статичные галереи → вращающиеся 3D-модели (H2/O2/O3/N2, H2O/CO2/CH4/NH3) с переключателем;
- §2/ПР1: при верном методе разделения проигрывается анимация частиц.

Тесты chem7: 16/16 pass; полный прогон 162/165 (3 — baseline Auth).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 19:35:44 +03:00
Maxim Dolgolyov 7574d16678 feat(chemistry7): Phase 4 — Глава 4 «Вода» завершена (§§23–26 + ЛО5 + ПР4 + финал)
§23 Состав и свойства воды (разложение 2:1 + реакции воды),
§24 Основания (конструктор Me(OH)n + индикаторы щёлочи),
ЛО5 Действие щелочей на индикаторы,
§25 Реакция нейтрализации (анимация фенолфталеин малиновый → бесцветный),
ПР4 Реакция нейтрализации, §26 Охрана окружающей среды (экология-инфографика),
финал главы (6 боссов). chem7_ch4_widgets.js.

ВСЕ 26 параграфов курса «Химия 7» наполнены. Тесты chem7: 15/15 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 19:04:49 +03:00
Maxim Dolgolyov 1635bc6051 feat(chemistry7): Phase 3 Волна 2 — Глава 3 завершена (§21, ЛО4, §22, ПР3, финал)
§21 Кислоты и металлы (интерактивный ряд активности),
ЛО4 Кислоты с металлами (опыт: пузырьки H2, медь не реагирует),
§22 Соли как продукты замещения (конструктор солей по валентности),
ПР3 Получение водорода (проверка чистоты — гремучий газ),
финал главы (6 интегрированных боссов + шпаргалка).

Глава 3 «Водород» наполнена полностью (§§18–22). Тесты chem7: 14/14 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 19:00:18 +03:00
Maxim Dolgolyov 0af08bcc55 feat(chemistry7): Phase 3 Волна 1 — Глава 3, §18 + §19 + §20 + ЛО3
§18 Водород — элемент и простое вещество (паспорт + модель H2),
§19 Химические свойства водорода (горение → вода, восстановление CuO → Cu),
§20 Понятие о кислотах (индикаторы лакмус/метилоранж + таблица кислот),
ЛО3 Действие кислот на индикаторы. chem7_ch3_widgets.js. Тест: 13/13 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 18:57:28 +03:00
Maxim Dolgolyov 2c80a52d6f feat(chemistry7): Phase 2 Волна 2 — Глава 2 завершена (§16, §17, ПР2, финал)
§16 Оксиды (конструктор оксида по валентности + классификатор оксид/не оксид),
§17 Получение кислорода (схема разложения KMnO4/H2O2, понятие катализатора),
ПР2 Получение кислорода (доказательство тлеющей лучинкой),
финал главы (6 интегрированных боссов + шпаргалка).

Глава 2 «Кислород» наполнена полностью (§§13–17). Тесты chem7: 12/12 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 18:50:23 +03:00
Maxim Dolgolyov e949cb18a5 feat(chemistry7): Phase 2 Волна 1 — Глава 2, §13 + ЛО2 + §14 + §15
§13 Воздух как смесь газов (интерактивная диаграмма состава),
ЛО2 Сборка приборов и собирание газов (выбор способа собирания),
§14 Кислород — элемент и простое вещество (переключатель O/O2/O3 + модели),
§15 Химические свойства кислорода (симулятор горения C/S/P/Fe/Mg → оксид).
chem7_ch2_widgets.js. Тест: 11/11 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 18:40:16 +03:00
Maxim Dolgolyov 13cbbacc1f feat(chemistry7): Phase 1 Волна 4 — Глава 1 завершена (§§10–12 + ЛО1 + финал)
§10 Физические и химические явления (детектор признаков реакции),
ЛО1 Признаки реакций (опыты с признаками), §11 Закон сохранения массы
(весы сохранения массы), §12 Составление уравнений (балансировщик через
Chem8.equationBalancer), финал главы (6 интегрированных боссов + шпаргалка).

Глава 1 «Первоначальные химические понятия» наполнена полностью (12§).
Тесты: 10/10 chem7 pass; полный прогон 156/159 (3 — известный baseline Auth).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 18:33:55 +03:00
Maxim Dolgolyov bc50a0d9f1 feat(chemistry7): Phase 1 Волна 3 — Глава 1, §§7–9
§7 Химическая формула (разбор формулы на состав, индекс/коэффициент),
§8 Относительная молекулярная масса (калькулятор M_r через Chem8.molarMass),
§9 Валентность (конструктор формулы по валентности через НОК индексов).
Теория, тренажёры задач. Тест: 9/9 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 18:29:40 +03:00
Maxim Dolgolyov f7d27ecb91 feat(chemistry7): Phase 1 Волна 2 — Глава 1, §§4–6
§4 Относительная атомная масса (весы атомов: во сколько раз тяжелее),
§5 Молекулы и простые вещества (галерея молекул O2/O3/H2/N2 шариками),
§6 Сложные вещества (классификатор простое/сложное + галерея H2O/CO2/CH4/NH3).
Теория, тренажёры задач. Тест: 8/8 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 18:26:17 +03:00
Maxim Dolgolyov 185ce2b640 feat(chemistry7): Phase 1 Волна 1 — Глава 1, §§1–3 + ПР1
§1 Химия — наука о веществах (классификатор тело/вещество),
§2 Чистые вещества и смеси (разделитель смесей: фильтр/выпаривание/
магнит/отстаивание/перегонка), ПР1 разделение смеси соль+песок,
§3 Атомы и химические элементы (каталог элементов + тренажёр символов).
Теория, тренажёры задач (POOLS), глоссарные шпаргалки. chem7_ch1_widgets.js.
Тест: 7/7 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 18:22:36 +03:00
Maxim Dolgolyov c33b4ab4f6 feat(chemistry7): Phase 0 — фундамент учебника «Химия 7» (hub + 4 главы)
- миграция 046_chemistry7_hub.sql: родитель chemistry-7 (26§) + 4 ребёнка
- chemistry_7_hub.html: emerald-палитра, 4 главы, финал курса (8 боссов,
  ачивка «Химик 7 класса»)
- chemistry_7_ch1..ch4.html: каркасы глав на общем движке chem8_engine.js
  + chem8-textbook.css; PARAS по реальной программе, заглушки-builder'ы
- chem7_svg.js: неймспейс Chem7 (надстройка над Chem8), стабы виджетов
- chemistry7-page.test.js: jsdom-каркас (6 тестов, все проходят)

Содержание § наполняется в фазах 1–4. См. plans/textbooks-7/PLAN_CHEMISTRY_7.md

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 18:13:37 +03:00
Maxim Dolgolyov fb6175e4a2 feat(lab-content-engine): phase 5 завершение — редактор связей в админке + кнопка в учебнике
- lab.js: GET /api/lab/links/all?kind= — пакетный обратный поиск (byRef map),
  чтобы каталог учебников не делал N+1 запросов
- tests/lab-links.test.js: +3 теста для /links/all (group/400/401) -> 21/21
- admin/sections/sims.js: inline-редактор курикулумных связей на карточке симуляции
  (кнопка «Связи» -> панель: список связей с удалением + выбор учебника + добавить);
  использует /api/access/catalog, POST/DELETE /links. Без LS.modal (inline-панель)
- textbooks.html: кнопка «В лабораторию» на карточке учебника, если есть связанные
  симуляции (один батч-запрос /links/all при загрузке); deep-link /lab?sim=<id>

Двусторонняя навигация sim <-> учебник готова. Иконки .ic, без эмодзи.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 17:26:35 +03:00
Maxim Dolgolyov 8edab4638b fix(lab-content-engine): phase 5 test seed — фильтр несуществующих колонок
seedRow падал 'table topics has no column named slug': в схеме topics нет slug
(дрейф между ветками). seedRow теперь оставляет ТОЛЬКО ключи-реальные колонки
(PRAGMA table_info) и доливает required NOT NULL. lab-links 18/18, оба файла 29/29.
+ PLAN: строка Фазы 5 = done.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 16:53:09 +03:00
Maxim Dolgolyov 15c74f5aa8 fix(lab-content-engine): phase 5 — read-роуты auth-only, мутации inline admin
GET /related и /links возвращали 200 без токена: они были ПОСЛЕ blanket
router.use(requireRole('admin')) (хрупкий порядок при повторном mount роутера
в тестах). Убрал blanket; каждая мутация (patch/reorder/links POST+DELETE)
имеет INLINE requireRole('admin'); read-роуты — auth-only.
Также lab-links seed переведён на seedRow() (NOT NULL дрейф схемы).

lab-links 18/18, lab-sims 11/11, route-auth: 0 роутов lab.js во флаге.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 16:40:19 +03:00