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
The 10 audit findings in phase 05 all pointed at SVG assets that were
never created. Nine were broken image embeds (./assets/<name>.svg) and
one was a code-fence false positive where '[tool_name](**args)' inside a
Python snippet looked like a Markdown link to the audit's regex.
This commit:
- Removes the nine broken figure embeds across lessons 01-09. The
surrounding prose stands on its own; no caption text needed rewriting.
- Splits the offending Python expression in lesson 17 onto two lines
(fn = tools[tool_name]; result = fn(**args)) so '](**args)' no longer
appears as adjacent characters.
Most-frequent-tag baseline (~85% on Brown), bigram HMM with Viterbi
decoding (~93%), sketched path to CRF and BiLSTM-CRF (~97-98%) with
annotator disagreement as the ceiling.
Closes the loop with lesson 01: lemmatization correctness depends on
POS, and this lesson shows how to get POS. Teaches both tagsets (Penn
Treebank for English legacy, Universal Dependencies for multilingual)
and both parse styles (constituency vs dependency) with a worked
dependency parse example.
Ship artifact: grammar-pipeline skill that picks tagset, library, and
integration pattern for downstream tasks. Refuses to recommend rolling
your own parser.
~45 minutes. Prerequisites lesson 05/01.