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>
This commit is contained in:
Maxim Dolgolyov
2026-06-03 09:09:42 +03:00
parent 21c18ce477
commit c020a2c948
8 changed files with 1052 additions and 0 deletions
+191
View File
@@ -0,0 +1,191 @@
# PLAN — Интерактивный учебник «Математика. 5 класс»
> Составлен 2026-06-03 (Opus). Источник: **Герасимов В. Д., Пирютко О. Н., Лобанов А. П.
> «Математика. 5 класс»**, в 2 частях, Минск: Адукацыя і выхаванне, 2020 (2-е изд.).
> PDF: `G:\Dev\Тесты\Методички\Разное\Книги\matematika_5kl_ch1_gerasimov_rus_2020 (1).pdf` (181 стр.)
> и `…_ch2_… .pdf` (197 стр.). Контент пишем авторский (свой), не копируем книгу.
Цель: красивый, **интерактивный, визуальный** учебник того же класса качества, что
«Математика 6», — с тренажёрами, canvas/SVG-анимациями, пошаговыми разборами, финалами-боссами
и курсовым финалом. Реализация — Opus делает фундамент + эталонную Главу 1, Главы 2–3 тиражирует
Sonnet по образцу.
---
## 1. Структура книги (оглавление, 3 главы)
Книга Герасимова **переплетает геометрию внутрь числовых глав** (это её замысел) — не выделяем
геометрию отдельно, а сохраняем авторский порядок.
### Часть 1
**Глава 1. Натуральные числа** (§1–17)
1. Как решать задачу
2. Натуральные числа и число нуль. Чтение и запись
3. Сравнение натуральных чисел
4. Точка, прямая, луч, отрезок, плоскость
5. Измерение отрезков. Длина отрезка
6. Изображение натуральных чисел на координатном луче
7. Округление натуральных чисел
8. Сложение и вычитание натуральных чисел
9. Умножение и деление натуральных чисел
10. Степень числа с натуральным показателем
11. Деление с остатком
12. Делители, кратные. НОД и НОК
13. Признаки делимости
14. Простые и составные числа. Разложение на множители
15. *Математика вокруг нас* (прикладной)
16. *Задачи на движение, взвешивание, переливание* (занимательный/прикладной)
17. *Исторические сведения о числах* (история)
**Глава 2. Выражения. Уравнения** (§19)
1. Числовые выражения
2. Выражения с переменными
3. Уравнение
4. Формулы
5. Решение задач с помощью уравнений
6. Угол. Измерение и построение углов
7. *Математика вокруг нас* (прикладной)
8. *Занимательные задачи*
9. *Исторические сведения*
### Часть 2
**Глава 3. Обыкновенные дроби** (§1–18)
1. Дробные числа. Обыкновенные дроби
2. Деление и дроби. Основное свойство дроби
3. Правильные и неправильные дроби. Смешанные числа
4. Сравнение дробных чисел
5. Сложение и вычитание обыкновенных дробей
6. Сложение и вычитание смешанных чисел
7. Умножение дробных чисел
8. Деление дробных чисел
9. Задачи на все действия с дробными числами
10. Задачи на применение дробей
11. Параллельные и перпендикулярные прямые *(геом.)*
12. Ломаная. Многоугольник. Периметр *(геом.)*
13. Площадь. Единицы измерения площади *(геом.)*
14. Площадь прямоугольного треугольника и многоугольников *(геом.)*
15. Среднее арифметическое
16. Линейные и столбчатые диаграммы
17. Прямоугольный параллелепипед. Куб *(геом.)*
18. Объём. Единицы измерения объёма. Объём параллелепипеда *(геом.)*
> Бэк-материя ч.2 (Задачи с геом. фигурами, Повторение и обобщение, Задания для тренировки,
> Задачи для любознательных, Логические задачи, Наглядная геометрия) — **банки упражнений**, не §.
> Из них черпаем задачи для тренажёров и финала, отдельными § не делаем.
Каждая глава в книге завершается **тестом** («Ответы к тесту: 1в); 2г)…») → в нашем учебнике это
**Финал главы** (бой с боссами).
---
## 2. Архитектура — ПОЛНОЕ переиспользование движка «Математики 6»
Движок `math6_engine.js` уже **generic**: читает `window.M6` со своими `slug / lsPrefix / xpKey`,
строит para-selector, навигацию, прогресс/XP/достижения, сайдбар, поиск, глоссарий, тему, финалы.
**Ничего форкать не нужно.** Страницы 5 класса подключают те же ассеты:
```
/css/math6.css (общий фреймворк)
/js/api.js /js/xp.js
/js/math6_svg.js (window.Math6 — статичные SVG-фигуры)
/js/math6_anim.js (window.Math6Anim — canvas/SVG-демо) ← ПЕРЕД engine
/js/math6_engine.js (window.M6engine — плумбинг)
```
> Эти файлы — общая **визуальная библиотека математики**, а не «6 класс». Новые компоненты для
> 5 класса дописываем в `math6_svg.js` / `math6_anim.js` (выигрывают обе параллели). При желании
> позже переименуем в `math_svg.js` — сейчас не трогаем имена, чтобы не плодить churn.
**Страница главы** = `head` (KaTeX CDN + шрифты + math6.css + 5 скриптов) → inline `:root`-палитра
→ chrome (`hdr / hero / psel / #sections / sidebar / search / ach-popup`) → inline `<script>`:
объявить `data + builders`, затем `Object.assign(window.M6, {...})`.
### КРИТИЧНЫЕ правила (грабли с 6 класса — не наступать снова)
- **`init()` движка вызывается ПОСЛЕ всех `window.*`-экспортов** — у defer-скрипта `readyState`
уже `interactive`, и `else init()` срабатывает синхронно. Если builder зовёт `makeCard` до экспорта
`ReferenceError` → ВСЕ §1 показывают заглушку. (В нашем случае init внутри самого движка уже
корректен — мы лишь не нарушаем порядок: `Object.assign(window.M6,…)` до подключения движка не
нужен, движок читает `window.M6` лениво в `init`.)
- **Русская запятая в KaTeX = `2{,}5`** (иначе сбитый кернинг). В JS-билдерах — хелпер `_kf(x)`.
- **`applied:true`** у прикладных/исторических § (не входят в боссов финала), **`final:true`** у финала.
- **⛔ эмодзи** — только inline SVG `.ic`. **⛔ Grep-tool** — ast-index/vex. Edit-флака на кириллице —
верифицировать зелёным тестом.
---
## 3. Маппинг глав → LearnSpace
| slug | Глава | § (paras) | para_count | Цвет |
|------|-------|-----------|-----------|------|
| `math-5` | **Хаб** | — | 47 (Σ) | indigo |
| `math-5-ch1` | Натуральные числа | p1–p14 + 3 прикладных + final | 18 | indigo `#4f46e5` |
| `math-5-ch2` | Выражения. Уравнения | p1–p6 + 3 прикладных + final | 10 | teal `#0d9488` |
| `math-5-ch3` | Обыкновенные дроби | p1p18 + final | 19 | rose `#e11d48` |
`para_count = paras.length` (включая прикладные и финал — как в 6 классе). Хаб TOTAL = 18+10+19 = **47**.
Хаб закрыт по умолчанию (allowlist) → доступ выдаём в самом конце через `/api/access` ([[project_content_access]]).
Миграция: **`050_math5_hub.sql`** (следующий свободный номер; 049 = math-6). Хаб `sort_order` = 5
(перед math-6=6), дети 1/2/3.
---
## 4. Фазы реализации (волны)
### Phase 0 — Фундамент (Opus) ✦ делаем первым
- [ ] `backend/src/db/migrations/050_math5_hub.sql` (+ `npm run migrate`)
- [ ] `frontend/textbooks/math_5_hub.html` (клон math_6_hub: 3 карточки + курсовой финал из 3 боссов
+ ach-strip «Математик 5 класса», водяной знак «5», палитра indigo/teal/rose)
- [ ] 3 каркаса `math_5_ch1.html` / `ch2` / `ch3` — head + chrome + `window.M6` ТОЛЬКО с `paras`
(без билдеров → движок рисует заглушки; страницы живые, навигация работает)
- [ ] Тест `backend/tests/math5-page.test.js` (jsdom-over-HTML, инлайнит svg/anim/engine): страницы
грузятся, секции/psel генерируются, нет рантайм-ошибок, init после экспортов
- [ ] Commit + push
### Phase 1 — Глава 1 «Натуральные числа» (эталон, Opus)
Полные билдеры §1–17 + финал. 2+ интерактива на §, тренажёры со счётом+XP, DnD, пошаговые разборы,
визуализации (см. §5). Это **образец**, по которому Sonnet делает остальное.
### Phase 2 — Глава 2 «Выражения. Уравнения» (Sonnet-агент по образцу Главы 1)
### Phase 3 — Глава 3 «Обыкновенные дроби» (Sonnet-агент; самая визуальная — дроби + геометрия)
### Phase 4 — Обогащение + полировка
По образцу 6 класса: в каждый § «Где это в жизни» (хук) / «Разбор по шагам» (→ авто-stepPlayer) /
«А знаешь ли ты?» (факт); добить визуализации; прогон тестов.
### Phase 5 — Курсовой финал на хабе + звание «Математик 5 класса» (+150 XP)
3 боссовых испытания (по одному из главы): натуральные числа · уравнение/угол · дроби.
### Phase 6 — Доступ ученикам/классам (`/api/access`) — действие админа.
---
## 5. Визуальная карта — см. `PLAN_MATH_5_VISUAL.md`
Кратко: **что уже есть** в `Math6`/`Math6Anim` (numberLine, plane, pie, venn, areaModel,
numberLineWalk/Jumps, coordGame, balanceScale, triangleDrag, stepPlayer…) переиспользуем; **новое**
для 5 класса — `protractor` (угломер, §2.6), семейство дробей (`fractionBar`, `equivFractions`,
`fractionAdd`, `fractionMulArea`, `improperMixed`), `sieve` (решето Эратосфена, §1.14), `factorTree`,
`divisibilityChecker` (§1.13), `divisorsLadder` (НОД/НОК, §1.12), `powerBlocks` (степень, §1.10),
`rulerMeasure` (§1.5), `linePrimitives` (точка/прямая/луч, §1.4), `polygonPerimeter` (§1.12 ч.2 /3.12),
`areaGrid` + `triangleArea` (§3.1314), `averageBars` (§3.15), `barChart`/`lineChart` (§3.16),
`box3d` + `volumeCubes` (§3.1718, **2D-изометрия**, не интерактивный 3D — это допустимо и нужно).
---
## 6. Геймификация / тесты / гочи
- XP/уровни (общий `math5_xp`), прогресс `math5_chN_*`, финал главы = боссы (HP-бар), 4/5 → +40 XP
и ачивка «Глава N пройдена». Курсовой финал → звание + 150 XP (`localStorage math5_course_done`).
- Тесты: `backend/tests/math5-page.test.js` по образцу math6 (jsdom, инлайн ассетов, HEADLESS-guard
canvas). Прогон: `node -e "require('./tests/math5-page.test.js')"` из `backend/`.
- pre-commit hook гоняет полный backend-прогон при staged backend-файлах (baseline 3 Auth-фейла).
- Коммитить поимённо (не `git add -A`), push сразу. fetch перед работой ([[project_concurrent_sessions_branch]]).
---
## 7. Замечание про §3.17–18 (параллелепипед, куб, объём)
В 6 классе пользователь **исключил интерактивные 3D-тела**. Здесь иначе: параллелепипед/куб/объём —
**обязательная программа** 5 класса, и рисуются стандартной **2D-изометрией** (статичный чертёж с
подписанными рёбрами + анимация заполнения единичными кубиками). Это не «3D-движок», а плоский
SVG-рисунок — включаем.