Subjects per grade (math, calculus, geometry, stats, discrete), 5 new textbooks, 202 new islands, long islands split, hand-written figures and lesson texts for the new books

- content.Subject + Unit.subject, /api/home?subject=, tutor grounded in the chosen book
- 5 new books ingested; ~1150 hand-written questions, islands named by hand
- node_split: islands over 7 lessons split into parts of <=6 (lesson ids and progress kept)
- Lesson.figures hand-authored and visually checked for 653 lessons of the new books;
  gen_lesson_figures got --subject and survives network errors
- seed files re-exported

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-12 05:35:18 +03:30
parent 3d51b3b83a
commit 8cb1ecb85e
32 changed files with 81218 additions and 4486 deletions

View File

@@ -27,6 +27,7 @@ import json
from django.db import transaction
from . import question_io
from .curriculum_io import _subject_or_error
from .models import Grade, Lesson, Node, Question, SeedRecord, Unit
@@ -91,7 +92,10 @@ def sync(grades: list[dict], question_rows: list[dict]) -> dict:
if ledger.delivered(_key('unit', *upath)):
counts['retired'] += 1
continue
unit = Unit.objects.create(grade=grade, title=u['title'], order=u['order'])
unit = Unit.objects.create(
grade=grade, title=u['title'], order=u['order'],
subject=_subject_or_error(u['subject']),
)
counts['units'] += 1
ledger.record(_key('unit', *upath), 'unit')
if u.get('blurb') and not unit.blurb: