Figured questions for grade-12 geometry (conics, systems, vectors: 50 new); docs: figured questions win in the island quiz

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-14 22:24:53 +03:30
parent cd4f2ce0b2
commit 998b68e4bc
3 changed files with 2875 additions and 0 deletions

View File

@@ -323,6 +323,13 @@ has been done before.
- `GET /api/nodes/{id}/quiz`: at most one question per lesson, shuffled on `nodeId:userId` only, so a student - `GET /api/nodes/{id}/quiz`: at most one question per lesson, shuffled on `nodeId:userId` only, so a student
sees the same quiz every time (owner's decision; `NodeQuizStabilityTests`). sees the same quiz every time (owner's decision; `NodeQuizStabilityTests`).
**Figured questions win:** inside a lesson the quiz takes a question with a `figure` over one without
(`NodeQuizPrefersFigureTests`). So adding figured questions to a lesson replaces its figureless ones in
the quiz without deleting anything; the old rows stay (seed never deletes, answers may reference them).
Owner's standing plan (2026-10-14): keep writing more figured questions and re-review the whole bank over
time; this rule is the mechanism, so new figures need no other switch. Write them with
`tools/figures/batch.py` (`docs/content-authoring.md` «سوالِ شکل‌دار»). The lesson-level list
(`/api/lessons/{id}/questions`) does not reorder; only the island quiz does.
- `POST /api/nodes/{id}/quiz/complete` completes the island at any score (score sets stars/XP) and returns - `POST /api/nodes/{id}/quiz/complete` completes the island at any score (score sets stars/XP) and returns
`nextNodeId`. It refuses a locked island (403 `node_locked`, same rule as `/api/home`) and a user who has `nextNodeId`. It refuses a locked island (403 `node_locked`, same rule as `/api/home`) and a user who has
not answered every question (409 `answers_missing`; required = `max(client totalQuestions, min(4, questions not answered every question (409 `answers_missing`; required = `max(client totalQuestions, min(4, questions

File diff suppressed because it is too large Load Diff

View File

@@ -140,3 +140,22 @@ python manage.py seed_test_data # فقط با DEBUG=True اجرا
python manage.py seed_test_data --force # staging، با DEBUG=False python manage.py seed_test_data --force # staging، با DEBUG=False
python manage.py seed_test_data --reset # پاک کردنِ داده‌ی seedِ قبلی و ساختِ دوباره python manage.py seed_test_data --reset # پاک کردنِ داده‌ی seedِ قبلی و ساختِ دوباره
``` ```
## سوالِ شکل‌دار (از ۲۰۲۶-۱۰-۱۴)
آزمونِ جزیره از هر درس یک سوال برمی‌دارد و اگر درس سوالِ شکل‌دار داشته باشد، همان را برمی‌دارد؛ پس افزودنِ سوالِ
شکل‌دار، سوالِ بی‌شکلِ همان درس را از آزمون کنار می‌زند، بی‌آنکه چیزی پاک شود. برنامه این است که
شکل‌ها و سوال‌های بیشتری ساخته و کلِ بانک بازبینی شود؛ این سازوکار همان را بی‌کارِ اضافه ممکن می‌کند.
```bash
python tools/figures/batch.py spec # کاتالوگِ نوع‌های شکل
python tools/figures/batch.py export "پایه دوازدهم" "فصل ۲" هندسه --out f.json # درس‌های فصل
python tools/figures/batch.py check batch.json # سخت‌گیرانه: آیتمِ حذف‌شده = رد
python tools/figures/batch.py merge batch.json # افزودن به questions.json
```
درس‌هایی که ذاتاً شکل ندارند (تعریف، گزاره، نقیض) را شکل نمی‌دهیم. بیضی، سهمی و هذلولی نوعِ جدا ندارند:
با دو `function` (نیمه‌ی بالا و پایین) کشیده می‌شوند. معادله‌ی خط را به شکلِ `ax + by = c` بنویسید (`y = -x/3 + 1`
خوانده نمی‌شود)، و نسبتِ `xRange` به `yRange` را از حدود ۱٫۵ بیشتر نکنید، وگرنه خط‌ها نصفه کشیده می‌شوند.
بعد از `check`، شکل را حتماً رندر و با چشم ببینید.