---
name: project_chemistry7_textbook
description: "Новый интерактивный учебник «Химия 7» (Беларусь, Шиманович 2023): план + статус фаз, архитектура (переиспользование движка Химии 8)"
metadata: 
  node_type: memory
  type: project
  originSessionId: f74d8a9a-17bc-40a4-b458-4a5b596a07f2
---

Создаём интерактивный учебник **«Химия 7»** (Беларусь, Шиманович и др., 2023) — первый курс химии. План: `plans/textbooks-7/PLAN_CHEMISTRY_7.md`. Программа из книги (PDF `himiya_7kl_shimanovich_rus_2023 (1).pdf` в [[reference_textbook_sources]], TOC на стр. 3–4): **4 главы, 26 §, 5 лаб. опытов, 4 практ. работы**. Гл.I Первоначальные понятия §1–12, Гл.II Кислород §13–17, Гл.III Водород §18–22, Гл.IV Вода §23–26.

**Why:** закрывает нижнюю ступень химии (линейка 7→8→9). 7 класс — качественный курс (валентность, а не степень окисления; `M_r` без моля; без ПЗ/строения атома/ТЭД — это [[project_lab_content_engine]]… нет, это Химия 8).

**How to apply (ключевая архитектура — НЕ дублировать):** движок Химии 8 **полностью переиспользуется** для Химии 7. Страница главы лишь объявляет `window.CHEM8_CFG`/`PARAS`/`BUILDERS`/`POOLS`/`SIDEBARS`/`TIPS`/`ACH_LABELS` и подключает общие `/js/chem8_engine.js` + `/css/chem8-textbook.css` + `/js/chem8_svg.js` (`window.Chem8`) + `/js/biochem-core.js`. Свой только `/js/chem7_svg.js` (`window.Chem7` — тонкая надстройка над Chem8) и страницы. `/textbook/<slug>` → `frontend/textbooks/<html_path>` (html_path из БД). Прогресс/XP/ачивки — автоматически движком; ключи localStorage `chemistry7_*`.

**Статус (2026-05-30): ВЕСЬ КОНТЕНТ ГОТОВ — все 26 § наполнены** (Phases 0–4, последний коммит 7574d16, ветка feature/lab-content-engine). Глава 3 «Водород» (§§18–22 + ЛО3,4 + ПР3, виджеты `chem7_ch3_widgets.js`: паспорт H₂, реакции водорода, индикаторы кислот, ряд активности, опыт металл+кислота, конструктор солей, проверка чистоты H₂) и Глава 4 «Вода» (§§23–26 + ЛО5 + ПР4, `chem7_ch4_widgets.js`: разложение воды 2:1, конструктор оснований, индикаторы щёлочи, нейтрализация, экология) — ГОТОВЫ. У всех 4 глав финалы по 6 боссов; курсовой финал (8 боссов + ачивка «Химик 7 класса») в хабе. Тесты chem7: **15/15 pass**; полный прогон **161/164** (3 — baseline Auth). Учебник появляется в каталоге `/api/textbooks` автоматически (is_active=1, parent_slug=NULL).

