2 Commits
Author SHA1 Message Date
Rohit Ghumare dda194f840 fix(quiz): correct answer is always in the same position (slot B) (#381)
Every "Test Your Understanding" quiz placed the correct answer in option B.
Across the 2026 questions in 338 quiz files the correct answer sat at index 1
in 61.5% of cases (uniform would be ~25%), and 107 files had every answer at B,
making the quizzes guessable without reading them.

scripts/debias_quizzes.py rewrites each question's option order with a
deterministic, content-seeded permutation and updates the correct index to
follow the moved answer. It is idempotent: options are canonicalised to a sorted
base before permuting, so re-running produces byte-identical output. Questions
whose options reference each other by position ("all of the above", "both A and
B") are left untouched. The correct-answer value, the option set, and every
explanation are preserved exactly; only order and the index change.

Result: A 23.8% / B 26.3% / C 23.5% / D 26.4%.

The script doubles as a CI guard: `--check` exits non-zero if any quiz is not
de-biased, wired into the curriculum workflow so new lessons cannot regress.

Fixes #368
2026-08-01 14:24:15 +01:00
Rohit Ghumare e2c27325aa feat(phase-17): quiz backfill, 0/28 -> 28/28 (#151)
* feat(phase-17/01): add quiz.json

* feat(phase-17/02): add quiz.json

* feat(phase-17/03): add quiz.json

* feat(phase-17/04): add quiz.json

* feat(phase-17/05): add quiz.json

* feat(phase-17/06): add quiz.json

* feat(phase-17/07): add quiz.json

* feat(phase-17/08): add quiz.json

* feat(phase-17/09): add quiz.json

* feat(phase-17/10): add quiz.json

* feat(phase-17/11): add quiz.json

* feat(phase-17/12): add quiz.json

* feat(phase-17/13): add quiz.json

* feat(phase-17/14): add quiz.json

* feat(phase-17/15): add quiz.json

* feat(phase-17/16): add quiz.json

* feat(phase-17/17): add quiz.json

* feat(phase-17/18): add quiz.json

* feat(phase-17/19): add quiz.json

* feat(phase-17/20): add quiz.json

* feat(phase-17/21): add quiz.json

* feat(phase-17/22): add quiz.json

* feat(phase-17/23): add quiz.json

* feat(phase-17/24): add quiz.json

* feat(phase-17/25): add quiz.json

* feat(phase-17/26): add quiz.json

* feat(phase-17/27): add quiz.json

* feat(phase-17/28): add quiz.json

* chore(catalog): rebuild after phase 17 quiz backfill

* fix(phase-17): randomize correct-answer positions across quizzes
2026-05-23 01:12:25 +01:00