docs(math6): план реализации учебника «Математика 6» (6 глав, 38 §)

Программа Герасимова/Пирютко 2022; архитектура — inline-паттерн
Алгебры 7 (не движок химии); миграция 049, hub + 6 глав, math6_svg.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-02 14:24:48 +03:00
parent 751d88048c
commit c900a0332e
+308
View File
@@ -0,0 +1,308 @@
# PLAN — Интерактивный учебник «Математика 6»
> **Источник:** В. Д. Герасимов, О. Н. Пирютко. «Математика. 6 класс». — Минск: Адукацыя і выхаванне, 2022 (2-е изд., исправленное и дополненное). Допущено Министерством образования Республики Беларусь.
> PDF: `G:\Dev\Тесты\Методички\тест_6 класс\Книги\matematika_6kl_gerasimov_rus_2022.pdf` (317 стр.).
> **Исполнитель:** Sonnet, по одной «волне» за раз (паттерн глав, как в Химии 7 / Алгебре 7).
> **Контент авторский (наш)** — учебник используется только как ориентир программы и дидактики. Поле `author` оставляем пустым (политика проекта).
---
## 0. Чем «Математика 6» отличается от существующих учебников
Это **комбинированный** курс (арифметика + начала алгебры + наглядная геометрия) — первый математический учебник проекта для 6 класса. В отличие от химии/физики (симуляции) и узких алгебры/геометрии 7–11, здесь под одной крышей: десятичные дроби, проценты/пропорции, множества, отрицательные числа, координатная плоскость и наглядная геометрия.
**Архитектурное решение — переиспользуем паттерн Алгебры 7 (НЕ движок химии).**
Доказательная база:
- [frontend/textbooks/algebra_7_ch1.html](frontend/textbooks/algebra_7_ch1.html) — **самодостаточная страница-глава** (~1640 строк): весь движок (STATE/прогресс/XP/ачивки, PARAS/BUILDERS, SIDEBARS/TIPS, глоссарий, поиск, тема, конфетти, DnD-сортировщик) — **inline в `<script>`**, контент глав — функции `buildPN()`, возвращающие HTML-строку.
- Это идеально для математики: каждый § требует **своего** интерактива (числовая прямая, разрядная таблица, графопостроитель, круги Эйлера), а не унифицированного пула MCQ, как `chem8_engine.js`.
- Формулы — **KaTeX** (CDN, `$…$` / `$$…$$`), уже подключён в шаблоне algebra_7.
- SVG-геометрия — `window.GEOM7` из [frontend/js/geom7_svg.js](frontend/js/geom7_svg.js) и координатные сетки из `alg10_svg.js` (изучить в Phase 0, переиспользовать/обернуть).
**Что копируем дословно** из [algebra_7_ch1.html](frontend/textbooks/algebra_7_ch1.html) (ссылки на блоки — это «золотой» скелет главы):
| Блок | Строки-ориентир | Назначение |
|---|---|---|
| `STATE` + `calcLevel` + `loadProgress/saveProgress/bumpProgress` | 337–392 | прогресс по §, уровни |
| `_TB_SLUG`, `_flushProgress/_queueProgress/markParaRead/loadServerReadState` | 394–420 | синк прогресса на `/api/textbooks/:slug/progress` |
| `addXp` / `refreshProgressUI` / `achievement` | 422455 | XP, ачивки, попапы |
| `PARAS` / `buildParaSelector` / `BUILDERS` / `ensureBuilt` / `goTo` | 460–495 | навигация по §, ленивая сборка |
| `SIDEBARS` / `TIPS` / `buildSidebar` | 498–558 | шпаргалка + подсказка в сайдбаре |
| `initTheme`, `renderMath`, `feedback`, `fmt`, `makeCard`, `secNav`, `confetti` | 560614 | тема, KaTeX, карточки, навигация |
| `setupSorter` (drag-and-drop) | 617629 | классификаторы (виды треугольников, дробь/целое и т.п.) |
| `GLOSSARY` + `wrapGlossary` + `initGlossaryTip` | 632–663 | подсветка терминов + тултипы |
| `SEARCH_INDEX` | 666+ | поиск по §/понятиям/формулам |
Sonnet берёт `algebra_7_ch1.html` как образец, меняет палитру, `_TB_SLUG`, `PARAS`/`SIDEBARS`/`TIPS`/`ACH_LABELS`/`GLOSSARY` и пишет `buildPN()` под программу 6 класса.
---
## 1. Полная программа (оглавление, стр. 309–311 PDF)
**6 глав, 47 параграфов** (38 содержательных + 6 «Тест для самопроверки» + 5 «Математика вокруг нас» — последние два станут *Финалом* и *прикладным §*).
### Глава 1. ДЕСЯТИЧНЫЕ ДРОБИ (стр. 5)
1. Десятичная запись дробей. Разряды десятичных дробей
2. Сравнение десятичных дробей. Округление десятичных дробей
3. Изображение десятичных дробей на координатном луче
4. Сложение и вычитание десятичных дробей
5. Умножение и деление десятичной дроби на разрядную единицу. Умножение на 10, 100, 1000 …
6. Умножение десятичных дробей
7. Деление десятичной дроби на натуральное число
8. Деление на десятичную дробь
9. Конечные и бесконечные десятичные дроби
10. Преобразования числовых выражений с обыкновенными и десятичными дробями
11. Тест для самопроверки → **Финал главы**
12. Математика вокруг нас → **прикладной §**
### Глава 2. ПРОЦЕНТЫ И ПРОПОРЦИИ (стр. 86)
1. Проценты
2. Основные задачи на проценты
3. Пропорция и её свойства
4. Прямая и обратная пропорциональные зависимости
5. Решение задач с помощью пропорций
6. Масштаб
7. Круговые диаграммы
8. Тест для самопроверки → **Финал**
9. Математика вокруг нас → **прикладной §**
### Глава 3. МНОЖЕСТВО (стр. 151)
1. Множество. Элементы множества. Пустое множество
2. Способы задания множеств
3. Операции над множествами (пересечение, объединение)
4. Круги Эйлера. Решение задач с помощью кругов Эйлера
5. Тест для самопроверки → **Финал**
### Глава 4. РАЦИОНАЛЬНЫЕ ЧИСЛА (стр. 178)
1. Положительные и отрицательные числа. Координатная прямая
2. Модуль числа. Противоположные числа. Множество целых чисел. Множество рациональных чисел
3. Сравнение рациональных чисел
4. Сложение рациональных чисел
5. Вычитание рациональных чисел
6. Законы сложения рациональных чисел
7. Умножение рациональных чисел
8. Деление рациональных чисел
9. Задачи на все действия с рациональными числами
10. Тест для самопроверки → **Финал**
11. Математика вокруг нас → **прикладной §**
### Глава 5. КООРДИНАТНАЯ ПЛОСКОСТЬ (стр. 247)
1. Прямоугольная (декартова) система координат на плоскости
2. График. Графики реальных процессов
3. График прямой пропорциональной зависимости. График обратной пропорциональной зависимости
4. Тест для самопроверки → **Финал**
5. Математика вокруг нас → **прикладной §**
### Глава 6. НАГЛЯДНАЯ ГЕОМЕТРИЯ (стр. 274)
1. Наглядные представления тел в пространстве, примеры развёрток тел
2. Окружность. Круг. Формулы длины окружности и площади круга
3. Виды треугольников
4. Симметрия относительно точки
5. Фигуры, симметричные относительно прямой → + **Финал главы**
---
## 2. Структура файлов и регистрация в каталоге
Регистрация учебника — миграция + HTML-файлы (маршруты `/api/textbooks`, `/textbook/:slug` и каталог `textbooks.html`**общие, менять не нужно**). Таблица `textbooks` (см. [004_textbooks.sql](backend/src/db/migrations/004_textbooks.sql)) + `parent_slug` (хаб = NULL, главы = slug хаба).
### Создаём (Phase 0):
| Файл | Назначение |
|---|---|
| `backend/src/db/migrations/049_math6_hub.sql` | хаб `math-6` + 6 детей `math-6-ch1..ch6` |
| `frontend/textbooks/math_6_hub.html` | хаб: 6 карточек глав, общий прогресс, курсовой финал |
| `frontend/textbooks/math_6_ch1.html … ch6.html` | 6 страниц-глав на скелете algebra_7 |
| `frontend/css/math6.css` | тема учебника (по образцу `alg7-fx.css` + inline-блок) |
| `frontend/js/math6_svg.js` | `window.Math6` — координатная плоскость, графики, окружность/круг, треугольники, 3D-тела и развёртки, симметрия (обёртка над `GEOM7`/`alg10_svg`) |
| `frontend/js/math6-fx.js` *(опц.)* | мелкие эффекты/комбо, если понадобятся сверх скелета |
| `backend/tests/math6-page.test.js` | тесты рендера хаба и 6 глав |
### Образец миграции `049_math6_hub.sql` (по [046_chemistry7_hub.sql](backend/src/db/migrations/046_chemistry7_hub.sql)):
```sql
-- Math 6 hub migration. Hub math-6 + 6 chapters. Контент авторский. author=''.
INSERT OR IGNORE INTO textbooks
(slug, subject, grade, title, author, description, html_path, para_count, color, sort_order, is_active, parent_slug)
VALUES
('math-6','math',6,'Математика — 6 класс','',
'Полный курс: десятичные дроби, проценты и пропорции, множества, рациональные (отрицательные) числа, координатная плоскость, наглядная геометрия. 6 глав, 38 параграфов.',
'math_6_hub.html', 48, 'indigo', 6, 1, NULL);
INSERT OR IGNORE INTO textbooks
(slug, subject, grade, title, author, description, html_path, para_count, color, sort_order, is_active, parent_slug)
VALUES
('math-6-ch1','math',6,'Математика 6 · Десятичные дроби','','§§1–12: запись и разряды, сравнение и округление, координатный луч, действия, бесконечные дроби, преобразования.','math_6_ch1.html',12,'indigo',1,1,'math-6'),
('math-6-ch2','math',6,'Математика 6 · Проценты и пропорции','','§§1–9: проценты, 3 типа задач, пропорция и её свойство, прямая/обратная зависимость, масштаб, круговые диаграммы.','math_6_ch2.html',9,'cyan',2,1,'math-6'),
('math-6-ch3','math',6,'Математика 6 · Множество','','§§1–5: множество и элементы, способы задания, пересечение и объединение, круги Эйлера.','math_6_ch3.html',5,'violet',3,1,'math-6'),
('math-6-ch4','math',6,'Математика 6 · Рациональные числа','','§§1–11: положительные и отрицательные числа, модуль, Z и Q, сравнение, действия, законы.','math_6_ch4.html',11,'rose',4,1,'math-6'),
('math-6-ch5','math',6,'Математика 6 · Координатная плоскость','','§§1–5: декартова система координат, графики реальных процессов, графики прямой и обратной пропорциональности.','math_6_ch5.html',5,'emerald',5,1,'math-6'),
('math-6-ch6','math',6,'Математика 6 · Наглядная геометрия','','§§1–5: тела и развёртки, окружность и круг (C, S), виды треугольников, центральная и осевая симметрия.','math_6_ch6.html',6,'amber',6,1,'math-6');
```
> `para_count` хаба = сумма детей (12+9+5+11+5+6 = 48) — так агрегируется прогресс (см. [046_chemistry7_hub.sql](backend/src/db/migrations/046_chemistry7_hub.sql), хаб=26=сумма). Применение: `npm run migrate` (раннер [migrations-runner.js](backend/src/db/migrations/migrations-runner.js) сортирует и применяет в транзакции, ведёт `_migrations`).
---
## 3. Дизайн-система
- **Шрифты:** Outfit (заголовки), Inter (текст), Unbounded (бейджи XP) — как в hub-образце.
- **Палитра глав** (CSS-переменные на каждой странице):
| Глава | Цвет | hex |
|---|---|---|
| 1. Десятичные дроби | indigo | `#4f46e5` |
| 2. Проценты и пропорции | cyan | `#0891b2` |
| 3. Множество | violet | `#7c3aed` |
| 4. Рациональные числа | rose | `#e11d48` |
| 5. Координатная плоскость | emerald | `#059669` |
| 6. Наглядная геометрия | amber | `#d97706` |
- **Тёмная тема** — через `html.dark` (копировать `initTheme`, ключ `math6_chN_theme`).
- **Иконки — только inline SVG `.ic`. ⛔ Никаких эмоджи** (правило проекта).
- **Десятичная запятая в KaTeX:** русская запись `2,35` пишется как `2{,}35` (`2,35` без скобок даёт лишний пробел). Это критично для всей Главы 1.
- **Адаптив:** сетка карточек глав `1fr``1fr 1fr` при ≥680px; сайдбар sticky на десктопе, сворачивается на мобильном.
---
## 4. Геймификация (как в algebra_7)
- **Прогресс по §:** `STATE.progress[pN]` 0100; ≥50% → `markParaRead`; 100% → ачивка.
- **XP/уровни:** `addXp(n, src)` локально + `window.LS.xp.add(n, 'math6-chN-…')` на сервер; уровень `calcLevel`.
- **Финал главы** = страница-босс (5–6 итоговых задач), +50 XP за полное прохождение (как `final1` в algebra_7).
- **Курсовой финал** на хабе: 6–8 боссов по всем главам + ачивка **«Математик 6 класса»** (+150 XP) — по образцу `chemistry_7_hub.html`.
- **localStorage-ключи:** `math6_chN_progress`, `math6_chN_achievements`, `math6_xp`, `math6_chN_theme`.
- **Синк прогресса:** `_TB_SLUG = 'math-6-chN'` → POST `/api/textbooks/math-6-chN/progress`.
---
## 5. Фазы реализации
> Каждая глава = отдельная фаза, наполняется **волнами** (2–4 § за волну): добавить `buildPN` + записи в `PARAS`/`SIDEBARS`/`TIPS`/`GLOSSARY` + тест + коммит. После каждой волны — `git add` поимённо + `commit` + `push` (правило проекта).
### Phase 0 — Инфраструктура (фундамент)
**Цель:** учебник появляется в каталоге, все 6 глав открываются (каркасы с заглушками), тест зелёный.
- [ ] Изучить `geom7_svg.js` (`window.GEOM7`) и `alg10_svg.js` (координатная сетка) — что переиспользовать.
- [ ] `frontend/js/math6_svg.js` (`window.Math6`): `plane()` (оси, сетка, точки, четверти), `numberLine()`, `circle(r)` (+ C, S), `triangle(type)`, `solid(kind)`+`net(kind)` (куб/призма/пирамида/цилиндр/конус), `reflectPoint`/`reflectLine`.
- [ ] `frontend/css/math6.css` — тема + общие классы карточек/сайдбара (вынести из inline algebra_7, чтобы 6 страниц не дублировали стили).
- [ ] `math_6_hub.html` — 6 карточек глав (палитра выше), общий прогресс, свёрнутый курсовой финал (боссы пока заглушка).
- [ ] `math_6_ch1.html … ch6.html` — скопировать скелет `algebra_7_ch1.html`; задать `_TB_SLUG`, палитру, `PARAS` по реальной программе; `BUILDERS` — временные заглушки (`para-hero` + «содержание готовится» + кнопка «прочитал»).
- [ ] `049_math6_hub.sql` + `npm run migrate`.
- [ ] `backend/tests/math6-page.test.js`: хаб рендерит 6 `.ch-card`; каждая глава — корректное число `.psel-card`, первый § активен, нет JS-ошибок.
- [ ] Коммит `feat(math6): Phase 0 — инфраструктура учебника (хаб + 6 каркасов)`.
### Phase 1 — Глава 1. Десятичные дроби (10 § + финал + прикладной)
| § | Интерактив |
|---|---|
| §1 Запись и разряды | **Разрядная таблица-конструктор**: перетащить цифры в разряды (единицы…тысячные), показать значение; чтение/запись дроби |
| §2 Сравнение и округление | Числовая прямая + тренажёр `>,<,=`; округление с подсветкой нужного разряда |
| §3 Координатный луч | Интерактивный луч: поставить точку по дроби / прочитать дробь по точке (`Math6.numberLine`) |
| §4 Сложение и вычитание | Сложение «в столбик» с анимацией выравнивания запятой |
| §5 Умножение/деление на разрядную единицу | Слайдер сдвига запятой при ×/÷ 10, 100, 1000 |
| §6 Умножение десятичных | Тренажёр + правило подсчёта знаков после запятой |
| §7 Деление на натуральное число | Пошаговое деление «уголком» |
| §8 Деление на десятичную дробь | Приём переноса запятой (×10ⁿ у делимого и делителя) |
| §9 Конечные и бесконечные дроби | Классификатор: конечная / периодическая; период в скобках `0,(3)` |
| §10 Преобразования | Конвертер «обыкновенная ↔ десятичная»; смешанные выражения |
| §11→Финал | 5 боссов на все действия с десятичными |
| §12 Математика вокруг нас | Прикладные задачи: деньги, чеки, измерения |
### Phase 2 — Глава 2. Проценты и пропорции (7 § + финал + прикладной)
| § | Интерактив |
|---|---|
| §1 Проценты | Конвертер «дробь ↔ % ↔ десятичная»; визуал — квадрат 10×10 (100 клеток) |
| §2 Основные задачи на проценты | 3 типа задач + блок-схема «алгоритм определения типа» (из приложения учебника, стр.2) |
| §3 Пропорция и её свойство | Основное свойство «крест-накрест» `a·n = b·m`; проверка/составление пропорции |
| §4 Прямая и обратная зависимость | Классификатор зависимости + 2 таблицы/графика |
| §5 Решение задач с помощью пропорций | Пошаговый решатель (что куда подставить) |
| §6 Масштаб | Карта + линейка; перевод масштаба (`1:N`) |
| §7 Круговые диаграммы | Построитель: данные → сектора (градусы/проценты), как «суточная норма БЖУ» из приложения |
| §8→Финал | 5 боссов: проценты + пропорции |
| §9 Математика вокруг нас | Скидки, вклады, статистика |
### Phase 3 — Глава 3. Множество (4 § + финал)
| § | Интерактив |
|---|---|
| §1 Множество и элементы | Конструктор множества, `∈ / ∉`, пустое множество `∅` |
| §2 Способы задания | Перечисление ↔ характеристическое свойство |
| §3 Операции (∩, ∪) | Интерактивная диаграмма двух областей: пересечение, объединение |
| §4 Круги Эйлера | Круги Эйлера (`Math6`) + задачи на подсчёт элементов |
| §5→Финал | 5 боссов на множества и круги Эйлера |
### Phase 4 — Глава 4. Рациональные числа (9 § + финал + прикладной)
| § | Интерактив |
|---|---|
| §1 Положит./отриц. Координатная прямая | Термометр/прямая: ставить и читать точки |
| §2 Модуль. Противоположные. Z и Q | `|x|` на прямой; вложенная диаграмма **N ⊂ Z ⊂ Q** (из приложения учебника) |
| §3 Сравнение рациональных | Тренажёр сравнения по координатной прямой |
| §4 Сложение | Модель «долги/имущество» (стрелки на прямой) |
| §5 Вычитание | Вычитание = прибавление противоположного |
| §6 Законы сложения | Переместительный/сочетательный — оптимизация суммы |
| §7 Умножение | Таблица знаков `(+/-)·(+/-)` + тренажёр |
| §8 Деление | Знаки при делении + тренажёр |
| §9 Все действия | Порядок действий, смешанный тренажёр |
| §10→Финал | 6 боссов на все действия с рациональными |
| §11 Математика вокруг нас | Температуры, координаты, долги |
### Phase 5 — Глава 5. Координатная плоскость (3 § + финал + прикладной)
| § | Интерактив |
|---|---|
| §1 Декартова система координат | Плоскость: ставить/читать точки `(x; y)`, определять четверть (`Math6.plane`) |
| §2 График. Графики реальных процессов | Чтение графика (движение/температура); построение по таблице |
| §3 Графики прямой/обратной пропорциональности | `y = kx` и `y = k/x`, слайдер `k`, форма графика (прямая/гипербола) |
| §4→Финал | 5 боссов: координаты + графики |
| §5 Математика вокруг нас | Графики из жизни (расписание, прогноз) |
### Phase 6 — Глава 6. Наглядная геометрия (5 § + финал)
| § | Интерактив |
|---|---|
| §1 Тела и развёртки | Галерея 3D-тел (куб, призма, пирамида, цилиндр, конус) + интерактивные развёртки |
| §2 Окружность. Круг. C и S | `C = πd = 2πr`, `S = πr²`; слайдер радиуса, значение π (как в приложении) |
| §3 Виды треугольников | Классификатор по сторонам (разносторонний/равнобедренный/равносторонний) и по углам (остро-/прямо-/тупоугольный) — таблица из приложения, DnD `setupSorter` |
| §4 Симметрия относительно точки | Центральная симметрия: построить образ точки/фигуры |
| §5 Симметрия относительно прямой | Осевая симметрия (зеркало) + Финал главы (5 боссов) |
### Phase 7 — Финалы, курсовой финал, глоссарий, полировка
- [ ] Курсовой финал на хабе: 6–8 боссов (по 1 на главу) + ачивка «Математик 6 класса».
- [ ] Заполнить `SIDEBARS` (шпаргалки) и `TIPS` во всех 38 §; собрать общий `GLOSSARY` (десятичная дробь, разряд, процент, пропорция, масштаб, множество, пересечение/объединение, модуль, рациональное число, координата, абсцисса/ордината, развёртка, симметрия…).
- [ ] Прогон тестов, проверка KaTeX-запятых, тёмной темы, мобильной вёрстки.
### Phase 8 — Доступ и проверка в браузере
- [ ] Выдать доступ ученикам/классам: новый хаб **по умолчанию закрыт** (allowlist, [040_content_access.sql](backend/src/db/migrations/040_content_access.sql)) → admin/teacher даёт `POST /api/access/rules { content_type:'textbook', content_ref:'math-6', scope:'class', target_id, allow:1 }`. См. [[project_content_access]].
- [ ] Проверка в реальном браузере: каталог → хаб → каждая глава, прогресс, синк, боссы.
---
## 6. Паттерн волны (рецепт для Sonnet)
1. Открыть нужную `math_6_chN.html`, найти `BUILDERS` и заглушку `buildPk`.
2. Написать `buildPk()`: `makeCard('theory'|'rule'|'example', …)` для теории (2–3 карточки) + блок интерактива (`.wg`) + `secNav(prev,next)` + кнопка «прочитал». В конце — `box.innerHTML=…; renderMath(box);` и навесить обработчики.
3. Сложную графику рисовать через `window.Math6` (или `GEOM7`); формулы — KaTeX (`2{,}5`).
4. Добавить запись в `SIDEBARS[pk]`, `TIPS`, релевантные `GLOSSARY`.
5. Тест: открыть страницу в jsdom, проверить, что `buildPk` смонтировал ключевой узел и нет JS-ошибок.
6. **Верифицировать персист** правок (см. гочи ниже) → `git add` поимённо → `commit` (`feat(math6): глава N §a–§b`) → `push`.
---
## 7. Критические правила и «гочи» (из памяти проекта)
-**Эмодзи запрещены** — только inline SVG `.ic`. См. [[feedback_no_emoji]].
-**Grep-инструмент запрещён.** Поиск: `ast-index` (символы/usages) + `vex` (semantic). Чтение — `Read` с offset/limit, файлы — `Glob`. См. [[reference_vex_search]].
- ⚠️ **Cyrillic-FS флака** (путь `G:\Dev\Тесты\…`): `Edit` иногда рапортует success, но **не персистит** пакет правок. После пакета Edit'ов — проверить персист (`node -e "fs.readFileSync(...).includes('маркер')"` через Bash) и только потом коммитить. См. [[feedback_verify_edits_applied]], [[project_chemistry7_textbook]].
- **БД:** встроенный `node:sqlite` (`DatabaseSync`), НЕ better-sqlite3. Живая БД `backend/data/learnspace.db`. См. [[reference_sqlite_node]].
- **Тесты:** запускать через `node -e "require('./tests/math6-page.test.js')"` (надёжнее резолвит кириллицу, чем `node --test <file>`); baseline — 3 предсуществующих Auth-фейла (не трогать).
- **Параллельные сессии в одной ветке:** `git fetch` перед работой, `add` поимённо, без слепого force-push. См. [[project_concurrent_sessions_branch]].
- **KaTeX без `katex`-пакета в jsdom** — рендер формул в тестах не вызывать на узлах, требующих canvas; проверять структуру, не визуал.
---
## 8. Чек-лист приёмки
- [ ] `/textbooks` показывает карточку «Математика — 6 класс» (после выдачи доступа).
- [ ] Хаб открывает 6 глав; общий прогресс агрегируется.
- [ ] Все 38 содержательных § наполнены теорией + рабочим интерактивом.
- [ ] 6 финалов глав + курсовой финал с ачивкой «Математик 6 класса».
- [ ] Прогресс/XP синкаются на сервер; localStorage-ключи `math6_*`.
- [ ] Формулы (десятичные запятые!) рендерятся корректно; тёмная тема и мобильная вёрстка ок.
- [ ] `backend/tests/math6-page.test.js` зелёный; полный прогон без новых регрессий.
- [ ] Всё закоммичено поимённо и запушено в `master`.
---
### Оценка объёма
6 глав · 38 содержательных § + 6 финалов + курсовой финал. По темпу Химии 7 (волны по 2–4 §) — **Phase 0 ≈ 1 заход**, далее **≈ 12–16 волн** на наполнение. Фундамент (скелет из algebra_7) переиспользуется на 90% — основная работа в `buildPN()` и `Math6`-графике (Главы 5–6 самые «рисовательные»).