**Визуальный апгрейд (анимации):** план `plans/textbooks-7/PLAN_CHEMISTRY_7_VISUAL.md` (~15 флагманов, фазы V0–V5). **V0+пилот V1 ГОТОВЫ** (коммит f620562): движок `frontend/js/chem7_anim.js` (`window.Chem7Anim`: `loop` с IntersectionObserver-паузой, `molecule3d` SVG-вращение+drag, `separation` canvas-частицы, `colorMorph`, `confettiSmall`; **headless-guard** `navigator.userAgent~jsdom` — canvas getContext НЕ зовётся в тестах, молекулы на SVG → jsdom-safe; IntersectionObserver guard). Пилот: §5/§6 → вращающиеся 3D-молекулы (`molViewer`+`MOL` в chem7_ch1_widgets.js), §2/ПР1 → анимация разделения смесей при верном методе. Тест `ch1 V-пилот` зелёный (16/16). **Готово: V0 + V1 (Гл.1) + V2 §15 (горение).** Движок дополнен CSS-хелперами (jsdom-safe): `bubbleField`/`precipField`/`flameBox`/`colorBlock` (+ инжект keyframes). V1 анимировано: §2/ПР1 разделение (canvas `separation`), §5/§6 3D-молекулы (`molViewer`+`MOL`), §10/ЛО1 признаки (`demoAnim`: colorBlock/precip/flame/bubble), §11 осадок (`precipField`). V2: §15 горение — `flameBox` с цветом по веществу (C оранж, S синий, P бел., Fe/Mg искры); `chem7_anim.js` подключён в Гл.1 и Гл.2. Коммиты f620562, 41985a9, e8cb95b.
**Готово V0–V4: ВСЕ 4 главы анимированы** (коммиты …e8cb95b, 33f968b, 639f985). `chem7_anim.js` подключён во все 4 главы. V3 (Гл.3): §21 ряд активности → пузырьки H₂ (`bubbleField`)/«нет реакции» для Cu; §19 восстановление CuO → `colorBlock` чёрный→красный; §20/ЛО3 индикаторы → `colorBlock`. V4 (Гл.4): §23 электролиз → 2 потока пузырьков H₂(18)/O₂(9) = 2:1; §24/ЛО5 индикаторы щёлочи → `colorBlock`; §25/ПР4 нейтрализация → `colorBlock` малиновый→бесцветный. chem7-тест: **16/16** (3D-молекулы, разделение, признаки, осадок, горение, пузырьки, морфинг цвета, индикаторы, электролиз, титрование). 
**V1-хвост ЗАКРЫТ** (коммит ac6552b): §9 — `Chem7Anim.valenceLink` (SVG «связи-крючки», draw-in); §12 — анимированный подсчёт атомов (реагенты vs продукты, точки появляются масштабом, баланс слева=справа). **ВСЕ интерактивы Химии 7 анимированы (V0–V4 + хвост).** chem7-тест 16/16. **Остаток (опционально):** звук (Web Audio: хлопок гремучего газа / пшик лучинки) — не делал; V5 reduced-motion и пауза вне экрана УЖЕ в движке. ВАЖНО при full-test: chem8 «intro» тест иногда флачит по таймингу под параллельной нагрузкой (не регрессия — проходит в изоляции).

**КРИТИЧНО для тестов:** пакет `canvas` НЕ установлен → `getContext` в jsdom кидает «Not implemented» (ловится как jsdomError) → анимации на canvas ОБЯЗАНЫ иметь headless-guard. `jsdom` и `katex` стоят `--no-save` (любой `npm install` их пруннит — при пропаже восстановить `npm install --no-save jsdom katex`).

**Осталось по контенту (опциональная полировка, Phase 5/6):** виджет глоссария `chem7_glossary.js` (по образцу chem8_glossary), проверка в браузере, выдача доступа ученикам ([[project_content_access]]), при желании — общий «большой финал»/карта связей. Функционально курс завершён.

**Предыдущий статус (Phase 0+1+2):**

**Phase 2 — Глава 2 «Кислород» (§§13–17 + ЛО2 + ПР2 + финал) ГОТОВА** (2 волны). Виджеты в `frontend/js/chem7_ch2_widgets.js`: §13 диаграмма состава воздуха, ЛО2 выбор собирания газа, §14 переключатель элемент/O₂/O₃ + модели (`molSvg`), §15 симулятор горения (C/S/P/Fe/Mg → оксид, через Chem8.chemEq), §16 конструктор оксида (валентность) + `Chem7Classify` (оксид/не оксид), §17 схема получения O₂ (катализатор), ПР2 тлеющая лучинка. 8 боссов финала курса в хабе уже работают.

