{
  "schema_version": 1,
  "evidence_type": "synthetic/theoretical",
  "command": "python run.py",
  "passed": true,
  "checks": [
    {
      "id": "balance-normal_cycles",
      "description": "Reservoir volume balance",
      "expected": "Absolute residual < 1e-8 L",
      "observed": 8.162714948412031e-11,
      "passed": true,
      "method": "Integrate incoming, pumped, spilled and retained volume independently"
    },
    {
      "id": "dry-normal_cycles",
      "description": "Low level overrides both commands",
      "expected": false,
      "observed": false,
      "passed": true,
      "method": "Check every scan of the coupled reservoir/controller run"
    },
    {
      "id": "balance-assist_demand",
      "description": "Reservoir volume balance",
      "expected": "Absolute residual < 1e-8 L",
      "observed": -6.93574975230149e-10,
      "passed": true,
      "method": "Integrate incoming, pumped, spilled and retained volume independently"
    },
    {
      "id": "dry-assist_demand",
      "description": "Low level overrides both commands",
      "expected": false,
      "observed": false,
      "passed": true,
      "method": "Check every scan of the coupled reservoir/controller run"
    },
    {
      "id": "balance-lead_start_failure",
      "description": "Reservoir volume balance",
      "expected": "Absolute residual < 1e-8 L",
      "observed": -1.0786038728838321e-11,
      "passed": true,
      "method": "Integrate incoming, pumped, spilled and retained volume independently"
    },
    {
      "id": "dry-lead_start_failure",
      "description": "Low level overrides both commands",
      "expected": false,
      "observed": false,
      "passed": true,
      "method": "Check every scan of the coupled reservoir/controller run"
    },
    {
      "id": "balance-one_pump_unavailable",
      "description": "Reservoir volume balance",
      "expected": "Absolute residual < 1e-8 L",
      "observed": 1.382716163789155e-11,
      "passed": true,
      "method": "Integrate incoming, pumped, spilled and retained volume independently"
    },
    {
      "id": "dry-one_pump_unavailable",
      "description": "Low level overrides both commands",
      "expected": false,
      "observed": false,
      "passed": true,
      "method": "Check every scan of the coupled reservoir/controller run"
    },
    {
      "id": "balance-capacity_exceeded",
      "description": "Reservoir volume balance",
      "expected": "Absolute residual < 1e-8 L",
      "observed": 1.780335878720507e-10,
      "passed": true,
      "method": "Integrate incoming, pumped, spilled and retained volume independently"
    },
    {
      "id": "dry-capacity_exceeded",
      "description": "Low level overrides both commands",
      "expected": false,
      "observed": false,
      "passed": true,
      "method": "Check every scan of the coupled reservoir/controller run"
    },
    {
      "id": "balance-power_loss_restart_inhibit",
      "description": "Reservoir volume balance",
      "expected": "Absolute residual < 1e-8 L",
      "observed": 0.0,
      "passed": true,
      "method": "Integrate incoming, pumped, spilled and retained volume independently"
    },
    {
      "id": "dry-power_loss_restart_inhibit",
      "description": "Low level overrides both commands",
      "expected": false,
      "observed": false,
      "passed": true,
      "method": "Check every scan of the coupled reservoir/controller run"
    },
    {
      "id": "balance-attended_power_recovery",
      "description": "Reservoir volume balance",
      "expected": "Absolute residual < 1e-8 L",
      "observed": 1.1382894626876805e-11,
      "passed": true,
      "method": "Integrate incoming, pumped, spilled and retained volume independently"
    },
    {
      "id": "dry-attended_power_recovery",
      "description": "Low level overrides both commands",
      "expected": false,
      "observed": false,
      "passed": true,
      "method": "Check every scan of the coupled reservoir/controller run"
    },
    {
      "id": "balance-invalid_level_switches",
      "description": "Reservoir volume balance",
      "expected": "Absolute residual < 1e-8 L",
      "observed": -1.6484591469634324e-12,
      "passed": true,
      "method": "Integrate incoming, pumped, spilled and retained volume independently"
    },
    {
      "id": "dry-invalid_level_switches",
      "description": "Low level overrides both commands",
      "expected": false,
      "observed": false,
      "passed": true,
      "method": "Check every scan of the coupled reservoir/controller run"
    },
    {
      "id": "balance-running_feedback_loss",
      "description": "Reservoir volume balance",
      "expected": "Absolute residual < 1e-8 L",
      "observed": -1.06439301816863e-11,
      "passed": true,
      "method": "Integrate incoming, pumped, spilled and retained volume independently"
    },
    {
      "id": "dry-running_feedback_loss",
      "description": "Low level overrides both commands",
      "expected": false,
      "observed": false,
      "passed": true,
      "method": "Check every scan of the coupled reservoir/controller run"
    },
    {
      "id": "balance-short_feedback_dropout",
      "description": "Reservoir volume balance",
      "expected": "Absolute residual < 1e-8 L",
      "observed": -1.06439301816863e-11,
      "passed": true,
      "method": "Integrate incoming, pumped, spilled and retained volume independently"
    },
    {
      "id": "dry-short_feedback_dropout",
      "description": "Low level overrides both commands",
      "expected": false,
      "observed": false,
      "passed": true,
      "method": "Check every scan of the coupled reservoir/controller run"
    },
    {
      "id": "balance-manual_dry_interlock",
      "description": "Reservoir volume balance",
      "expected": "Absolute residual < 1e-8 L",
      "observed": 0.0,
      "passed": true,
      "method": "Integrate incoming, pumped, spilled and retained volume independently"
    },
    {
      "id": "dry-manual_dry_interlock",
      "description": "Low level overrides both commands",
      "expected": false,
      "observed": false,
      "passed": true,
      "method": "Check every scan of the coupled reservoir/controller run"
    },
    {
      "id": "normal-cycles",
      "description": "Automatic cycles alternate the lead",
      "expected": "At least 5 rotations and no spill",
      "observed": {
        "rotations": 7,
        "overflow_l": 0.0
      },
      "passed": true,
      "method": "600 s closed-loop run, 1 L/s inlet"
    },
    {
      "id": "assist-capacity",
      "description": "Two-pump demand stays within tank capacity",
      "expected": "No spill at 6 L/s",
      "observed": 0.0,
      "passed": true,
      "method": "Each proved pump removes 4 L/s"
    },
    {
      "id": "failed-lead",
      "description": "Failed start latches and standby clears demand",
      "expected": "START_TIMEOUT and no spill",
      "observed": "START_TIMEOUT",
      "passed": true,
      "method": "Suppress motor A start/feedback"
    },
    {
      "id": "maintenance",
      "description": "Available standby carries declared demand",
      "expected": "No spill",
      "observed": 0.0,
      "passed": true,
      "method": "Motor A unavailable, 1 L/s inlet"
    },
    {
      "id": "overload",
      "description": "Insufficient installed capacity is reported as adverse",
      "expected": "Positive spill at 9 L/s",
      "observed": 144.39999999998736,
      "passed": true,
      "method": "Demand exceeds both pumps combined; no automatic design acceptance"
    },
    {
      "id": "restart",
      "description": "Restored power does not cause an automatic restart",
      "expected": "Inhibited with positive spill",
      "observed": {
        "inhibited": true,
        "spill": 39.99999999999065
      },
      "passed": true,
      "method": "5 s interruption; no operator drain or reset follows"
    },
    {
      "id": "attended-recovery",
      "description": "Selected operating response restores service without spill",
      "expected": "No spill and inhibit cleared",
      "observed": {
        "case": "attended_power_recovery",
        "scan_s": 0.1,
        "max_volume_l": 119.99999999999746,
        "overflow_l": 0.0,
        "lead_rotations": 2,
        "latched_fault_a": "",
        "sensor_fault": false,
        "restart_inhibited": false,
        "dry_command": false,
        "volume_balance_error_l": 1.1382894626876805e-11,
        "high_level_reached": false
      },
      "passed": true,
      "method": "At 120 s isolate inlet and drain externally, reset at 133 s, reopen inlet at 134 s"
    },
    {
      "id": "sensor-fault",
      "description": "Impossible level ordering latches alarm",
      "expected": true,
      "observed": true,
      "passed": true,
      "method": "Force assist true while start false at 90 s"
    },
    {
      "id": "feedback-latch",
      "description": "Sustained feedback loss trips motor",
      "expected": "RUN_FEEDBACK_LOST",
      "observed": "RUN_FEEDBACK_LOST",
      "passed": true,
      "method": "Remove feedback after 90 s while flow can persist until command removal"
    },
    {
      "id": "feedback-debounce",
      "description": "Short feedback interruption does not trip",
      "expected": "No latched fault",
      "observed": "",
      "passed": true,
      "method": "0.4 s drop vs 1 s timer"
    },
    {
      "id": "timer-0.05",
      "description": "Start timeout includes scan quantization",
      "expected": "3 <= delay <= 3 + scan",
      "observed": 3.0000000000000004,
      "passed": true,
      "method": "Discrete scan-period sweep"
    },
    {
      "id": "timer-0.1",
      "description": "Start timeout includes scan quantization",
      "expected": "3 <= delay <= 3 + scan",
      "observed": 3.0,
      "passed": true,
      "method": "Discrete scan-period sweep"
    },
    {
      "id": "timer-0.25",
      "description": "Start timeout includes scan quantization",
      "expected": "3 <= delay <= 3 + scan",
      "observed": 3.0,
      "passed": true,
      "method": "Discrete scan-period sweep"
    },
    {
      "id": "refinement",
      "description": "Reservoir peak is stable when scan is halved",
      "expected": "Peak difference <= 0.5 L",
      "observed": 0.05000000000238458,
      "passed": true,
      "method": "Compare 50 and 100 ms scans; deterministic event model"
    }
  ],
  "source_sha256": {
    "completion_support.py": "7dd51b9e18187a82625b26144655e80aeac3b6a66a3e68e71a632d01d1844ec8",
    "controller.py": "a4c50d8c69e0aa14156f61e11a16f77943d43d32df5436f11ac94a8b4063b59c",
    "inputs.json": "af9345733c28fcc8322b30bd02ce33b2db844a6b8beac4c82cfe8c9f759bd547",
    "run.py": "7e221015e3e246a5399da74f31e7cf32bcfd70b6bdeb36e9771ea451dcc8246e",
    "support.py": "4641df314624a5baedfb535ef20f7e0f5e0e47332de3d35e413241e5eabb01f8",
    "test_controller.py": "1c748859d2dfd08a8217a7d4ef918f0dea46c40527234dcf7ad3e18c232795ce",
    "test_virtual_commissioning.py": "fe3753bfe7022f81604b182b7d4cb8dbd56ee0d93f016126479aac11aac6d547",
    "virtual_commissioning.py": "675da43f07945a9e4b6adbab2f3a157e1f60ddabde3ae63ff106747a7a9682d5"
  },
  "report": "virtual-validation.html",
  "limitations": [
    "This completes a virtual commissioning exercise. It does not assert PLC timing, switch debounce, contactor feedback, motor hydraulics, electrical protection, or field reliability.",
    "Constant flow and instantaneous stopping omit pump curves, inertia, pressure transients and stuck-on physical outputs. Independent electrical and process protections are not implemented by this supervisory state machine.",
    "High-level indication is recorded by the plant harness. It is not a new hardware alarm output or a claim of safe unattended operation."
  ]
}
