feat(math5): Глава 3 «Обыкновенные дроби» — §1–18 + финал (Sonnet по эталону)

Дроби и доли, основное свойство и сокращение, смешанные числа, сравнение,
сложение/вычитание/умножение/деление дробей, задачи на дроби; геометрия:
параллельные/перпендикулярные прямые, периметр многоугольника, площадь и
площадь треугольника, среднее арифметическое, столбчатые диаграммы,
параллелепипед и объём (2D-изометрия). Inline-SVG визуалы (полоса долей,
сетка умножения, изометрия). Реализовано Sonnet-агентом инкрементально по
образцу math_5_ch1; проверено: грузится без ошибок, §1–18 без заглушек.

Учебник «Математика 5» наполнен ЦЕЛИКОМ (3 главы, 44 §). Тесты math5: 12/12.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-03 10:34:15 +03:00
parent 06e9846cc3
commit 5a2a1be089
2 changed files with 1485 additions and 2 deletions
+24 -2
View File
@@ -75,9 +75,31 @@ for (const ch of CHAPTERS) {
}); });
} }
test('ch3: §§ без билдеров — заглушка движка (каркас ждёт наполнения)', async () => { test('ch3: дроби + геометрия + объём + финал', async () => {
const { doc, errors } = await loadDom('math_5_ch3.html');
const win = doc.defaultView;
assert.ok(!doc.querySelector('#p1-body .m6-placeholder'), '§1 наполнен');
assert.ok(doc.querySelector('#p1-fig svg'), '§1: полоса долей (SVG)');
win.goTo('p7'); await wait(80);
assert.ok(doc.querySelector('#p7-fig svg'), '§7: сетка умножения дробей (SVG)');
win.goTo('p17'); await wait(80);
assert.ok(doc.querySelector('#p17-fig svg'), '§17: параллелепипед (изометрия SVG)');
win.goTo('p18'); await wait(80);
assert.ok(doc.querySelector('#p18-fig svg'), '§18: объём кубиками (изометрия SVG)');
win.goTo('final'); await wait(80);
assert.ok(doc.querySelector('#fin-go'), 'финал: арена боссов');
win.bumpProgress('final', 100); await wait(20);
assert.ok(win.M6STATE.achievements.has('ch3_done'), 'достижение «Глава 3 пройдена»');
assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
});
test('ch3: все § §1–§18 наполнены (нет заглушек)', async () => {
const { doc } = await loadDom('math_5_ch3.html'); const { doc } = await loadDom('math_5_ch3.html');
assert.ok(doc.querySelector('#p1-body .m6-placeholder'), 'ch3: заглушка § 1'); const win = doc.defaultView;
for (let n = 1; n <= 18; n++) {
win.goTo('p' + n); await wait(20);
assert.ok(!doc.querySelector('#p' + n + '-body .m6-placeholder'), '§' + n + ' наполнен');
}
}); });
test('ch2: выражения/уравнения/углы + финал', async () => { test('ch2: выражения/уравнения/углы + финал', async () => {
File diff suppressed because it is too large Load Diff