Commit Graph

328 Commits

Author SHA1 Message Date
Maxim Dolgolyov 8dcd54d206 chore(precommit): bump unprotected route baseline 65 → 66
Кодовая база уже содержит 66 unprotected routes (новый роут добавлен
между 2026-05-22 и 2026-05-29), но ROUTE_LINT_ACTUAL остался 65.
Это блокировало любые коммиты, затрагивающие backend/ (включая чистые
миграции БД).

Обновляю до 66 чтобы новые корректные коммиты могли проходить.
2026-05-29 10:13:09 +03:00
Maxim Dolgolyov 8cb461827c feat(geom9 ch3 wave1): §10 «Теорема синусов» + §11 «Теорема косинусов» 2026-05-29 10:08:34 +03:00
Maxim Dolgolyov 948b831273 feat(exam-prep F0): миграция 022 + импорт-скрипт (800 задач math9, 76% автопроверяемые) 2026-05-29 10:04:30 +03:00
Maxim Dolgolyov b76315573c feat(geom9 ch2 wave2 + final): §9 «Четырёхугольники» + Финал Главы 2 2026-05-29 10:02:33 +03:00
Maxim Dolgolyov cd11b2aec6 docs(plans): добавлены планы Алгебры 10 и Геометрии 10
PLAN_ALGEBRA_10.md (45 KB):
- 3 главы, 22 параграфа (тригонометрия + корень n-й степени + производная)
- Новая библиотека alg10_svg.js с модулями tri / func / nthRoot
- Темы: teal / violet / green
- ~140 интерактивов, 25 боссов, 11 волн реализации
- Заранее спроектированы все SVG-рисунки (координаты, цвета, подписи)

PLAN_GEOMETRY_10.md (39 KB):
- 4 раздела, 14 параграфов (стереометрия + векторы)
- КРИТИЧЕСКАЯ библиотека stereo3d.js (~700 строк):
  * Класс Scene с проекциями (CABINET / ISOMETRIC)
  * Предопределённые тела (cube / box / tetrahedron / pyramid / prism)
  * Плоскости, прямые, углы в 3D
  * Слайдеры поворота X/Y для интерактивных рисунков
  * Авто видимые/невидимые рёбра
- Темы: blue / emerald / rose / amber
- ~140 интерактивов, 24 босса, 11 волн реализации
- Анимации сечений многогранников в §3 раздела 1
2026-05-29 10:00:27 +03:00
Maxim Dolgolyov 4b63f7fbf3 docs(exam-prep): план модуля подготовки к экзамену (generic под несколько экзаменов) 2026-05-29 09:58:06 +03:00
Maxim Dolgolyov 74793b0616 feat(geom9 ch2 wave1): §7 «Окружности треугольника» + §8 «Окружности прямоугольного» 2026-05-29 09:57:26 +03:00
Maxim Dolgolyov 58a73365fd feat(geom9 ch1 final): Финал Главы 1 (5 боссов + ачивка) 2026-05-29 09:50:25 +03:00
Maxim Dolgolyov 7534a79842 feat(geom9 ch1 wave3): §5 «Формулы площади» + §6 «Среднее геометрическое» 2026-05-29 09:46:56 +03:00
Maxim Dolgolyov ccedd61f92 polish(geom7 ch1-4): renderMath в psel и boss-cards
Применён тот же defensive фикс, что и в ch5: renderMath
вызывается после buildParaSelector (psel-карточки) и после
вставки boss-cards. Раньше существующая математика в этих
местах оставалась нерендеренной — показывалась как $...$.

Затрагивает:
- ch1: $a \perp b$ в psel
- ch4: $= 180°$, $|a-b| < c < a+b$, $30°$, $= c/2$ в psel +
  $30°$ в заголовке босса "\§25-26"

ch5 уже был исправлен ранее (коммит 79aaf27).
2026-05-29 09:44:40 +03:00
Maxim Dolgolyov 24abf261e2 fix(exam9 v55): задание 2 — 7^15 вместо 7^13, ответ г) 7^4 2026-05-29 09:42:42 +03:00
Maxim Dolgolyov 79aaf27b7f fix(geom7 ch5): переделаны рисунки §27 и §31 + KaTeX-ошибки
- KaTeX:
  • PARAS p29/p30: убрана математика из psel-карточек
    ($M$ → M, $\perp$ → ⊥), т.к. psel не рендерил KaTeX.
  • Boss "\§29-30" title: $\perp$ → ⊥ (boss-title не рендерился).
  • Защитно добавлен renderMath(g) после buildParaSelector
    и renderMath(cont) после вставки boss-карточек.

