Files
step3/QBANK_DISTRACTOR_ENRICHMENT_RUNBOOK.md
2026-07-13 22:32:31 -05:00

98 lines
4.3 KiB
Markdown

# Question Bank Distractor Enrichment Runbook
Use this process to expand existing questions beyond five choices. The goal is
to retain every clinically useful distractor, not to reach a fixed pool size.
## Preconditions
- Confirm `step3_answer_statistics_v2_backfill_complete 1` on every API pod.
- Export the full bank through `GET /api/questions/admin/export` with a SUPER
token held only in memory.
- Keep the export as the immutable baseline for post-write comparison.
- Do not change original choices, correct-answer IDs, stems, or explanations.
## Authoring Pass
For each question, ask an authoring model to explore all natural misconception
categories supported by the exact stem. Require every proposed distractor to
include:
- a distinct, plausible answer at the same granularity as existing choices;
- an explanation of why it is wrong for this patient;
- a wrong-answer follow-up with exactly three unique A-C choices;
- a keyed follow-up fact stated explicitly or nearly explicitly in the stem;
- direct authoritative references for medical claims.
Do not specify a desired number. Zero candidates is valid when no additional
answer can be made both plausible and unambiguously wrong.
## Independent Audit
Use a separate model context to evaluate every candidate individually. Approve
only candidates that are deceptive to a Step 3 learner, materially distinct,
and unambiguously wrong under the exact vignette. Reject remote or absurd
actions, padding, duplicate concepts, contrived sequencing language,
conditionally correct answers, unsupported claims, and follow-ups whose keyed
fact does not specifically defeat the distractor.
The auditor should identify missing natural misconception categories without
imposing a numerical quota. Run focused generation and an independent audit for
those gaps. If a requested category cannot produce an unambiguously wrong
option, record a quality waiver instead of forcing it into the bank.
## Merge Validation
Append approved candidates and assign stable choice IDs sequentially after the
existing IDs. For each question, verify:
- 5-20 unique choice IDs and case-insensitively unique choice text;
- the original correct-answer ID and original choices are unchanged;
- `choiceExplanations` has exactly one entry per choice;
- `wrongAnswerFollowups` has exactly one entry per incorrect choice and none
for the correct choice;
- every follow-up has exactly A-C choices and a valid keyed answer;
- new `choiceSelectionPercentages` entries start at zero;
- authoritative sources supporting approved additions are merged into the
question's `references` array without duplicating existing URLs;
- no unresolved coverage issue remains unless documented as a waiver.
Deserialize the payload as `BulkUpsertQuestionsRequest` and run the actual
server `QuestionValidator.Validate` method against every question before upload.
## Upload And Verification
Split validated JSON with a UTF-8-aware tool such as Node. Do not parse a
UTF-8-without-BOM payload using Windows PowerShell `Get-Content`; it can silently
corrupt non-ASCII clinical text. Upload exact batch files with
`Content-Type: application/json; charset=utf-8`.
After upload:
1. Export the complete production bank again.
2. Compare stored choices, correct IDs, explanations, and follow-ups exactly.
3. Compare every original correct ID and choice list with the baseline.
4. Confirm pool-aware search returns full pools with the correct answer.
5. Confirm legacy search returns exactly five choices with the correct answer.
6. Remove temporary prompts, exports, tokens, batches, and model output.
## 2026-07-13 Run
- Questions reviewed: 349
- Additional distractors approved: 1,113
- Final choices: 2,857
- Final pool range: 5-17 choices
- Questions retaining no additional distractor after audit: 28
- Focused coverage repairs approved: 16
- Quality waivers: 3
- Server validator: 349/349 passed
- Production exact comparison: 349/349 passed
- Live pool-aware sample: 38/40 had more than five choices; all included the
correct answer
- Live legacy sample: 40/40 returned five choices and included the correct
answer
The quality waivers covered severe hypercalcemia antiresorptive therapy,
residual gastric-cancer risk after *H pylori* eradication, and unspecified oral
antifungal toxicity. In each case, forcing the category would have created a
co-correct or otherwise ambiguous option.