=== warm-baseline validation 2026-08-02 22:43:41  duty=40% window=50s threshold=13.7
  cycle 1/3  FLOW
    warmed to down=21.84 up=21.91 in 1.3 min
    base_up=22.07  down_rise=12.18  -> ok     CORRECT  (peak down 34.4 C)
  cycle 1/3  NO-FLOW
    warmed to down=22.46 up=21.84 in 1.0 min
    base_up=21.84  down_rise=18.16  -> FAULT  CORRECT  (peak down 40.4 C)
  cycle 2/3  FLOW
    warmed to down=21.84 up=22.07 in 1.0 min
    base_up=21.29  down_rise=12.75  -> ok     CORRECT  (peak down 34.5 C)
  cycle 2/3  NO-FLOW
    warmed to down=22.07 up=21.91 in 1.0 min
    base_up=21.45  down_rise=18.15  -> FAULT  CORRECT  (peak down 40.5 C)
  cycle 3/3  FLOW
    warmed to down=22.07 up=21.91 in 1.0 min
    base_up=21.60  down_rise=10.95  -> ok     CORRECT  (peak down 34.3 C)
  cycle 3/3  NO-FLOW
    warmed to down=22.30 up=22.30 in 1.0 min
    base_up=21.76  down_rise=17.85  -> FAULT  CORRECT  (peak down 40.4 C)

=== warm-baseline results (baselines 21.3 - 22.1 C)
  flow    n=3  mean 11.96  sd 0.92  max 12.75
  no-flow n=3  mean 18.06  sd 0.17  min 17.85
  worst-case margin: +5.11 C   threshold 13.7 sits +0.95 above flow max, +4.15 below no-flow min
  misclassified: 0 of 6
controller restarted
=== warm-baseline validation 2026-08-02 22:56:44  duty=40% window=50s threshold=13.7
  cycle 1/3  FLOW
    warmed to down=22.30 up=22.07 in 1.3 min
    base_up=22.23  down_rise=12.62  -> ok     CORRECT  (peak down 34.0 C)
  cycle 1/3  NO-FLOW
    warmed to down=22.23 up=21.84 in 1.0 min
    base_up=21.76  down_rise=18.71  -> FAULT  CORRECT  (peak down 40.6 C)
  cycle 2/3  FLOW
    warmed to down=22.30 up=22.07 in 1.0 min
    base_up=21.76  down_rise=11.03  -> ok     CORRECT  (peak down 34.3 C)
  cycle 2/3  NO-FLOW
    warmed to down=22.15 up=21.84 in 1.0 min
    base_up=21.37  down_rise=18.26  -> FAULT  CORRECT  (peak down 40.1 C)
  cycle 3/3  FLOW
    warmed to down=22.54 up=22.15 in 1.0 min
    base_up=21.99  down_rise=11.08  -> ok     CORRECT  (peak down 34.3 C)
  cycle 3/3  NO-FLOW
    warmed to down=22.07 up=21.84 in 1.0 min
    base_up=21.91  down_rise=18.42  -> FAULT  CORRECT  (peak down 40.5 C)

=== warm-baseline results (baselines 21.4 - 22.2 C)
  flow    n=3  mean 11.58  sd 0.91  max 12.62
  no-flow n=3  mean 18.46  sd 0.23  min 18.26
  worst-case margin: +5.63 C   threshold 13.7 sits +1.08 above flow max, +4.56 below no-flow min
  misclassified: 0 of 6
controller restarted
=== warm-baseline validation 2026-08-02 23:10:04  duty=40% window=50s threshold=13.7
  cycle 1/2  FLOW
    warm abort: downstream 51.95 at 0.5 min
    warmed to down=22.15 up=21.84 in 1.3 min
=== warm-baseline validation 2026-08-02 23:11:51  duty=40% window=50s threshold=13.7
  cycle 1/2  FLOW
    base_up=22.23  down_rise=15.53  -> FAULT  *** WRONG ***  (peak down 37.7 C)
  cycle 1/2  NO-FLOW
    warm abort: downstream 49.34 at 0.3 min
    warm target reached: up=25.84 at 0.8 min
    warmed to down=21.84 up=21.60 in 1.0 min
    warmed to down=22.15 up=22.07 in 1.6 min
    base_up=21.37  down_rise=10.69  -> ok     *** WRONG ***  (peak down 34.1 C)
  cycle 2/2  FLOW
    base_up=20.91  down_rise=11.48  -> ok     CORRECT  (peak down 34.4 C)
  cycle 1/2  NO-FLOW
      warming: 0.8 min  down=37.53  up=23.71
      warming: 0.8 min  down=38.17  up=24.65
      warming: 1.8 min  down=37.80  up=23.94
      warming: 1.8 min  down=37.99  up=24.50
    (warming plateaued at 24.18 C after 2.6 min)
      warming: 2.9 min  down=26.56  up=23.47
    (warming plateaued at 23.47 C after 2.9 min)
    warmed to down=21.68 up=21.60 in 3.4 min
    warmed to down=28.57 up=21.84 in 3.6 min
    base_up=21.37  down_rise=12.18  -> ok     *** WRONG ***  (peak down 34.1 C)
  cycle 2/2  FLOW
    base_up=21.91  down_rise=3.76  -> ok     CORRECT  (peak down 35.8 C)
  cycle 2/2  NO-FLOW
    warm abort: downstream 48.90 at 0.3 min
    warm target reached: up=25.68 at 0.5 min
    warmed to down=22.23 up=21.84 in 1.0 min
    warmed to down=21.29 up=21.68 in 1.3 min
    base_up=21.45  down_rise=11.58  -> ok     *** WRONG ***  (peak down 34.4 C)
    base_up=21.06  down_rise=11.30  -> ok     CORRECT  (peak down 34.2 C)
  cycle 2/2  NO-FLOW

=== warm-baseline results (baselines 21.4 - 22.2 C)
  flow    n=2  mean 9.65  sd 8.32  max 15.53
  no-flow n=2  mean 11.13  sd 0.63  min 10.69
  worst-case margin: -4.84 C   threshold 13.7 sits -1.83 above flow max, -3.01 below no-flow min
  misclassified: 3 of 4
controller restarted
      warming: 0.8 min  down=37.71  up=24.50
