# Recipes Short answers, for when you know the shape of the tool and want the invocation. ## Assembly **Draw only from material I have taught.** `--lectures l09,l10,l11`. Combine with `--topics` and `--banks` to narrow further; the filters intersect. **See the draw before committing to it.** `--dry-run`. Prints the selection and any notes about constraints that had to bend, and writes nothing. **Reproduce a draw exactly.** `--seed N`. The same seed against the same pool gives the same items in the same order. Recorded in the assessment file, so a draw stays reproducible after the fact. **Two forms that differ only in option order.** `--forms 2`. Each form gets its own seed; item order is shared unless the form sets `shuffle_items`. **A blueprint I cannot satisfy.** The error names the level, how many items were asked for, and how many were available after filtering. Usually the fix is a shorter cooldown or a wider lecture range, not more items. ## Reuse ```console $ coursebank usage history q-align-recall-001 $ coursebank usage unused ``` `unused` lists approved items never placed on an assessment, which is the queue of work you already did and forgot about. ## Exports **A printable exam.** `coursebank export typst exam-2 --form all`. Add `--variant key` to write only the key. **A Canvas quiz.** `coursebank export qti exam-2 --form A`. Add `--no-feedback` to leave per-option feedback out of the package. **A Markdown copy for a colleague to read.** `coursebank export md exam-2`. Add `--with-key` for the answers and rationales. **Restyle the printed output.** `coursebank template dump`, then edit `templates/exam.typ`. See [`typst_export`](crate::guide::typst_export). ## Ingest **Gradescope.** `coursebank ingest gradescope grading/exam-2/ --assessment exam-2`. Point it at the directory holding the per-question CSVs. **Canvas.** `coursebank ingest canvas export.csv --assessment exam-2`. The Student Analysis export, not the gradebook. **Keep student identities out of the repository.** `--pseudonymize --salt-file ~/.coursebank-salt`. Keep the salt outside the repository; the point of the salt is that hashed ids cannot be brute-forced over a class roster, which fails if the salt sits next to them. **Check a parse before writing.** `--dry-run`. ## Analysis | Question | Command | |:--|:--| | Which items misbehaved? | `analyze items --assessment exam-2` | | How hard is each item, on a common scale? | `analyze irt --assessment exam-2 --model 2pl` | | Which students are struggling, and with what? | `analyze students --assessment exam-2` | | What is in the store? | `data` | Pool across terms by passing the assessment id rather than one administration id. Twenty-four students supports very little; ninety-six across four terms supports something. ## Reports ```console $ coursebank report students --assessment exam-2 $ coursebank report cohort --assessment exam-2 ``` The student report omits correct answers, other students' data, and any rank. Hand it out without a second pass. ## After grading **An option turned out to be defensible.** Add `credit_overrides: {C: 0.5}` to the placement in the assessment record. Do not edit scores by hand, or item analysis sees different numbers than the students did. **An item was broken.** Add `dropped: true` to the placement. It leaves the scored matrix and is not printed on re-export, but the record of having asked it stays. **Statistics onto the items.** `coursebank calibrate --assessment exam-2`, read the diff, then `--apply`. ## Housekeeping **Editor validation stopped working.** `coursebank schema` rewrites the JSON Schemas. They ship with the binary, so an upgrade can leave them stale. **A pre-commit hook.** `coursebank validate && coursebank lint`. Exit code `2` means findings, `1` means the command failed, so a hook can treat them differently. **Build without Parquet.** `pixi run build-lean`. The response store falls back to CSV. Useful if you want a binary with a shorter dependency list; the tradeoff is slower reads on large stores.