--- name: project_math6_textbook description: "Новый интерактивный учебник «Математика 6» (Беларусь, Герасимов/Пирютко 2022): план + архитектура (переиспользует паттерн Алгебры 7, не движок химии)" metadata: node_type: memory type: project originSessionId: 60467058-b40e-4bd9-9f7f-d1e362e8039a --- Создаём интерактивный учебник **«Математика 6»** (Беларусь, Герасимов В. Д., Пирютко О. Н., 2022, 2-е изд.). План: `plans/textbooks-6/PLAN_MATH_6.md` (составлен 2026-06-02, исполнитель — Sonnet, по волнам). PDF-источник: `matematika_6kl_gerasimov_rus_2022.pdf` (317 стр.) в [[reference_textbook_sources]]; оглавление на стр. 309–311. **Программа: 6 глав, 47 § (38 содержательных + 6 «Тест» → Финалы + 5 «Математика вокруг нас» → прикладные §):** 1. Десятичные дроби (§1–12, indigo) 2. Проценты и пропорции (§1–9, cyan) 3. Множество (§1–5, violet) 4. Рациональные числа (§1–11, rose) 5. Координатная плоскость (§1–5, emerald) 6. Наглядная геометрия (§1–5, amber). **Why:** первый математический (комбинированный: арифметика+алгебра+геометрия) учебник для 6 класса — нижняя ступень линейки до алгебры/геометрии 7. **Архитектура (РЕАЛИЗОВАНА — общий движок + inline-билдеры).** Не дублируем движок в 6 глав (как algebra_7), а вынесли плумбинг в `frontend/js/math6_engine.js` (`window.M6engine`, читает конфиг `window.M6`): STATE/прогресс/XP/ачивки, генерация секций из `M6.paras`, para-selector, goTo/ensureBuilt, SIDEBARS/TIPS/buildSidebar, GLOSSARY+wrapGlossary, SEARCH, тема, confetti (с jsdom-guard), setupSorter (DnD). Экспортит глобально для билдеров: `makeCard, secNav, readBtn, feedback, renderMath, fmt, num, addXp, bumpProgress, achievement, setupSorter, confetti, goTo`. **Кастомные интерактивы § — inline-функции `buildPN()` на странице главы** (свобода как у algebra_7, без унифицированного пула химии). Страница главы = chrome + `window.M6={slug,lsPrefix,xpKey,paras,achLabels,startAch,finalAch,sidebars,tips,glossary,builders,footer}`. **§ без билдера → авто-заглушка** (движок). КРИТ. порядок скриптов: объявить data/builders, затем `Object.assign(window.M6,{...})` (const → нет TDZ); `init` перечитывает `window.M6`. **Русская запятая в KaTeX = `2{,}35`**; в JS-билдерах хелпер `_kf(x)` (число→KaTeX-строка с `{,}`), числа считать целочисленными мантиссами (`_mant/_dec`), не float. `frontend/js/math6_svg.js` (`window.Math6`): готовы `fmt`, `box`, `numberLine` (прямая/луч, метки, точки, отрезки), `plane` (декартова плоскость + plot функции) — фундамент для Гл.5. ДОБАВИТЬ при Гл.5–6: `plotFn`, окружность/круг, треугольники, развёртки тел, симметрия. **Файлы:** миграция `049_math6_hub.sql` ПРИМЕНЕНА (хаб `math-6` + `math-6-ch1..ch6`, para_count хаба=48=сумма 12/9/5/11/5/6, палитры indigo/cyan/violet/rose/emerald/amber); `frontend/css/math6.css` (общий фреймворк по образцу alg7); `math_6_hub.html` + 6 каркасов; тест `backend/tests/math6-page.test.js`. Маршруты/каталог общие — не трогать. Хаб **закрыт по умолчанию** (allowlist) → доступ через `/api/access/rules` ([[project_content_access]]) в финале. **Геймификация:** `_TB_SLUG='math-6-chN'` (M6.slug), синк POST `/api/textbooks/math-6-chN/progress`; localStorage `math6_chN_*` + общий `math6_xp`; Финал главы = боссы (HP-бар), победа 4/5 → +40 XP и `finalAch` ачивка «Глава N пройдена» (через `bumpProgress('final',100)`). Курсовой финал на хабе + ачивка «Математик 6 класса» — TODO (финальная фаза). **Паттерн волны (для Sonnet, ч.2–4):** в `math_6_chN.html` дописать `function buildPk(){...}` (теория `makeCard` + `.wg` интерактивы + `secNav`+`readBtn`), добавить ключ в `BUILDERS`/`SIDEBARS`/`TIPS`/`GLOSSARY`, тест-ассерт, прогон `node -e "require('./backend/tests/math6-page.test.js')"`, коммит поимённо + push. Эталон — **Глава 1** (`math_6_ch1.html`): 2 интерактива/§, тренажёры со счётом+XP, DnD-сопоставление, числовая прямая. **Гочи:** ⛔ эмодзи ([[feedback_no_emoji]]); ⛔ Grep ([[reference_vex_search]]); Cyrillic-FS флака Edit — персист зелёным тестом ([[feedback_verify_edits_applied]]); БД node:sqlite ([[reference_sqlite_node]]); fetch+add поимённо ([[project_concurrent_sessions_branch]]); pre-commit hook гоняет полный backend-прогон при staged backend-файлах (baseline 3 Auth-фейла — не трогать). **СТАТУС (2026-06-02): ВСЕ 6 ГЛАВ + КУРСОВОЙ ФИНАЛ ГОТОВЫ, всё на master (Opus целиком — пользователь сказал «делай ты»).** Тесты math6: **17/17** (полный backend-прогон 0 новых фейлов). Учебник функционально завершён. - Гл.1 (12§, 4b949f7): разрядный конструктор, сравнение/округление на прямой, координатный луч, столбик, сдвиг запятой, умножение/деление, период (долгое деление), преобразования, прикладные, финал. - Гл.2 (9§, a783565): процент-сетка 100 + конвертер, 3 типа задач, пропорция (крест-накрест), прямая/обратная зависимость, решение пропорцией, масштаб, круговые диаграммы (`Math6.pie`), финал. - Гл.3 (5§, 203807a): ∈/∉, способы задания, операции ∩/∪ (`Math6.venn`), круги Эйлера (задачи + формула |A∪B|), финал. - Гл.4 (11§, 21853bd): знак числа, модуль, противоположные, N⊂Z⊂Q, сравнение, сложение (на прямой), вычитание, законы, умножение (таблица знаков), деление, порядок действий, прикладной, финал (6 боссов). - Гл.5 (5§, 09c61d8): координаты+четверти, графики процессов (`Math6.plane` polyline), y=kx/y=k/x, путь–время, финал. - Гл.6 (5§, 670ae80): тела+развёртки, окружность/круг (C,S), виды треугольников (классификация из координат), центральная/осевая симметрия, финал. - Курсовой финал на хабе (0bb48d3): 6 испытаний (по главе) + звание «Математик 6 класса» (+150 XP, `localStorage math6_course_done`, зажигает ach-strip). `Math6` (math6_svg.js) теперь: `fmt, box, numberLine, plane(+polyline), pie, venn`. Геометрия тел/развёрток/треугольников — inline SVG в `math_6_ch6.html`. **CANVAS-АНИМАЦИИ (коммиты 6b73495, 61de12e):** движок `frontend/js/math6_anim.js` (`window.Math6Anim`) — headless-safe по канве chem7_anim: RAF-цикл `loop()` с паузой вне экрана (IntersectionObserver), `prefers-reduced-motion`, **в jsdom/HeadlessChrome `getContext` НЕ вызывается** (HEADLESS-guard по navigator.userAgent → ctx=null, рисуется только DOM-каркас → тесты не падают). Подключается в главу тегом `