Document distractor enrichment workflow
This commit is contained in:
@@ -0,0 +1,95 @@
|
|||||||
|
# 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;
|
||||||
|
- 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.
|
||||||
@@ -124,6 +124,10 @@ distractors: record an exception instead of forcing a weak or co-correct
|
|||||||
answer. Do not expand production pools until the v2 exposure-statistics
|
answer. Do not expand production pools until the v2 exposure-statistics
|
||||||
backfill metric reports completion.
|
backfill metric reports completion.
|
||||||
|
|
||||||
|
See [QBANK_DISTRACTOR_ENRICHMENT_RUNBOOK.md](QBANK_DISTRACTOR_ENRICHMENT_RUNBOOK.md)
|
||||||
|
for the repeatable authoring, independent-audit, merge, and production
|
||||||
|
verification procedure.
|
||||||
|
|
||||||
## Duplicate Question Review
|
## Duplicate Question Review
|
||||||
|
|
||||||
Every question must be checked for duplicates before publication. This review
|
Every question must be checked for duplicates before publication. This review
|
||||||
|
|||||||
Reference in New Issue
Block a user