July 12, 2026
Generated lab notebook from daily_summary, plan_journal, plan_delivery_log, and setpoint audit data. It is intentionally chronological and may include in-progress cycles before validation.
Planner Execution Ledger
Planner checkpoints can acknowledge that the active plan is still suitable without writing a new public plan ID. Those no-change decisions are part of the audit trail.
128
3
1
0
| Event | Delivered | Type | Status | Note |
|---|---|---|---|---|
| End-of-day review and reset | 00:16 | MIDNIGHT | plan_written | Wrote public plan iris-20260712-0016. Resolved 00:19 MDT. |
| Morning planning cycle | 05:43 | SUNRISE | plan_written | Wrote public plan iris-20260712-0543. Resolved 05:45 MDT. |
| Solar peak planning checkpoint | 13:08 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint | 13:10 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint | 13:12 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:14 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:16 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:18 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:20 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:22 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:24 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:26 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:28 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:30 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:32 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:34 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:36 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:38 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:40 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:42 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:44 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:46 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:48 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:50 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:52 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:54 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:55 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:57 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 13:59 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:01 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:03 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:05 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:07 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:09 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:11 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:13 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:15 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:17 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:19 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:21 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:23 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:25 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:27 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:29 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:31 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:33 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:35 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:37 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:39 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:41 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:43 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:44 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:46 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:48 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:50 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:52 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:54 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:56 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 14:58 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 15:00 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 15:02 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 15:04 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Solar peak planning checkpoint (catch-up) | 15:06 | SOLAR_MAX | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress | 15:08 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress | 15:10 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress | 15:11 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:13 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:15 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:18 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:20 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:22 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:24 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:26 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:28 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:30 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:32 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:34 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:35 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:37 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:39 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:41 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:43 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:45 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:47 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:49 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:51 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:53 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:54 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:56 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:58 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 15:59 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:01 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:03 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:05 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:07 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:09 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:10 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:12 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:14 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:16 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:18 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:20 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:22 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:24 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:26 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:28 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:29 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:31 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:33 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:35 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:37 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:39 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:41 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:44 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:46 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:48 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:50 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:52 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:54 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:55 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 16:57 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 17:00 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 17:02 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 17:04 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Peak Stress (catch-up) | 17:06 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Decline | 19:30 | TRANSITION | delivery_failed | Delivery recorded without a public plan write. |
| Decline | 19:32 | TRANSITION | acked | Acknowledged: Decline transition checked live climate/equipment/plan/setpoints. House is safe and near the sunset VPD edge (82.4F, VPD 1.27 kPa, dew margin 12.3F), all relays are off, and the active iris-20260712-0543 plan already holds guardrail-compatible evening moisture support with a scheduled taper at 21:30. No tunable change: raising mist/fog thresholds now would violate the observed-recovery rule because VPD has not stayed below the high edge yet. Resolved 19:33 MDT. |
| Evening planning cycle | 20:32 | SUNSET | plan_written | Wrote public plan iris-20260712-2032. Resolved 20:34 MDT. |
🌅 Morning Cycle (12:19 AM) — iris-20260712-0016
validated
4/10
band_track_fraction, cold_vent_guard_delta_f, cool_exit_hysteresis_f, cool_stage2_exit_hysteresis_f, cool_stage2_over_high_f, direct_wet_stress_latest_hour, direct_wet_stress_min_dew_margin_f, direct_wet_stress_vpd_margin_kpa ...
Reflection
Validating previous cycle: iris-20260711-0543
Previous hypothesis: SUNRISE plan for Saturday 2026-07-11. Previous completed recovery plan iris-20260710-1450 was evaluated at 5/10; anchor was unavailable because the scorecard/window rollup timed out. Yesterday’s complete scorecard is unavailable due db_statement_timeout, so diagnosis is degraded: from the 24h pattern and runtime, the limiting axis was VPD management during hot/dry ventilation, with heat stress becoming structurally limited during the afternoon ramp. Utility pressure was cooling/misting/lighting-driven rather than gas-driven: vent about 5h, fans about 3h each, fog 1.7h, water flowing 1.7h, heat1 only 1.3h. Today is an extreme clear hot-dry day: raw forecast 97F, RH 8%, VPD 5.48 kPa, solar 920 W/m2; bias-corrected VPD still exceeds 4 kPa. Current house is safe at 66.5F, VPD 0.68 kPa, dew margin 10.3F, IDLE, all relays off… Result: Completed midnight reset plan had degraded daily scorecard evidence, but window scorecard for its governed 5.4h shows poor climate outcome: house score about 0.226, compliance about 65.8, temp axis about 49.7, VPD axis about 36.1, with about 2.0h stress and VPD-high still the limiting axis. Safety and dew margin were acceptable, but the short overnight-to-dawn reset did not materially solve the dry edge before the next hot-dry ramp. The durable diagnosis remains: keep guardrail-compatible band-coupled moisture for live VPD-high and do not rely on clock-only taper while VPD recovery is incomplete. Score: 4/10
New finding: During extreme hot-dry sequences, midnight reset plans should not materially taper moisture posture unless observed VPD is already recovered and forecast-corrected dawn VPD risk is low; otherwise the next sunrise inherits dry-edge stress. → Added to Lessons Learned
Hypothesis
Testing: Guardrail-compatible extreme-day moisture posture: request band-relative values that the dispatcher can realize, then taper only after observed VPD recovery. Expected outcome: Dew margin remains above 8F with no condensation alerts; VPD-high stress still occurs under structural heat but house-too-dry alerts should be shorter/fewer than Saturday, and guardrail events should drop relative to the 305-event evaluated plan.
Conditions
100.0°F
11.0%
914.0 W/m²
5.0%
extreme clear hot-dry Sunday after Saturday guardrail-heavy VPD stress; forecast VPD has positive bias but corrected prior still shows severe dry ramp
Expected stress windows
restore full mist budget before ramp; keep moisture engage near vpd_high+0.05, all-zone near +0.20 to +0.25, fog escalation near 0.15 while gates allow
pre-cool and use VENTILATE wet/fog assist; accept physically limited heat when outdoor approaches 100F
repeat guardrail-compatible hot-dry moisture posture
aggressive pre-cool/wet assist and structural heat acceptance
Parameter rationale
avoid water-budget clipping during Sunday VPD recovery while dew margin stays above 8F
materialize near the active vpd_high+0.05 rather than requesting values that get held or clamped
bring all-zone rotation on around vpd_high+0.20 to +0.25 during persistent dry stress
use the 7x fog path during peak dry ventilation when dew/RH gates allow
increase effective wet duty during peak stress without relying on invalid band widening
Setpoints
Sunday July 12
Primary crop-band changes:
| Time | Values | Note |
|---|---|---|
| 00:16 | hyst 0.2125 | Midnight reset: current VPD is served and dew margin is safe |
| 03:30 | hyst 0.2175 | Pre-dawn: forecast VPD falls toward band; preserve leaf dryd |
| 06:30 | hyst 0.1825 | Sunrise ramp: restore full daily mist budget and reopen band |
| 09:00 | hyst 0.1725 | Dry ramp begins: prioritize controller-attributable VPD comp |
| 12:00 | hyst 0.16749999999999998 | Peak heat and VPD: use the lowest guardrail-compatible wet/f |
| 17:00 | hyst 0.1725 | Late peak after fog window closes: keep mister assist availa |
| 21:00 | hyst 0.1925 | Evening recovery: keep bounded wet assist for dry-air recove |
| 23:30 | hyst 0.2175 | Overnight taper for Monday pre-dawn; fog is clock-blocked an |
Tactical tunable changes:
| Time | Values | Note |
|---|---|---|
| 00:16 | s2 1.915; cool_exit 2.05; all_fans 0; dw_stress 0; dw_until 21; engage 1.3399999999999999; all 1.5699999999999998; pulse 30; gap 60; wt 1.3 | Midnight reset: current VPD is served and dew margin is safe |
| 03:30 | s2 1.93; cool_exit 2.14; all_fans 0; dw_stress 0; dw_until 21; engage 1.3699999999999999; all 1.62; pulse 30; gap 60; wt 1.2533333333333334 | Pre-dawn: forecast VPD falls toward band; preserve leaf dryd |
| 06:30 | s2 1.615; cool_exit 1.51; all_fans 0; dw_stress 0; dw_until 21; engage 1.29; all 1.47; pulse 33.75; gap 37.5; wt 1.6333333333333333 | Sunrise ramp: restore full daily mist budget and reopen band |
| 09:00 | s2 1.535; cool_exit 1.33; all_fans 0; dw_stress 1; dw_until 21; engage 1.27; all 1.47; pulse 37.5; gap 26.25; wt 1.7666666666666666 | Dry ramp begins: prioritize controller-attributable VPD comp |
| 12:00 | s2 1.4324999999999999; cool_exit 1.24; all_fans 0; dw_stress 1; dw_until 21; engage 1.27; all 1.42; pulse 41.25; gap 18.75; wt 1.8666666666666667 | Peak heat and VPD: use the lowest guardrail-compatible wet/f |
| 17:00 | s2 1.57; cool_exit 1.33; all_fans 0; dw_stress 1; dw_until 21; engage 1.27; all 1.47; pulse 37.5; gap 22.5; wt 1.7999999999999998 | Late peak after fog window closes: keep mister assist availa |
| 21:00 | s2 1.825; cool_exit 1.69; all_fans 0; dw_stress 0; dw_until 22; engage 1.32; all 1.52; pulse 30; gap 41.25; wt 1.5666666666666669 | Evening recovery: keep bounded wet assist for dry-air recove |
| 23:30 | s2 1.93; cool_exit 2.14; all_fans 0; dw_stress 0; dw_until 21; engage 1.3699999999999999; all 1.62; pulse 30; gap 60; wt 1.2666666666666666 | Overnight taper for Monday pre-dawn; fog is clock-blocked an |
Monday July 13
Primary crop-band changes:
| Time | Values | Note |
|---|---|---|
| 06:30 | hyst 0.1825 | Monday sunrise: repeat early band-coupled posture for anothe |
| 12:00 | hyst 0.16749999999999998 | Monday peak: structural heat likely; preserve wet/fog assist |
| 21:00 | hyst 0.1925 | Monday evening recovery: taper only after observed VPD falls |
Tactical tunable changes:
| Time | Values | Note |
|---|---|---|
| 06:30 | s2 1.615; cool_exit 1.51; all_fans 0; dw_stress 0; dw_until 21; engage 1.29; all 1.47; pulse 33.75; gap 37.5; wt 1.6333333333333333 | Monday sunrise: repeat early band-coupled posture for anothe |
| 12:00 | s2 1.4324999999999999; cool_exit 1.24; all_fans 0; dw_stress 1; dw_until 21; engage 1.27; all 1.42; pulse 41.25; gap 18.75; wt 1.8666666666666667 | Monday peak: structural heat likely; preserve wet/fog assist |
| 21:00 | s2 1.825; cool_exit 1.69; all_fans 0; dw_stress 0; dw_until 22; engage 1.32; all 1.52; pulse 30; gap 41.25; wt 1.5666666666666669 | Monday evening recovery: taper only after observed VPD falls |
Tuesday July 14
Primary crop-band changes:
| Time | Values | Note |
|---|---|---|
| 06:30 | hyst 0.1825 | Tuesday sunrise handoff: same hot-dry setup continues, with |
| 12:00 | hyst 0.16749999999999998 | Tuesday peak: maintain compliance-first hot-dry posture unde |
| 21:00 | hyst 0.20249999999999999 | End of 72h plan: begin evening resource taper while preservi |
Tactical tunable changes:
| Time | Values | Note |
|---|---|---|
| 06:30 | s2 1.615; cool_exit 1.51; all_fans 0; dw_stress 0; dw_until 21; engage 1.29; all 1.47; pulse 33.75; gap 37.5; wt 1.6333333333333333 | Tuesday sunrise handoff: same hot-dry setup continues, with |
| 12:00 | s2 1.4324999999999999; cool_exit 1.24; all_fans 0; dw_stress 1; dw_until 21; engage 1.27; all 1.42; pulse 41.25; gap 18.75; wt 1.8666666666666667 | Tuesday peak: maintain compliance-first hot-dry posture unde |
| 21:00 | s2 1.8699999999999999; cool_exit 1.87; all_fans 0; dw_stress 0; dw_until 22; engage 1.3399999999999999; all 1.5699999999999998; pulse 30; gap 52.5; wt 1.4333333333333333 | End of 72h plan: begin evening resource taper while preservi |
Changed secondary parameters:
| Time | Parameter | Change |
|---|---|---|
| 00:16 | band_track_fraction | initial 0 |
| 00:16 | cold_vent_guard_delta_f | initial 8 |
| 00:16 | cool_stage2_exit_hysteresis_f | initial 1 |
| 00:16 | direct_wet_stress_min_dew_margin_f | initial 8 |
| 00:16 | direct_wet_stress_vpd_margin_kpa | initial 0.12 |
| 00:16 | dwell_gate_ms | initial 285000 |
| 00:16 | enthalpy_close | initial 1 |
| 00:16 | enthalpy_open | initial -2 |
| 00:16 | fog_escalation_kpa | initial 0.35 |
| 00:16 | heat_hysteresis | initial 1 |
| 00:16 | min_fog_off_s | initial 108 |
| 00:16 | min_fog_on_s | initial 45.75 |
| 00:16 | mist_backoff_s | initial 600 |
| 00:16 | mist_max_closed_vent_s | initial 600 |
| 00:16 | mist_thermal_relief_s | initial 90 |
| 00:16 | mister_all_delay_s | initial 97.5 |
| 00:16 | mister_engage_delay_s | initial 48.75 |
| 00:16 | mister_water_budget_gal | initial 220 |
| 00:16 | night_vpd_bias_kpa | initial 0 |
| 00:16 | outdoor_staleness_max_s | initial 600 |
| 00:16 | sw_dwell_gate_enabled | initial 1 |
| 00:16 | sw_fog_closes_vent | initial 1 |
| 00:16 | sw_mister_closes_vent | initial 0 |
| 00:16 | sw_summer_vent_enabled | initial 1 |
| 00:16 | temp_hysteresis | initial 2.05 |
| 00:16 | vent_exchange_fraction | initial 0.3 |
| 00:16 | vent_prefer_dp_delta_f | initial 4 |
| 00:16 | vent_prefer_temp_delta_f | initial 4 |
| 00:16 | vpd_watch_dwell_s | initial 71.25 |
| 03:30 | direct_wet_stress_vpd_margin_kpa | 0.12 → 0.15 |
| 03:30 | dwell_gate_ms | 285000 → 300000 |
| 03:30 | fog_escalation_kpa | 0.35 → 0.4 |
| 03:30 | min_fog_off_s | 108 → 114 |
| 03:30 | min_fog_on_s | 45.75 → 43.5 |
| 03:30 | mister_all_delay_s | 97.5 → 102 |
| 03:30 | mister_engage_delay_s | 48.75 → 51 |
| 03:30 | temp_hysteresis | 2.05 → 2.14 |
| 03:30 | vpd_watch_dwell_s | 71.25 → 75 |
| 06:30 | cold_vent_guard_delta_f | 8 → 7 |
| 06:30 | direct_wet_stress_vpd_margin_kpa | 0.15 → 0.07 |
| 06:30 | dwell_gate_ms | 300000 → 195000 |
| 06:30 | fog_escalation_kpa | 0.4 → 0.2 |
| 06:30 | min_fog_off_s | 114 → 66 |
| 06:30 | min_fog_on_s | 43.5 → 61.5 |
| 06:30 | mister_all_delay_s | 102 → 70.5 |
| 06:30 | mister_engage_delay_s | 51 → 35.25 |
| 06:30 | mister_water_budget_gal | 220 → 300 |
| 06:30 | temp_hysteresis | 2.14 → 1.51 |
| 06:30 | vent_prefer_temp_delta_f | 4 → 3 |
| 06:30 | vpd_watch_dwell_s | 75 → 48.75 |
| 09:00 | direct_wet_stress_vpd_margin_kpa | 0.07 → 0.05 |
| 09:00 | dwell_gate_ms | 195000 → 165000 |
| 09:00 | fog_escalation_kpa | 0.2 → 0.15 |
| 09:00 | min_fog_off_s | 66 → 48 |
| 09:00 | min_fog_on_s | 61.5 → 68.25 |
| 09:00 | mister_all_delay_s | 70.5 → 61.5 |
| 09:00 | mister_engage_delay_s | 35.25 → 30.75 |
| 09:00 | temp_hysteresis | 1.51 → 1.33 |
| 09:00 | vpd_watch_dwell_s | 48.75 → 41.25 |
| 12:00 | dwell_gate_ms | 165000 → 150000 |
| 12:00 | min_fog_off_s | 48 → 36 |
| 12:00 | min_fog_on_s | 68.25 → 72.75 |
| 12:00 | mister_all_delay_s | 61.5 → 60 |
| 12:00 | mister_engage_delay_s | 30.75 → 30 |
| 12:00 | temp_hysteresis | 1.33 → 1.24 |
| 12:00 | vpd_watch_dwell_s | 41.25 → 37.5 |
| 17:00 | dwell_gate_ms | 150000 → 165000 |
| 17:00 | fog_escalation_kpa | 0.15 → 0.2 |
| 17:00 | min_fog_off_s | 36 → 42 |
| 17:00 | min_fog_on_s | 72.75 → 70.5 |
| 17:00 | mister_all_delay_s | 60 → 61.5 |
| 17:00 | mister_engage_delay_s | 30 → 30.75 |
| 17:00 | temp_hysteresis | 1.24 → 1.33 |
| 17:00 | vpd_watch_dwell_s | 37.5 → 41.25 |
| 21:00 | cold_vent_guard_delta_f | 7 → 8 |
| 21:00 | direct_wet_stress_vpd_margin_kpa | 0.05 → 0.1 |
| 21:00 | dwell_gate_ms | 165000 → 225000 |
| 21:00 | fog_escalation_kpa | 0.2 → 0.3 |
| 21:00 | min_fog_off_s | 42 → 72 |
| 21:00 | min_fog_on_s | 70.5 → 59.25 |
| 21:00 | mister_all_delay_s | 61.5 → 79.5 |
| 21:00 | mister_engage_delay_s | 30.75 → 39.75 |
| 21:00 | temp_hysteresis | 1.33 → 1.69 |
| 21:00 | vent_prefer_temp_delta_f | 3 → 4 |
| 21:00 | vpd_watch_dwell_s | 41.25 → 56.25 |
| 23:30 | direct_wet_stress_vpd_margin_kpa | 0.1 → 0.15 |
| 23:30 | dwell_gate_ms | 225000 → 300000 |
| 23:30 | fog_escalation_kpa | 0.3 → 0.4 |
| 23:30 | min_fog_off_s | 72 → 114 |
| 23:30 | min_fog_on_s | 59.25 → 43.5 |
| 23:30 | mister_all_delay_s | 79.5 → 102 |
| 23:30 | mister_engage_delay_s | 39.75 → 51 |
| 23:30 | mister_water_budget_gal | 300 → 240 |
| 23:30 | temp_hysteresis | 1.69 → 2.14 |
| 23:30 | vpd_watch_dwell_s | 56.25 → 75 |
| 06:30 | cold_vent_guard_delta_f | 8 → 7 |
| 06:30 | direct_wet_stress_vpd_margin_kpa | 0.15 → 0.07 |
| 06:30 | dwell_gate_ms | 300000 → 195000 |
| 06:30 | fog_escalation_kpa | 0.4 → 0.2 |
| 06:30 | min_fog_off_s | 114 → 66 |
| 06:30 | min_fog_on_s | 43.5 → 61.5 |
| 06:30 | mister_all_delay_s | 102 → 70.5 |
| 06:30 | mister_engage_delay_s | 51 → 35.25 |
| 06:30 | mister_water_budget_gal | 240 → 300 |
| 06:30 | temp_hysteresis | 2.14 → 1.51 |
| 06:30 | vent_prefer_temp_delta_f | 4 → 3 |
| 06:30 | vpd_watch_dwell_s | 75 → 48.75 |
| 12:00 | direct_wet_stress_vpd_margin_kpa | 0.07 → 0.05 |
| 12:00 | dwell_gate_ms | 195000 → 150000 |
| 12:00 | fog_escalation_kpa | 0.2 → 0.15 |
| 12:00 | min_fog_off_s | 66 → 36 |
| 12:00 | min_fog_on_s | 61.5 → 72.75 |
| 12:00 | mister_all_delay_s | 70.5 → 60 |
| 12:00 | mister_engage_delay_s | 35.25 → 30 |
| 12:00 | temp_hysteresis | 1.51 → 1.24 |
| 12:00 | vpd_watch_dwell_s | 48.75 → 37.5 |
| 21:00 | cold_vent_guard_delta_f | 7 → 8 |
| 21:00 | direct_wet_stress_vpd_margin_kpa | 0.05 → 0.1 |
| 21:00 | dwell_gate_ms | 150000 → 225000 |
| 21:00 | fog_escalation_kpa | 0.15 → 0.3 |
| 21:00 | min_fog_off_s | 36 → 72 |
| 21:00 | min_fog_on_s | 72.75 → 59.25 |
| 21:00 | mister_all_delay_s | 60 → 79.5 |
| 21:00 | mister_engage_delay_s | 30 → 39.75 |
| 21:00 | temp_hysteresis | 1.24 → 1.69 |
| 21:00 | vent_prefer_temp_delta_f | 3 → 4 |
| 21:00 | vpd_watch_dwell_s | 37.5 → 56.25 |
| 06:30 | cold_vent_guard_delta_f | 8 → 7 |
| 06:30 | direct_wet_stress_vpd_margin_kpa | 0.1 → 0.07 |
| 06:30 | dwell_gate_ms | 225000 → 195000 |
| 06:30 | fog_escalation_kpa | 0.3 → 0.2 |
| 06:30 | min_fog_off_s | 72 → 66 |
| 06:30 | min_fog_on_s | 59.25 → 61.5 |
| 06:30 | mister_all_delay_s | 79.5 → 70.5 |
| 06:30 | mister_engage_delay_s | 39.75 → 35.25 |
| 06:30 | temp_hysteresis | 1.69 → 1.51 |
| 06:30 | vent_prefer_temp_delta_f | 4 → 3 |
| 06:30 | vpd_watch_dwell_s | 56.25 → 48.75 |
| 12:00 | direct_wet_stress_vpd_margin_kpa | 0.07 → 0.05 |
| 12:00 | dwell_gate_ms | 195000 → 150000 |
| 12:00 | fog_escalation_kpa | 0.2 → 0.15 |
| 12:00 | min_fog_off_s | 66 → 36 |
| 12:00 | min_fog_on_s | 61.5 → 72.75 |
| 12:00 | mister_all_delay_s | 70.5 → 60 |
| 12:00 | mister_engage_delay_s | 35.25 → 30 |
| 12:00 | temp_hysteresis | 1.51 → 1.24 |
| 12:00 | vpd_watch_dwell_s | 48.75 → 37.5 |
| 21:00 | cold_vent_guard_delta_f | 7 → 8 |
| 21:00 | direct_wet_stress_vpd_margin_kpa | 0.05 → 0.12 |
| 21:00 | dwell_gate_ms | 150000 → 255000 |
| 21:00 | fog_escalation_kpa | 0.15 → 0.35 |
| 21:00 | min_fog_off_s | 36 → 90 |
| 21:00 | min_fog_on_s | 72.75 → 52.5 |
| 21:00 | mister_all_delay_s | 60 → 88.5 |
| 21:00 | mister_engage_delay_s | 30 → 44.25 |
| 21:00 | mister_water_budget_gal | 300 → 260 |
| 21:00 | temp_hysteresis | 1.24 → 1.87 |
| 21:00 | vent_prefer_temp_delta_f | 3 → 4 |
| 21:00 | vpd_watch_dwell_s | 37.5 → 63.75 |
🌅 Morning Cycle (5:45 AM) — iris-20260712-0543
validated
5/10
band_track_fraction, cold_vent_guard_delta_f, cool_exit_hysteresis_f, cool_stage2_exit_hysteresis_f, cool_stage2_over_high_f, direct_wet_stress_latest_hour, direct_wet_stress_min_dew_margin_f, direct_wet_stress_vpd_margin_kpa ...
Reflection
Validating previous cycle: iris-20260711-2031
Previous hypothesis: SUNSET overnight plan for Saturday 2026-07-11. Scorecard and window scorecards are degraded by db_statement_timeout, so this plan relies on live MCP climate, 24h pattern/runtime, forecast, alert state, and plan_evaluate. Previous plan iris-20260710-1456 self-score was 5/10 but deterministic anchor was 2 due 914 VPD-high guardrail events and 783 held events; the gap means I should not assume requested moisture values realized at the ESP32. Tonight is not a cold-night problem: forecast bottoms near 63F with clear sky and outdoor VPD falling from raw 3.06 to 0.86 kPa by sunrise. Current house is safe and in corridor at about 81.1F, VPD 1.08 kPa, RH 70%, dew margin 10.7F, IDLE. Main challenge is drying recovery without needless overnight water/fog/churn while preserving enough humidity for Vanda and preparing for another extreme hot-dry ramp Sunday… Result: SUNRISE feedback loop for 2026-07-12: daily scorecard call timed out (db_statement_timeout), so evaluation uses the assembled window scorecard, structured predicted-vs-actual block, alerts, water trend, and plan history. Safety and dew margin held, and the forecast shape was right: actual outdoor peak about 98.4F versus 98F predicted, severe clear hot-dry conditions, and solar peaked even higher than expected (1088 W/m2 versus 906). The bottleneck was VPD, not temperature: window scorecard for iris-20260712-0543 showed score about 0.617, compliance about 66.5, temp axis about 46.4, VPD axis about 34.1, heat stress about 6.0h and VPD-high stress about 7.7h. The plan correctly used guardrail-compatible wet/fog assist, but it did not reduce VPD-high enough; VPD stress alerts reached roughly 14-17h later in the day and water climbed to about 413 gal, so cooling plus fog/misting dominated cost rather than gas. The self-score is moderate because safety and material posture were appropriate, but the deterministic anchor should be treated as a warning that hot-dry physics plus guardrail/materialization limits still left substantial stress. Score: 5/10
New finding: On 98-100F July days with solar near or above 900 W/m2 and RH below 15%, band-coupled wet/fog assist is necessary but not sufficient; expect VPD-high to remain the limiting axis and keep evening recovery conditional on measured in-band VPD rather than clock time, while flagging shade/intake capacity as the durable hardware limit. → Added to Lessons Learned
Hypothesis
Testing: Guardrail-compatible persistence: keep wet/fog assist band-coupled through the dry evening instead of clock-only taper; success is fewer house-too-dry/vent-moisture-gap alerts and fewer guardrail-held events than yesterday. Expected outcome: Safety and dew margin remain good (dp margin >=8F); VPD-high stress persists but vent-moisture-gap alerts are reduced; guardrail-held events fall versus the 686-event sunset plan; water may approach the 300 gal practical cap because compliance has priority today.
Conditions
98.0°F
12.0%
906.0 W/m²
0.0%
clear extreme hot-dry July day; raw forecast VPD is positively biased but corrected prior still exceeds band from morning through evening
Expected stress windows
band-coupled S1 mist near vpd_high+0.05, all-zone near +0.25, fog escalation 0.15 while dew/RH/time gates allow
pre-cool, VENTILATE with fan stack and wet/fog assist; accept physically limited misses when outdoor approaches served high
repeat guardrail-compatible hot-dry moisture posture
same pre-cool and vent-mist/fog assist posture
continue aggressive moisture support; do not clock-unwind while evening VPD remains high
Parameter rationale
serve S1 mist near vpd_high+0.05 rather than holding conservative thresholds during live dry stress
bring all-zone rotation on around vpd_high+0.25 during persistent VPD-high
reduce house-too-dry and vent-moisture-gap alerts during peak stress while dew margin remains above 8F
increase wet duty at peak without changing crop bands or relying on invalid band widening
avoid budget clipping during peak VPD recovery
Setpoints
Sunday July 12
Primary crop-band changes:
| Time | Values | Note |
|---|---|---|
| 05:43 | hyst 0.19749999999999998 | Dawn is currently safe and served, but the dry ramp starts b |
| 08:30 | hyst 0.1875 | Morning ramp: solar and raw VPD rise quickly; pre-cool and m |
| 12:00 | hyst 0.1825 | Peak stress: 92-98F, RH teens, solar near 900 W/m2; complian |
| 17:30 | hyst 0.1925 | Decline remains hot and very dry; do not unwind wet assist o |
| 21:30 | hyst 0.20749999999999996 | Night taper is modest only: fog is clock-blocked, but outdoo |
Tactical tunable changes:
| Time | Values | Note |
|---|---|---|
| 05:43 | s2 1.7950000000000002; cool_exit 1.78; all_fans 0; dw_stress 0; dw_until 22; engage 1.3; all 1.47; pulse 30; gap 48.75; wt 1.4866666666666666 | Dawn is currently safe and served, but the dry ramp starts b |
| 08:30 | s2 1.6800000000000002; cool_exit 1.6; all_fans 0; dw_stress 0; dw_until 22; engage 1.27; all 1.47; pulse 33.75; gap 37.5; wt 1.6333333333333333 | Morning ramp: solar and raw VPD rise quickly; pre-cool and m |
| 12:00 | s2 1.6150000000000002; cool_exit 1.51; all_fans 0; dw_stress 1; dw_until 22; engage 1.27; all 1.44; pulse 37.5; gap 30; wt 1.7333333333333334 | Peak stress: 92-98F, RH teens, solar near 900 W/m2; complian |
| 17:30 | s2 1.715; cool_exit 1.69; all_fans 0; dw_stress 0; dw_until 22; engage 1.27; all 1.47; pulse 33.75; gap 37.5; wt 1.6333333333333333 | Decline remains hot and very dry; do not unwind wet assist o |
| 21:30 | s2 1.8775000000000002; cool_exit 1.96; all_fans 0; dw_stress 0; dw_until 22; engage 1.3; all 1.5; pulse 30; gap 56.25; wt 1.42 | Night taper is modest only: fog is clock-blocked, but outdoo |
Monday July 13
Primary crop-band changes:
| Time | Values | Note |
|---|---|---|
| 08:00 | hyst 0.1825 | Monday repeats the extreme hot-dry pattern; keep the same gu |
| 21:30 | hyst 0.20749999999999996 | Monday night stays dry; taper water and churn but keep VPD r |
Tactical tunable changes:
| Time | Values | Note |
|---|---|---|
| 08:00 | s2 1.6325; cool_exit 1.51; all_fans 0; dw_stress 1; dw_until 22; engage 1.27; all 1.44; pulse 37.5; gap 30; wt 1.7333333333333334 | Monday repeats the extreme hot-dry pattern; keep the same gu |
| 21:30 | s2 1.8775000000000002; cool_exit 1.96; all_fans 0; dw_stress 0; dw_until 22; engage 1.3; all 1.5; pulse 30; gap 56.25; wt 1.42 | Monday night stays dry; taper water and churn but keep VPD r |
Tuesday July 14
Primary crop-band changes:
| Time | Values | Note |
|---|---|---|
| 08:00 | hyst 0.1825 | Tuesday is forecast near 100F with RH near 11%; hold peak ho |
Tactical tunable changes:
| Time | Values | Note |
|---|---|---|
| 08:00 | s2 1.6150000000000002; cool_exit 1.51; all_fans 0; dw_stress 1; dw_until 22; engage 1.27; all 1.44; pulse 37.5; gap 30; wt 1.7333333333333334 | Tuesday is forecast near 100F with RH near 11%; hold peak ho |
Changed secondary parameters:
| Time | Parameter | Change |
|---|---|---|
| 05:43 | band_track_fraction | initial 0 |
| 05:43 | cold_vent_guard_delta_f | initial 8 |
| 05:43 | cool_stage2_exit_hysteresis_f | initial 1 |
| 05:43 | direct_wet_stress_min_dew_margin_f | initial 8 |
| 05:43 | direct_wet_stress_vpd_margin_kpa | initial 0.08 |
| 05:43 | dwell_gate_ms | initial 240000 |
| 05:43 | enthalpy_close | initial 1 |
| 05:43 | enthalpy_open | initial -2 |
| 05:43 | fog_escalation_kpa | initial 0.25 |
| 05:43 | heat_hysteresis | initial 1 |
| 05:43 | min_fog_off_s | initial 84 |
| 05:43 | min_fog_on_s | initial 54.75 |
| 05:43 | mist_backoff_s | initial 600 |
| 05:43 | mist_max_closed_vent_s | initial 600 |
| 05:43 | mist_thermal_relief_s | initial 90 |
| 05:43 | mister_all_delay_s | initial 84 |
| 05:43 | mister_engage_delay_s | initial 42 |
| 05:43 | mister_water_budget_gal | initial 300 |
| 05:43 | night_vpd_bias_kpa | initial 0 |
| 05:43 | outdoor_staleness_max_s | initial 600 |
| 05:43 | sw_dwell_gate_enabled | initial 1 |
| 05:43 | sw_fog_closes_vent | initial 1 |
| 05:43 | sw_mister_closes_vent | initial 0 |
| 05:43 | sw_summer_vent_enabled | initial 1 |
| 05:43 | temp_hysteresis | initial 1.78 |
| 05:43 | vent_exchange_fraction | initial 0.3 |
| 05:43 | vent_prefer_dp_delta_f | initial 3 |
| 05:43 | vent_prefer_temp_delta_f | initial 4 |
| 05:43 | vpd_watch_dwell_s | initial 60 |
| 08:30 | direct_wet_stress_vpd_margin_kpa | 0.08 → 0.05 |
| 08:30 | dwell_gate_ms | 240000 → 210000 |
| 08:30 | fog_escalation_kpa | 0.25 → 0.15 |
| 08:30 | min_fog_off_s | 84 → 66 |
| 08:30 | min_fog_on_s | 54.75 → 61.5 |
| 08:30 | mister_all_delay_s | 84 → 75 |
| 08:30 | mister_engage_delay_s | 42 → 37.5 |
| 08:30 | temp_hysteresis | 1.78 → 1.6 |
| 08:30 | vpd_watch_dwell_s | 60 → 52.5 |
| 12:00 | dwell_gate_ms | 210000 → 195000 |
| 12:00 | min_fog_off_s | 66 → 54 |
| 12:00 | min_fog_on_s | 61.5 → 66 |
| 12:00 | mister_all_delay_s | 75 → 70.5 |
| 12:00 | mister_engage_delay_s | 37.5 → 35.25 |
| 12:00 | temp_hysteresis | 1.6 → 1.51 |
| 12:00 | vpd_watch_dwell_s | 52.5 → 48.75 |
| 17:30 | dwell_gate_ms | 195000 → 225000 |
| 17:30 | fog_escalation_kpa | 0.15 → 0.2 |
| 17:30 | min_fog_off_s | 54 → 66 |
| 17:30 | min_fog_on_s | 66 → 61.5 |
| 17:30 | mister_all_delay_s | 70.5 → 79.5 |
| 17:30 | mister_engage_delay_s | 35.25 → 39.75 |
| 17:30 | temp_hysteresis | 1.51 → 1.69 |
| 17:30 | vpd_watch_dwell_s | 48.75 → 56.25 |
| 21:30 | direct_wet_stress_vpd_margin_kpa | 0.05 → 0.08 |
| 21:30 | dwell_gate_ms | 225000 → 270000 |
| 21:30 | fog_escalation_kpa | 0.2 → 0.3 |
| 21:30 | min_fog_off_s | 66 → 96 |
| 21:30 | min_fog_on_s | 61.5 → 50.25 |
| 21:30 | mister_all_delay_s | 79.5 → 93 |
| 21:30 | mister_engage_delay_s | 39.75 → 46.5 |
| 21:30 | mister_water_budget_gal | 300 → 260 |
| 21:30 | temp_hysteresis | 1.69 → 1.96 |
| 21:30 | vpd_watch_dwell_s | 56.25 → 67.5 |
| 08:00 | direct_wet_stress_vpd_margin_kpa | 0.08 → 0.05 |
| 08:00 | dwell_gate_ms | 270000 → 195000 |
| 08:00 | fog_escalation_kpa | 0.3 → 0.15 |
| 08:00 | min_fog_off_s | 96 → 54 |
| 08:00 | min_fog_on_s | 50.25 → 66 |
| 08:00 | mister_all_delay_s | 93 → 70.5 |
| 08:00 | mister_engage_delay_s | 46.5 → 35.25 |
| 08:00 | mister_water_budget_gal | 260 → 300 |
| 08:00 | temp_hysteresis | 1.96 → 1.51 |
| 08:00 | vpd_watch_dwell_s | 67.5 → 48.75 |
| 21:30 | direct_wet_stress_vpd_margin_kpa | 0.05 → 0.08 |
| 21:30 | dwell_gate_ms | 195000 → 270000 |
| 21:30 | fog_escalation_kpa | 0.15 → 0.3 |
| 21:30 | min_fog_off_s | 54 → 96 |
| 21:30 | min_fog_on_s | 66 → 50.25 |
| 21:30 | mister_all_delay_s | 70.5 → 93 |
| 21:30 | mister_engage_delay_s | 35.25 → 46.5 |
| 21:30 | mister_water_budget_gal | 300 → 260 |
| 21:30 | temp_hysteresis | 1.51 → 1.96 |
| 21:30 | vpd_watch_dwell_s | 48.75 → 67.5 |
| 08:00 | direct_wet_stress_vpd_margin_kpa | 0.08 → 0.05 |
| 08:00 | dwell_gate_ms | 270000 → 195000 |
| 08:00 | fog_escalation_kpa | 0.3 → 0.15 |
| 08:00 | min_fog_off_s | 96 → 54 |
| 08:00 | min_fog_on_s | 50.25 → 66 |
| 08:00 | mister_all_delay_s | 93 → 70.5 |
| 08:00 | mister_engage_delay_s | 46.5 → 35.25 |
| 08:00 | mister_water_budget_gal | 260 → 300 |
| 08:00 | temp_hysteresis | 1.96 → 1.51 |
| 08:00 | vpd_watch_dwell_s | 67.5 → 48.75 |
🌆 Evening Cycle (8:34 PM) — iris-20260712-2032
validated
5/10
band_track_fraction, cold_vent_guard_delta_f, cool_exit_hysteresis_f, cool_stage2_exit_hysteresis_f, cool_stage2_over_high_f, direct_wet_stress_latest_hour, direct_wet_stress_min_dew_margin_f, direct_wet_stress_vpd_margin_kpa ...
Reflection
Validating previous cycle: iris-20260712-0543
Previous hypothesis: SUNRISE plan for Sunday 2026-07-12. Yesterday/window scorecards are degraded by db_statement_timeout, and semantic retrieval is degraded because OPENAI_API_KEY is missing, so this plan is grounded in assembled context, live MCP climate/equipment, alerts, active lessons, and the 18h/72h forecast. I evaluated iris-20260711-2031 at 4/10, but the deterministic anchor was 1 because 686 VPD-high guardrail events and 650 held-by-guardrail events show the requested taper was poorly realized; the gap means I should privilege guardrail-compatible band-coupled values today instead of assuming the ESP32 received conservative overnight/resource values. Current house is safe and served: about 69F, VPD 0.79 kPa, RH 67%, dew margin 11.3F, IDLE, all equipment off. Today through Tuesday is an extreme hot-dry sequence near 97-100F, RH 10-14%, solar 850-930 W/m2… Result: Sunset recovery plan governed roughly 3.7h before midnight reset. Daily scorecard remains unavailable due db_statement_timeout and the window scorecard row is degraded/zeroed, so this evaluation uses live MCP climate/equipment, alerts, current setpoints, and guardrail audit. Safety and dew margin were good: at midnight house is about 74.1F, VPD 1.07 kPa against current high about 1.22, RH 62%, dew margin 13.8F; heaters are off, vent and both fans are cooling, fog/misters off. The plan’s expected overnight no-cold-stress and low-value water reduction goals were mostly met, and VPD recovered near/inside the served corridor by the reset. Miss: VPD stress alerts continued after plan start from about 20:38 through 22:43, reaching 17.3h for the day, so the evening recovery was late/incomplete. Guardrail audit also shows the plan requested some moisture taper values that were guardrailed or held, so not all requested posture reached firmware exactly. Overall: safe and partially successful resource recovery, but VPD-high remained the limiting axis and clock/resource taper still needs to be conditional on measured recovery. Score: 5/10
New finding: After an extreme hot-dry day, a sunset taper can conserve water only after observed house VPD is inside the served band for a sustained period; if VPD stress alerts continue after sunset, keep guardrail-compatible wet assist available until measured recovery, then taper modestly overnight. → Added to Lessons Learned
Hypothesis
Testing: Sunset recovery taper with guardrail-compatible fallback: preserve nonzero evening dry-edge mist, conserve after midnight, and automatically reopen hot-dry posture at 08:00 if the next sunrise cycle is delayed. Expected outcome: Dew margin remains >=8F overnight, no cold-stress response is needed, overnight water/churn falls versus the 364 gal daytime total, VPD remains near/inside the served corridor by pre-dawn, and Monday morning has full moisture/fog availability before the 100F dry ramp.
Conditions
100.0°F
11.0%
911.0 W/m²
3.0%
warm dry Sunday night after extreme hot-dry day; Monday forecast repeats near 100F, RH 11-15%, solar near 900 W/m2. Forecast VPD has a known positive bias, but corrected VPD remains severe by midday.
Expected stress windows
keep evening moisture engage near vpd_high+0.05 and all-zone near +0.25 while dew margin is safe; avoid clock-only closure before observed recovery
morning fallback restores engage near vpd_high+0.05, all-zone near +0.22, fog escalation 0.15, full 300 gal budget
pre-cool lead time 45 min, solar precool gain 1.5, wet/fog assist during VENTILATE; accept physics-limited misses near 100F
Parameter rationale
avoid suppressing S1 mist during live dry-edge recovery while still tapering after midnight
keep all-zone assist available near vpd_high+0.22 to +0.25 during evening and Monday ramp
make fog available during severe dry ventilation if sunrise cycle is delayed, while overnight fog remains clock-blocked
avoid adding relay/water churn overnight while preserving enough duty during dry-edge recovery
reduce low-value overnight water while restoring 300 gal for Monday peak stress at 08:00
Setpoints
Sunday July 12
Primary crop-band changes:
| Time | Values | Note |
|---|---|---|
| 20:32 | hyst 0.1875 | evening_settle: VPD is just inside house band but east is st |
Tactical tunable changes:
| Time | Values | Note |
|---|---|---|
| 20:32 | s2 1.87; cool_exit 1.6; all_fans 0; dw_stress 1; dw_until 21; engage 1.27; all 1.47; pulse 33.75; gap 41.25; wt 1.7 | evening_settle: VPD is just inside house band but east is st |
Monday July 13
Primary crop-band changes:
| Time | Values | Note |
|---|---|---|
| 00:30 | hyst 0.1875 | midnight_posture: no cold risk and humidity should hold when |
| 05:30 | hyst 0.1875 | pre_dawn: forecast minimum is near 64F, so heating cost is n |
| 08:00 | hyst 0.1875 | morning_ramp_fallback: Monday forecast reaches about 100F, R |
| 21:30 | hyst 0.1875 | next_evening_recovery: Monday evening remains hot and very d |
Tactical tunable changes:
| Time | Values | Note |
|---|---|---|
| 00:30 | s2 1.905; cool_exit 1.6; all_fans 0; dw_stress 1; dw_until 21; engage 1.27; all 1.47; pulse 33.75; gap 41.25; wt 1.7 | midnight_posture: no cold risk and humidity should hold when |
| 05:30 | s2 1.8175000000000001; cool_exit 1.6; all_fans 0; dw_stress 1; dw_until 21; engage 1.27; all 1.47; pulse 33.75; gap 41.25; wt 1.7 | pre_dawn: forecast minimum is near 64F, so heating cost is n |
| 08:00 | s2 1.6125; cool_exit 1.6; all_fans 0; dw_stress 1; dw_until 21; engage 1.27; all 1.44; pulse 36; gap 33.75; wt 1.7 | morning_ramp_fallback: Monday forecast reaches about 100F, R |
| 21:30 | s2 1.8875; cool_exit 1.6; all_fans 0; dw_stress 1; dw_until 21; engage 1.27; all 1.47; pulse 33.75; gap 41.25; wt 1.7 | next_evening_recovery: Monday evening remains hot and very d |
Changed secondary parameters:
| Time | Parameter | Change |
|---|---|---|
| 20:32 | band_track_fraction | initial 0 |
| 20:32 | cold_vent_guard_delta_f | initial 8 |
| 20:32 | cool_stage2_exit_hysteresis_f | initial 1 |
| 20:32 | direct_wet_stress_min_dew_margin_f | initial 8 |
| 20:32 | direct_wet_stress_vpd_margin_kpa | initial 0.05 |
| 20:32 | dwell_gate_ms | initial 210000 |
| 20:32 | enthalpy_close | initial 1 |
| 20:32 | enthalpy_open | initial -2 |
| 20:32 | fog_escalation_kpa | initial 0.25 |
| 20:32 | heat_hysteresis | initial 1 |
| 20:32 | min_fog_off_s | initial 72 |
| 20:32 | min_fog_on_s | initial 59.25 |
| 20:32 | mist_backoff_s | initial 600 |
| 20:32 | mist_max_closed_vent_s | initial 600 |
| 20:32 | mist_thermal_relief_s | initial 90 |
| 20:32 | mister_all_delay_s | initial 75 |
| 20:32 | mister_engage_delay_s | initial 37.5 |
| 20:32 | mister_water_budget_gal | initial 240 |
| 20:32 | night_vpd_bias_kpa | initial 0 |
| 20:32 | outdoor_staleness_max_s | initial 600 |
| 20:32 | sw_dwell_gate_enabled | initial 1 |
| 20:32 | sw_fog_closes_vent | initial 1 |
| 20:32 | sw_mister_closes_vent | initial 0 |
| 20:32 | sw_summer_vent_enabled | initial 1 |
| 20:32 | temp_hysteresis | initial 1.6 |
| 20:32 | vent_exchange_fraction | initial 0.3 |
| 20:32 | vent_prefer_dp_delta_f | initial 3 |
| 20:32 | vent_prefer_temp_delta_f | initial 4 |
| 20:32 | vpd_watch_dwell_s | initial 52.5 |
| 00:30 | cold_vent_guard_delta_f | 8 → 9 |
| 00:30 | mister_water_budget_gal | 240 → 220 |
| 00:30 | vent_prefer_dp_delta_f | 3 → 4 |
| 00:30 | vent_prefer_temp_delta_f | 4 → 5 |
| 05:30 | cold_vent_guard_delta_f | 9 → 8 |
| 05:30 | mister_water_budget_gal | 220 → 240 |
| 05:30 | vent_prefer_dp_delta_f | 4 → 3 |
| 05:30 | vent_prefer_temp_delta_f | 5 → 4 |
| 08:00 | fog_escalation_kpa | 0.25 → 0.15 |
| 08:00 | min_fog_off_s | 72 → 60 |
| 08:00 | min_fog_on_s | 59.25 → 63.75 |
| 08:00 | mister_water_budget_gal | 240 → 300 |
| 21:30 | fog_escalation_kpa | 0.15 → 0.25 |
| 21:30 | min_fog_off_s | 60 → 72 |
| 21:30 | min_fog_on_s | 63.75 → 59.25 |
| 21:30 | mister_water_budget_gal | 300 → 240 |
End-of-Day Summary
Climate
68.3–91.8°F; avg 77.9°F
0.78–3.06 kPa; avg 1.34 kPa
38.2–74.4%
Interior Light Evidence
- Crop DLI: unavailable
- Reason:
source_reading_missing - Provenance:
legacy_invalid_exterior_proxy_plus_fixture_estimate - Validity:
dli-validity-v1; 2024-01-01T00:00:00+00:00 → open - Qualified-light minutes and photoperiod remain independent of unavailable DLI.
Stress Hours
- Heat stress (>85°F): 5.0h
- VPD stress (>2.0 kPa): 10.3h
- Cold stress (<55°F): 8.2h
Economics
USD —
USD 0.00
USD —
USD —
Equipment Runtimes
| Equipment | Runtime | Reading |
|---|---|---|
| Fan 1 | 657 min | Primary exhaust runtime. |
| Fan 2 | 666 min | Secondary exhaust runtime. |
| Vent | 834 min | Intake vent runtime. |
| Fog | 440 min | Fogger runtime. |
| Heat 1 electric | 0 min | Electric heater runtime. |
| Heat 2 gas | 0 min | Gas heater runtime. |
| Grow lights | 639 min | Supplemental lighting runtime. |
| Mister south | 0.00h | South mister runtime. |
| Mister west | 0.00h | West mister runtime. |
| Mister center | 2.01h | Center mister runtime. |
Hourly Pattern
| Hour | Temperature | VPD | RH |
|---|---|---|---|
| 12:00 | 82.5°F | 1.26 kPa | 67.2% |
| 13:00 | 83.7°F | 1.41 kPa | 65.7% |
| 14:00 | 85.4°F | 1.71 kPa | 60.9% |
| 15:00 | 87.0°F | 1.94 kPa | 57.0% |
| 16:00 | 85.4°F | 1.65 kPa | 61.5% |
| 17:00 | 83.7°F | 1.34 kPa | 66.6% |
| 18:00 | 83.0°F | 1.29 kPa | 66.8% |
| 19:00 | 81.8°F | 1.17 kPa | 68.7% |
| 20:00 | 80.5°F | 1.21 kPa | 66.0% |
| 21:00 | 79.7°F | 1.95 kPa | 44.0% |
| 22:00 | 78.4°F | 1.80 kPa | 45.7% |
| 23:00 | 76.1°F | 1.60 kPa | 48.2% |
| 00:00 | 72.7°F | 1.16 kPa | 58.2% |
| 01:00 | 71.1°F | 1.11 kPa | 57.6% |
| 02:00 | 70.1°F | 1.16 kPa | 54.1% |
| 03:00 | 68.9°F | 1.16 kPa | 52.1% |
| 04:00 | 68.7°F | 1.03 kPa | 56.9% |
| 05:00 | 69.2°F | 0.82 kPa | 66.2% |
| 06:00 | 70.6°F | 0.91 kPa | 64.8% |
| 07:00 | 72.6°F | 0.93 kPa | 66.2% |
| 08:00 | 74.4°F | 0.99 kPa | 66.0% |
| 09:00 | 77.4°F | 1.12 kPa | 65.4% |
| 10:00 | 79.6°F | 1.12 kPa | 68.0% |
| 11:00 | 81.2°F | 1.18 kPa | 67.9% |
7-Day Stress Context
| Date | Heat | VPD high | Cold |
|---|---|---|---|
| 2026-07-06 | 2.5h | 8.6h | 0.0h |
| 2026-07-07 | 0.8h | 12.5h | 0.0h |
| 2026-07-08 | 3.4h | 9.0h | 0.0h |
| 2026-07-09 | 0.5h | 4.6h | 0.0h |
| 2026-07-10 | 2.4h | 3.8h | 1.0h |
| 2026-07-11 | 3.8h | 9.0h | 9.2h |
| 2026-07-12 | 5.1h | 10.3h | 8.2h |