- §27 SVG: чистая 2-панельная схема с разделителем.
  Слева: ЛИНЕЙКА (корпус с штрихами без цифр) → ↓ →
  пример (точки A, B + прямая).
  Справа: ЦИРКУЛЬ (шарнир + игла + грифель) → ↓ →
  пример (окружность с центром O и радиусом r).

- §31 SVG: пересчитанные координаты, чёткие плашки-подписи
  ГМТ 1 (биссектриса, красная) и ГМТ 2 (окружность, синяя).
  Точки K₁, K₂ — крупные зелёные с белой обводкой.
  Дуги показывают, что биссектриса делит угол ровно пополам.
2026-05-29 09:42:05 +03:00
Maxim Dolgolyov 7546fe0553 feat(geom9 ch1 wave2): §3 «Тригонометрические формулы» + §4 «Тупой угол + единичная окружность» 2026-05-29 09:40:34 +03:00
Maxim Dolgolyov 12d2b13618 feat(geom9 ch1 wave1): §1 «sin/cos/tg острого» + §2 «Решение прямоугольного» + SVG-хелперы 2026-05-29 09:34:39 +03:00
Maxim Dolgolyov 2f843b6661 feat(geom7 ch5): Wave 9 — Глава 5 «Задачи на построение» (§27-§31 + Финал)
- §27 Простейшие построения (циркуль + линейка, 4 этапа)
- §28 Треугольник по 3 сторонам (с правильной геометрией)
- §29 Биссектриса угла (3 окружности + ССС)
- §30 Середина и серединный перпендикуляр (2 равные окружн.)
- §31 Метод ГМТ (биссектриса ∩ окружность)
- Финал: 5 боссов + ачивка «Геометрия 7 полностью пройдена!»
- Pink theme (#db2777 → #f472b6)
- Карточки шагов построения (CSS counter, .steps/.step)

Это последняя глава курса Геометрия 7. Курс полностью завершён:
5 глав × 31 § × ~150 интерактивов × 26 боссов.
2026-05-29 09:33:46 +03:00
Maxim Dolgolyov f5bc39fbbf feat(geom9 phase6): skeleton + миграция учебника Геометрия 9
Phase 6 — архитектурный skeleton нового интерактивного учебника
'Геометрия — 9 класс' (Казаков В.В., 2019). 16 параграфов, 4 главы.

- Миграция 021_geometry_9_hub.sql: hub + 4 главы.
  Hub: rose-палитра, sort_order 8.
  ch1 amber (§1–§6), ch2 emerald (§7–§9),
  ch3 violet (§10–§12), ch4 cyan (§13–§16).
- geometry_9_hub.html: rose/pink-палитра, 4 карточки глав,
  свернутый финал курса с placeholder для Phase 11.
- geometry_9_ch1..ch4.html: полный skeleton по образцу
  algebra_9_ch4 — sidebars, search modal, achievement popup,
  XP/progress sync. Builder'ы — stub'ы 'В разработке (Phase 7)'.
- backend/scripts/gen_geom9.js: вспомогательный генератор ch2–ch4
  для воспроизводимости (одноразовый).

Sample dark-theme palettes на каждую главу + SIDEBARS/TIPS с
реальными краткими сводками формул учебника. Наполнение
параграфов — следующими сессиями (Phase 7+).
2026-05-29 09:26:00 +03:00
Maxim Dolgolyov 7fbbfad0fe fix(geom7 ch4): переделаны рисунки §21, §22, §25 + добавлены §24
- §21: треугольник перестроен — цветовая кодировка
  (красная сторона = длиннейшая, зелёная = короткая) +
  углы напротив окрашены в тон стороне. Исправлена легенда
  (теперь корректно: c>a>b ⇒ ∠C>∠A>∠B).
- §22: 'возможный' треугольник 4-5-6 с точными
  координатами вершины (решена система уравнений);
  'невозможный' 3-4-8 показан как 2 дуги от A и B радиусов
  3 и 4 (в масштабе 25px/ед.) с явным красным 'зазором'.
- §24: добавлены 4 SVG-панели — по одной на каждый признак
  с цветовой подсветкой выделенных элементов
  (катеты / катет+угол / гипот+угол / гипот+катет).
- §25: рисунок биссектрисы пересчитан по углу — стороны
  угла идут под углом ±25° от биссектрисы, K, F₁, F₂
  вычисляются проекцией. Добавлены подписи d=d и
  одинаковые штрихи KF₁ = KF₂.
2026-05-29 09:16:52 +03:00
Maxim Dolgolyov 1c93eb668e feat(alg9 phase5 final): итоговая шпаргалка + 7 боссов + ачивка «Магистр алгебры 9» 2026-05-29 09:10:01 +03:00
Maxim Dolgolyov e1d4a1e38a feat(geom7 ch4): Wave 8 — Глава 4 «Сумма углов треугольника» (§19-§26 + Финал)
- §19 Сумма углов = 180° (доказательство через параллельную)
- §20 Внешний угол = сумма двух не смежных
- §21 Сторона ↔ угол (больше → больше)
- §22 Неравенство треугольника |b-c|<a<b+c
- §23 Прямоугольные треугольники (катеты + гипотенуза)
- §24 4 признака равенства прямоугольных
- §25 Биссектриса как ГМТ + центр вписанной
- §26 Катет против 30° = c/2
- Финал: 5 боссов
- Cyan theme (#0891b2 → #22d3ee)
- Хелпер drawTriangleAngles + специальные SVG для каждого §
2026-05-29 09:08:44 +03:00
Maxim Dolgolyov 2b6ddef5c9 feat(alg9 ch4 final): Финал Главы 4 «Прогрессии» (5 боссов + ачивка) 2026-05-29 09:04:53 +03:00
Maxim Dolgolyov b66c688340 feat(alg9 ch4 wave3): §18 «Сумма геом.» + §19 «Бесконечно убывающая» 2026-05-29 09:01:45 +03:00
Maxim Dolgolyov 00bd7cada7 fix(geom7 ch2): расшифровка СУС/УСУ/ССС + правильная описанная окружность
- §9, §13: добавлены 'запоминалки' с расшифровкой СУС/УСУ/ССС
  (сторона-угол-сторона и т.д.) + латинский эквивалент
- Кнопки тренажёра, шпаргалка, водяные знаки, босс §13 — на ССС/СУС/УСУ
- §14: пересчитана описанная окружность. Вершины A,B,C теперь
  лежат точно на окружности с центром O и радиусом R=70.
  Серединные перпендикуляры выходят из середин сторон в O.
2026-05-29 08:56:33 +03:00
Maxim Dolgolyov 5ed21e4d2e feat(alg9 ch4 wave2): §16 «Сумма арифм.» + §17 «Геом. прогрессия» 2026-05-29 08:56:30 +03:00
Maxim Dolgolyov eb565081f6 feat(alg9 ch4 wave1): §14 «Числовая последовательность» + §15 «Арифм. прогрессия»
§14: 3 теор. карточки (определение, способы задания, монотонность) +
4 интерактива — конструктор последовательности (5 типов + точечная
диаграмма (n, a_n)), тренажёр вычисления a_n (6 задач), квикфайр
монотонности (3 кнопки), DnD-сортер «рекуррентно vs формула».

§15: 3 теор. карточки (определение и a_n = a_1 + (n-1)d, характеристическое
свойство, примеры) + 4 интерактива — конструктор арифм. прогрессии
(слайдеры a_1 и d + точки на прямой), двойной калькулятор a_n и d,
квикфайр «арифм. или нет» (6 заданий), тренажёр прогрессии (6 задач).

Добавлены CSS .wg/.tinp/.sliders/.score-display/.dnd-*/.drop-* и хелперы
makeCard, setupSorter, gcd, axes2D, plotFunc (по образцу ch1/ch2).
2026-05-29 08:51:52 +03:00
Maxim Dolgolyov 5c3ca4c1b6 feat(geom7 ch3): Wave 7 — Глава 3 «Параллельность прямых» (§15-§18 + Финал)
- §15 Признаки параллельности (3 признака через секущую, 8 углов)
- §16 Аксиома параллельных (5-й постулат + 2 следствия)
- §17 Свойства параллельных (обратные теоремы)
- §18 Углы со сторонами ∥ или ⊥
- Финал: 5 боссов
- Purple theme (#7c3aed → #a855f7)
- Helper drawParallelSecant() для рисунка 2 прямых + секущая + 8 углов с подсветкой пар
2026-05-29 08:50:52 +03:00
Maxim Dolgolyov d0cfff38c1 feat(alg9 ch3 final): Финал Главы 3 (5 боссов + ачивка) 2026-05-29 08:45:17 +03:00
Maxim Dolgolyov 8ecb8409eb feat(alg9 ch3 wave2): §12 «Окружность» + §13 «Метод интервалов»
§12 «Длина отрезка. Уравнение окружности»:
  - 3 теорет. карточки (формула расстояния, уравнение окружности, особые случаи).
  - IV1 «Окружность-конструктор»: 3 слайдера a/b/R, SVG-окружность + центр + радиус-линия + динамическое уравнение.
  - IV2 «Калькулятор расстояния»: 4 input + пошаговый разбор + мини-SVG с отрезком AB.
  - IV3 «Точка на окружности?»: 6 квикфайр-задач (да/нет).
  - IV4 «Тренажёр радиуса/центра/длины»: 6 задач на ввод числа.

§13 «Дробно-рациональные неравенства. Метод интервалов»:
  - 3 теорет. карточки (метод интервалов, правило знаков, пример).
  - IV1 «Числовая прямая знаков»: 5 неравенств, SVG-прямая с точками (закрашенными/выколотыми) и цветными знаками интервалов.
  - IV2 «Закрашена или выколота?»: DnD-сортер 6 карточек по 2 категориям.
  - IV3 «Сколько целых решений в [-5;5]»: 6 задач.
  - IV4 «Сумма концов интервалов»: 6 задач на ввод числа.

Добавлены setupSorter() + DnD CSS (.dnd-pool/.dnd-chip/.drop-box/.drop-items).
2026-05-29 08:42:33 +03:00
Maxim Dolgolyov 1b704b98e5 fix(geom7): убрана верхняя граница max-width — SVG растягиваются на всю ширину контейнера
Когда я добавил max-width:Wpx, SVG в одиночных карточках перестали
заполнять контейнер: в карточке шириной 800px SVG ограничивался
своим intrinsic размером (например 320px для §6), и казался мелким.

Правильная responsive-стратегия — width:100% БЕЗ верхней границы.
viewBox + preserveAspectRatio сами правильно отмасштабируют содержимое.
Теперь в одиночных карточках SVG занимает всю ширину, в flex-сетке —
свою долю.

Cache-bust ?v=6.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:38:45 +03:00
Maxim Dolgolyov cf88cb88dc fix(geom7): SVG снова растягивается на ширину контейнера (responsive)
Откатил неверный фикс: добавление width="W" height="H" атрибутов
заставило SVG рендериться в intrinsic-размере 180×160 px вместо
заполнения родительского контейнера. Из-за этого рисунки выглядели
маленькими.

Теперь svgBox использует правильную responsive-стратегию:
- viewBox="0 0 W H" — определяет систему координат
- preserveAspectRatio="xMidYMid meet" — сохраняет пропорции
- style="width:100%; max-width:Wpx; height:auto" — растягивает
  до ширины контейнера, но не больше intrinsic W; height auto
  держит правильное соотношение сторон через viewBox

Cache-bust ?v=5.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:36:13 +03:00
Maxim Dolgolyov 41f6561357 feat(alg9 ch3 wave1): §10 «Дробно-рац. уравнения» + §11 «Системы нелинейных» + axes2D 2026-05-29 08:35:44 +03:00
Maxim Dolgolyov c4b4312b9a fix(geom7): svgBox теперь с явными width/height + видимый fallback
Скорее всего корневая причина исчезающих SVG в §5 — в svgBox был
только style="max-width:100%" без явных атрибутов width/height.
В flex-контейнере с inline-block детьми SVG без явных размеров
может сжаться до 0×0 в некоторых браузерах (особенно при не-100%
ширине контейнера).

Фикс:
1. svgBox: добавлены width="W" и height="H" атрибуты на <svg>,
   плюс height:auto в стиле — теперь SVG имеет гарантированно
   ненулевой размер и сохраняет пропорции при сжатии.

2. svgNotation в §5: если G не загружен, теперь показывается
   красный fallback-блок "⚠ Библиотека SVG не загружена.
   Обновите страницу с Ctrl+Shift+R" — пользователь сразу видит,
   что проблема в кэше.

3. Bump cache-bust до ?v=4 для geom7_svg.js — форсит
   обязательное обновление файла в браузерах, которые
   проигнорировали ?v=3.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:33:57 +03:00
Maxim Dolgolyov cf5662087c fix(geom7): cache-bust geom7_svg.js (?v=3) + 3-й SVG в §5 (транспортир)
Скорее всего у пользователя был закэширован старый geom7_svg.js, из-за
чего часть API изменилась и SVG-блоки в §5 рендерились пустыми
(angleViz и notationVariant возвращали '' если G не было).

Что сделано:
1. Везде src="/js/geom7_svg.js?v=3" — форсит браузер скачать заново
   - geometry_7_ch1.html
   - geometry_7_ch2.html
2. notationVariant: function declaration внутри if(G) заменён на
   const arrow expression — для надёжности в strict mode + блоке
3. Добавлен 3-й SVG в §5 — карточка 5.2 «Измерение углов»:
   - полукруглый транспортир радиусом 90px с делениями каждые 10°
   - три цветных луча, отложенные на 40°, 90°, 140° от одной стороны
   - цветные подписи градусных мер в правильных местах

Теперь в §5 ТРИ SVG-рисунка:
- 5.1 «Что такое угол» — три обозначения одного угла
- 5.2 «Измерение углов» — транспортир с 3 примерами (НОВОЕ)
- 5.3 «Виды углов» — 4 типа углов с заливкой
- 5.4 «Биссектриса» — деление угла пополам

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:29:20 +03:00
Maxim Dolgolyov 34dd197390 feat(alg9 ch2 final): Финал Главы 2 «Функции» (5 боссов + ачивка) 2026-05-29 08:29:18 +03:00
Maxim Dolgolyov 70c5641452 feat(alg9 ch2 wave2): §8 «Чётные/нечётные» + §9 «Сдвиги графиков» 2026-05-29 08:26:11 +03:00
Maxim Dolgolyov bb40776fa8 feat(alg9 ch2 wave1): §6 «Функция, D(f), E(f)» + §7 «Свойства» + axes2D/plotFunc 2026-05-29 08:21:14 +03:00
Maxim Dolgolyov 31b40b0e99 fix(geom7): корневой баг G.angle (метки ∠1=∠2 садились в одну точку) + 2 новых SVG в §5
Корневая причина проблемы с наложенными метками углов в §6:

В G.angle формула центра метки была:
  midA = (a1 + a2) / 2 + (|delta| > π ? π : 0)

При a1≈-153° и a2≈+153° (как у ∠2 в §6) среднее даёт 0° —
ровно туда же, куда ставится метка ∠1 (a1≈+25°, a2≈-25°,
тоже среднее = 0°). Результат: обе метки в одной точке.

Правильная формула — идти от a1 на половину delta в направлении
sweep:
  midA = a1 + delta / 2

Это автоматически разносит метки противоположных секторов
в противоположные стороны. ∠1 уходит вправо, ∠2 — влево.

Также добавил 2 новых SVG в §5:
1. Карточка 5.1 «Что такое угол» — теперь содержит три варианта
   обозначения одного и того же угла: ∠BAC (полное), ∠A (короткое),
   α (греческая буква). Каждый — отдельный SVG с подсветкой угла
   жёлтым сектором, общая подпись внизу.

2. Карточка 5.4 «Биссектриса» — наглядный SVG: ∠BAC = 70°,
   биссектриса AD (пунктирная красная) делит его на две равные
   половинки по 35°. Полупрозрачная заливка зелёным/фиолетовым
   для каждой половины, дуги с одинаковыми штрихами как маркер
   равных углов.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:18:40 +03:00
Maxim Dolgolyov a61b1e3c20 feat(alg9 ch1 wave3 + final): §5 «Преобразование» + Финал главы 1 (5 боссов + ачивка) 2026-05-29 08:14:15 +03:00
Maxim Dolgolyov 724c8a5817 fix(geom7 ch1): §6 — метки углов не накладываются на O; §5 — заливка секторов
§6 (вертикальные углы):
- SVG расширен 260×180 → 320×230
- Добавлены 4 полупрозрачных сектора как фон (красный для ∠1/∠2,
  оранжевый для ∠3/∠4) — сразу видно, какие углы вертикальны
- Метки ∠1, ∠2, ∠3, ∠4 теперь явные (со знаком "∠")
- Подпись O вынесена в (-26,-22) от вершины + пунктирная линия-указатель
  к самой точке — чтобы метка не перекрывала ∠1
- Чётко разнесены: ∠1, ∠2 (red, r=20) — на горизонтали;
  ∠3, ∠4 (orange, r=32) — на вертикали

§5 (виды углов):
- SVG расширен 140×120 → 180×150 (больше деталей)
- Каждый угол теперь имеет полупрозрачную заливку-сектор
  (цветом, соответствующим типу угла)
- Подпись типа угла увеличена до 12px, чётко читается
- Развёрнутый угол: полукруг закрашен, подпись 180° явная

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:11:01 +03:00
Maxim Dolgolyov cccbb64159 feat(alg9 ch1 wave2): §3 «Сложение и вычитание» + §4 «Умножение и деление» 2026-05-29 08:08:46 +03:00
Maxim Dolgolyov 100834e9b1 feat(geom7 ch2): Wave 6 — Глава 2 «Признаки равенства треугольников» (§8-§14 + Финал)
7 параграфов по учебнику Казакова 2022 (стр. 56-87):
- §8 Треугольники: виды по сторонам/углам, периметр, равные Δ
- §9 1-й (SAS) и 2-й (ASA) признаки — с SVG-иллюстрациями
- §10 Высота, медиана, биссектриса + замечательные точки
   (центроид/инцентр/ортоцентр); три SVG бок-о-бок
- §11 Равнобедренный Δ: свойство углов при основании,
   биссектриса = медиана = высота к основанию
- §12 Признаки равнобедр.: обратная к свойству, доп. признаки
- §13 3-й признак (SSS) — три цветных стороны с тиками
- §14 Серединный перпендикуляр + теорема о ГМТ +
   точка пересечения 3 серед. перпендикуляров = центр
   описанной окружности (с SVG треугольника+окружности)

Интерактивы (всего 14): викторины с цветными кнопками
(классификация Δ, SAS/ASA/SSS, высота/медиана/биссектриса,
равнобедр-ли, верно/нет), тренажёры (периметр, углы,
ГМТ-задачи).

Финал: 6 боссов × 5 этапов = 30 этапов.
Темы: §8, §9, §10-11, §12, §13, §14.

Реюз библиотеки geom7_svg.js — каждый § имеет SVG-иллюстрации
треугольников через G.polygon, G.angle, G.rightAngleMark и др.

emerald-тема (#059669). 1578 строк, JS 82 КБ, HTTP 119 КБ.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:06:40 +03:00
Maxim Dolgolyov 140f711e3c feat(alg9 ch1 wave1): §1 «Рациональная дробь» + §2 «Основное свойство, сокращение» 2026-05-29 08:03:28 +03:00
Maxim Dolgolyov a07e631e8e feat(alg9 phase0): skeleton + миграция учебника Алгебра 9
- 020_algebra_9_hub.sql: hub (slug 'algebra-9', indigo, 19 параграфов) + 4 главы
- algebra_9_hub.html: страница каталога с индиго-палитрой
- algebra_9_ch1..ch4.html: skeleton-страницы 4 глав
  * Глава 1 (amber): §1-§5 Рациональные выражения
  * Глава 2 (emerald): §6-§9 Функции
  * Глава 3 (violet): §10-§13 Дробно-рациональные уравнения и неравенства
  * Глава 4 (cyan): §14-§19 Прогрессии
- Все skeleton-файлы рабочие: переключение параграфов, theme toggle,
  search modal, sidebar, progress, XP. Stub-плейсхолдеры в buildPx().
- Наполнение параграфов запланировано на Phase 1+.
2026-05-29 07:56:14 +03:00
Maxim Dolgolyov 2ffe376b2d feat(geom7 ch1): Wave 5 — Глава 1 «Начальные понятия геометрии» (§1-§7 + Финал)
Главное приобретение волны: библиотека geom7_svg.js — задел на ВСЮ
геометрию 7. 14 функций-хелперов:
- point, segment, ray, line — базовые примитивы с подписями/тиками
- circle с опц. центром, радиусом, подписью R
- arc, angle — дуги углов через atan2; кратчайший путь
- rightAngleMark — L-форма ВНУТРЬ угла (полилиния по двум направлениям)
- protractor — полукруглый транспортир с делениями каждые 10°
- polyline, polygon — ломаная/замкнутый полигон
- parallelMark — стрелочки на отрезках
- svgBox — обёртка с сеткой и фоном
- distance, midPoint, vec, unit, perp, rotate — математика
- renderMath — KaTeX с правильными делимитерами

Глава 1 — 7 § + Финал по учебнику Казакова 2022 (стр. 8-50):
- §1 Повторение 5-6 классов (длина, единицы, точка между двумя)
- §2 Предмет геометрии (аксиомы vs теоремы, планиметрия/стереометрия)
- §3 Прямая, луч, отрезок, ломаная (SVG-иллюстрации каждого)
- §4 Окружность и круг (свойство точки относительно окружности)
- §5 Угол и виды углов (острый/прямой/тупой/развёрнутый — SVG)
   + биссектриса
- §6 Смежные и вертикальные углы (с SVG: дополнительные лучи + пересечение)
- §7 Перпендикулярные прямые (теоремы единственности)

Интерактивы: 2-3 на §, всего 17:
- викторины с цветными кнопками (тип угла, аксиома/теорема, верно/нет)
- тренажёры (длины, углы, биссектрисы, перпендикуляры)

Финал: 5 боссов × 5 этапов = 25 этапов. Темы: §1-2, §3-4, §5, §6, §7.

amber-тема, KaTeX, sidebar-шпаргалка с формулами,
прогресс/XP, /api/textbooks/geometry-7-ch1/progress.

JS парсится OK (75 КБ), HTTP 200, 113 КБ.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 07:53:10 +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 ff78851310 fix(alg7 fx): KaTeX-делимитеры $...$ в визуализаторах §12-§13
В alg7-fx.js renderMathInElement() вызывался без опций — KaTeX
auto-render по умолчанию узнаёт только \(...\) и \[...\], а
не $...$. Поэтому формулы в виз. квадрата суммы и разности
квадратов отображались как обычный текст (см. скриншот пользователя).

Фикс: общий хелпер ALG7.renderMath(root), который вызывает
renderMathInElement с теми же делимитерами, что прописаны в
страницах глав ($$, $, \[\], \(\)).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:27:54 +03:00
Maxim Dolgolyov 790c2e9445 feat(alg7 ux): Wave 5 — UX-буст для всех 4 глав (комбо + анимации + 2 viz)
Сделано:
1. /css/alg7-fx.css — универсальные эффекты:
   - shake (тряска) при неправильном ответе
   - pulse (зелёное свечение) при правильном
   - combo-badge (огненный шильдик ×3, ×5, ×10) при сериях
   - streak-индикатор в углу с пульсацией
   - sparkles (искры) при успехе
   - стили для двух новых визуализаторов

2. /js/alg7-fx.js — система комбо + визуализаторы:
   - MutationObserver автоматически отслеживает .feedback по всем
     четырём главам без правки feedback() в каждой
   - комбо-милестоны: 3 → +5 XP, 5 → +15, 10 → +50, 15 → +75, 20 → +100
   - бонус автоматически уходит через window.addXp(), который
     уже есть на window благодаря top-level function declarations
   - ALG7.buildQuadSumViz() — большой квадрат (a+b)² с 4 цветными
     областями (a², ab, ab, b²); слайдеры a, b; режим (a+b)/(a-b);
     клик по области → подсветка в формуле; живые числа
   - ALG7.buildDiffSquaresViz() — 3-этапная анимация a²-b²=(a-b)(a+b):
     1) большой квадрат с вырезанной угловой b²
     2) пунктирная линия разреза в L-форме
     3) перестроенный прямоугольник со сторонами (a-b)×(a+b)

3. Подключено во всех 4 главах одной строкой <link>/<script>.

4. Ch2 §12: добавлен 4-й интерактив — геометрическая визуализация
   квадрата суммы/разности. Школьник видит ПОЧЕМУ (a+b)²=a²+2ab+b².

5. Ch2 §13: добавлен 3-й интерактив — анимированное геометрическое
   доказательство разности квадратов. Жмёшь «Шаг» → L-форма
   расклеивается и собирается в прямоугольник.

Эффекты работают везде где есть .feedback — все боссы, все
тренажёры, все викторины. Не требует правки логики каждой главы.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:25:02 +03:00
Maxim Dolgolyov e1c05da294 fix(geom8 ch1): пропущен закрывающий $ в SIDEBARS p1 'Число диагоналей'
В SIDEBARS p1 (line 516, шпаргалка боковой панели) у формулы числа
диагоналей \$\dfrac{n(n-3)}{2} не было закрывающего \$.
KaTeX видел незакрытый блок $...$ — отображал как сырой текст:
'Число диагоналей — $\dfrac{n(n-3)}{2}'.

Исправлено: добавлен закрывающий $.

Полный аудит KaTeX по всем 4 главам Геометрии 8 — это была
единственная найденная ошибка. Остальные $...$ блоки чисты.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:16:21 +03:00
Maxim Dolgolyov 83f807fbad feat(alg7 ch4): Wave 4 — Глава 4 «Системы линейных уравнений» (§21-§25 + Финал)
ФИНАЛЬНАЯ глава Алгебры 7! Последние 5 параграфов:
- §21. Линейное уравнение с двумя переменными ax+by=c
- §22. График — прямая (особые случаи a=0, b=0)
- §23. Система: одно решение / нет / бесконечно
- §24. Два способа: подстановка и сложение
- §25. Текстовые задачи через систему (растворы, монеты, движение)

Интерактивы:
- §21: пара-решение (викторина); выразить y через x; найти переменную
- §22: 3-слайдер a/b/c с живым SVG-графиком (включая особые случаи
  параллельных осям прямых); принадлежность точки; пересечения с осями
- §23: пара-решение системы; число решений (3 категории) — SVG-иллюстрация
  пересекающихся/параллельных/совпадающих прямых
- §24: тренажёр подстановки (5 задач); тренажёр сложения (5 задач);
  выбор удобного способа (5 пар) с объяснением «почему»
- §25: тренажёр текстовых задач (6 задач: груши/яблоки, копилка,
  монеты, кролики/цыплята); выбор корректной системы по условию

Финал: 5 боссов × 5 этапов = 25 этапов. Финальный босс — текстовые
задачи на системы (растворы, кофе/чай, кролики/цыплята).
При завершении ВСЕГО финала засчитывается достижение
«Алгебра 7 — пройдена полностью!».

coordSVG расширен поддержкой формы ax+by=c (включая вертикальные
x=c/a). cyan-тема (#0891b2), KaTeX, 7 терминов глоссария.

Алгебра 7: 4 главы × 100% контента = курс полностью реализован.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:14:03 +03:00
Maxim Dolgolyov 8c8c180eea fix(geom8 ch1): §4.1 tick-марки на правильных серединах + §4.2 дуги B/D на внутренней стороне
§4.1 'Параллелограмм + диагональ':
- Tick-марки для пары AB/CD рисовались на (116,103)-(130,97)
  и (216,103)-(230,97). Но midpoint AB = (77,100), а не (123,100)
  как указано в комментарии — агент ошибся в арифметике.
- Пересчитаны точно через перпендикуляр к каждому сегменту:
  AB tick at midpoint (77,100); CD tick at midpoint (223,100).
  Двойные tick'и для пары AB=CD=b, одиночные для BC=AD=a.
- Метки сторон 'a' и 'b' перепутаны: AB была помечена 'a' вместо 'b',
  AD помечена 'b' вместо 'a'. Исправлено по правилу:
  a = горизонтальная пара (BC, AD), b = наклонная пара (AB, CD).

§4.2 'Основные свойства':
- Дуги углов B и D использовали sweep=1 (большая 245° внешняя дуга
  через ВНЕШНЮЮ область параллелограмма). Должно быть sweep=0
  (короткая 115° внутренняя дуга через ВНУТРЕННОСТЬ).
- Подписи β сдвинуты ближе к дугам внутри полигона.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:03:35 +03:00
Maxim Dolgolyov 84d4ac5bd6 feat(alg7 ch3): Wave 3 — Глава 3 «Уравнения, неравенства, функция» (§15-§20 + Финал)
6 параграфов по учебнику Арефьевой/Пирютко 2022:
- §15. Линейные уравнения ax=b — три случая по корням
- §16. Текстовые задачи: возраст, движение, покупки (алгоритм составления)
- §17. Числовые неравенства — три свойства + сложение/умножение
- §18. Линейные неравенства — алгоритм + особые случаи (0·x>b, 0·x<b)
- §19. Функция — аргумент, f(x), область определения, нули, график
- §20. Линейная функция y=kx+b — наклон, сдвиг, расположение прямых

Новый helper: coordSVG() — координатная плоскость с сеткой, осями,
прямыми и точками. Используется в §20 интерактивах (слайдер k/b)
и для иллюстрации y=2x-3 в карточке теории.

Интерактивы:
- §15: 3 интерактива (сколько корней — викторина; реши; уравнения со скобками)
- §16: 1 интерактив (тренажёр текстовых задач — 6 задач)
- §17: 2 интерактива (изменится ли знак; оценка выражений)
- §18: 3 интерактива (реши простое; со скобками; особые случаи 0·x)
- §19: 3 интерактива (функция или нет; найди f(x0); найди нуль)
- §20: 4 интерактива (СЛАЙДЕР k и b с живым SVG-графиком; угол и нуль;
  параллельны/пересекаются/совпадают; принадлежит ли точка)

Финал: 5 боссов × 5 этапов = 25 этапов. Темы: §15-16, §17, §18, §19, §20.

violet-тема (#7c3aed), KaTeX, глоссарий (15 терминов), Ctrl+K поиск,
sidebar-шпаргалка с формулами, прогресс/XP, синхронизация с
/api/textbooks/algebra-7-ch3/progress.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 22:22:13 +03:00