**⚠️ КРИТИЧНО — флака Cyrillic-FS (видел вживую):** под путём `G:\Dev\Тесты\…` инструмент **Edit иногда рапортует success, но запись НЕ персистится** (целый пакет из 6 Edit'ов молча не сохранился). Также `node --test <relative-file>` и `node -e readFileSync(...)` периодически дают ENOENT/«Could not find» под кириллицей. ПРАВИЛО (см. [[feedback_verify_edits_applied]]): после пакета Edit'ов в файл под `Тесты\` — ОБЯЗАТЕЛЬНО проверить персист через `node -e \"h=fs.readFileSync(...); h.includes('маркер')\"` (Bash), и только потом коммитить. Тесты запускать через **`node -e \"require('./tests/chemistry7-page.test.js')\"`** (require резолвит кириллицу надёжнее, чем `--test <file>`); при ENOENT — повторить (флака транзиентна). Read-state харнесса слетает после компакта → перед Edit может понадобиться повторный Read.

**Phase 1 — Глава 1 «Первоначальные химические понятия» (§§1–12) наполнена ПОЛНОСТЬЮ** (4 волны):
теория (3 карточки/§), звёздные виджеты, тренажёры задач (POOLS), финал главы (6 боссов). Виджеты в `frontend/js/chem7_ch1_widgets.js` (CHEM8_WIDGETS/FLAG_MOUNTS): §1 классификатор тело/вещество, §2/ПР1 разделитель смесей, §3 каталог элементов + тренажёр символов, §4 весы атомов, §5 галерея молекул (SVG-шарики `molBalls`), §6 классификатор простое/сложное, §7 парсер формулы (Chem8.elementCounts), §8 калькулятор M_r (Chem8.molarMass), §9 конструктор формулы по валентности (НОК), §10/ЛО1 детектор признаков реакции, §11 весы сохранения массы, §12 балансировщик (Chem8.equationBalancer). Builder'ы build_pN — inline в `chemistry_7_ch1.html` (override заглушек). Тест `chemistry7-page.test.js`: 10/10 pass; полный прогон 156/159 (3 — baseline Auth). **Паттерн волны:** добавить build_pN+POOLS+SIDEBARS+TIPS+override в HTML + mount_pN в widgets-файл + тест + commit.

**Phase 0 ГОТОВ** (коммит c33b4ab):
- миграция `046_chemistry7_hub.sql` применена (родитель `chemistry-7` 26§ + 4 ребёнка `chemistry-7-ch1..ch4`, палитра emerald/cyan/violet/blue);
- `frontend/textbooks/chemistry_7_hub.html` (emerald, 4 главы, финал курса 8 боссов, ачивка `chemistry7_course_master` «Химик 7 класса» +150 XP);
- `chemistry_7_ch1..ch4.html` — каркасы на общем движке; PARAS по реальной программе; **builder'ы пока заглушки** (para-hero + «содержание готовится» + кнопка прочтения), генерятся inline из PARAS;
- `frontend/js/chem7_svg.js` — Chem7 (стабы звёздных виджетов: valenceBuilder, mixtureSeparator, reactionSigns, massConservation, combustionSim, compoundBuilder, airComposition, waterDecomp, massFraction);
- тест `backend/tests/chemistry7-page.test.js` (6 тестов, все проходят).

**Дальше:** Phase 1 — наполнить Гл.I §§1–12 реальным контентом (теория + интерактивы + POOLS), создать `chem7_ch1_widgets.js` (заменить inline-заглушки на build_pN + CHEM8_WIDGETS/FLAG_MOUNTS, как в `chem8_intro_widgets.js`). Затем Phase 2–4 (главы), Phase 5 финалы, Phase 6 качество/админка.

**Тесты:** `cd backend && node --test tests/*.test.js`. ВАЖНО: Cyrillic-путь ломает запуск `node --test <file>` из PowerShell — запускать через Bash. Baseline: 3 pre-existing Auth-фейла (не трогать). См. [[reference_sqlite_node]], [[feedback_no_emoji]], [[project_concurrent_sessions_branch]].
