April 19, 2026
Generated lab notebook from daily_summary, plan_journal, and setpoint audit data. It is intentionally chronological and may include in-progress cycles before validation.
🌅 Morning Cycle (12:25 AM) — iris-20260419-0022
validated
3/10
none recorded
Result: Plan ran unmodified 18+ hours (00:22 → 19:06 MDT) with no intraday replanning. Scorecard: 25.5 score, 17.8% compliance, 14.4h cold stress (structural — crop band alignment per lesson #6), 4.2h heat stress, 4.5h VPD high stress. Cost USD 6.53 (above 7d avg USD 6.07). Evening vpd_high=0.60 proved too aggressive — drove south zone to 0.08 VPD near condensation risk. DP margin min was 4.3°F (below 5°F target). Leak alerts fired multiple times during afternoon misting. Setpoint unconfirmed alerts for vpd_target params persisted for hours — indicates ESP32 was not accepting zone-specific VPD targets pushed by the planner.
Reflection
Validating previous cycle: iris-20260418-0929
Previous hypothesis: Forecast update — Monday coverage gap. Current plan ends Mon 00:00 with overnight defaults, but Monday is the hardest day: 80°F/8% RH outdoor (VPD 3.21 kPa at 3 PM). Worse than Sunday’s 71°F/5%. Saturday and Sunday posture retained from iris-20260418-0618 (including Sunday fog_esc=0.3 experiment). Sunday freeze protection moved 1h earlier (05:00 vs 06:00) for 32°F nadir margin. Monday gets maximum misting aggression matching Sunday’s experimental posture — fog_esc 0.3, gap 15s, 900s sealed vent — providing a second data point under even more extreme conditions. Tuesday overnight is warmer (53-58°F, 26-32% RH) — lightest bias needed. Result: Plan ran unmodified 18+ hours (00:22 → 19:06 MDT) with no intraday replanning. Scorecard: 25.5 score, 17.8% compliance, 14.4h cold stress (structural — crop band alignment per lesson #6), 4.2h heat stress, 4.5h VPD high stress. Cost USD 6.53 (above 7d avg USD 6.07). Evening vpd_high=0.60 proved too aggressive — drove south zone to 0.08 VPD near condensation risk. DP margin min was 4.3°F (below 5°F target). Leak alerts fired multiple times during afternoon misting. Setpoint unconfirmed alerts for vpd_target params persisted for hours — indicates ESP32 was not accepting zone-specific VPD targets pushed by the planner. Score: 3/10
New finding: Zone-specific VPD target setpoints (vpd_target_south, vpd_target_west, vpd_target_center, vpd_target_east) generate persistent unconfirmed alerts when pushed — the ESP32 firmware may not support these as writable parameters. The planner should avoid pushing zone-specific VPD targets until the firmware is confirmed to accept them. Use mister_engage_kpa and mister_vpd_weight to control zone prioritization instead. → Added to Lessons Learned
Hypothesis
Testing: Three-day paired fog_escalation_kpa=0.3 test across escalating thermal regimes: Sunday 72°F/5%, Monday 81°F/5%, Tuesday 84°F/8%. Compare VPD compliance, fog activation frequency, and water usage across all three days to characterize fog effectiveness vs outdoor temperature. Expected outcome: Sunday: compliance 25-35%, heat_stress 2-4h, vpd_high 3-5h, water 300-450 gal, cost USD 6-10. Monday: compliance 15-25%, heat_stress 4-6h, vpd_high 5-8h, water 350-500 gal, cost USD 8-12. Tuesday (worst): compliance 10-20%, heat_stress 5-8h, vpd_high 6-9h, water 400-500 gal, cost USD 8-14. 72h total: USD 22-36. Tuesday morning gap 20s (vs 25s Sun/Mon) should show whether tighter morning misting reduces VPD ramp overshoot on fast-heating days.
Setpoints
Sunday April 19
Primary crop-band changes:
Frost protection — 33°F outdoor nadir. bias_heat +4 shifts f
Morning ramp — clouds clearing, outdoor 48°F/20% by 9 AM. Lo
Peak dry — outdoor 67°F/6%, clear sky, 865 W/m². Max aggress
Evening — solar dropping fast after 7 PM. Revert to conserva
Tactical tunable changes:
Frost protection — 33°F outdoor nadir. bias_heat +4 shifts f
Morning ramp — clouds clearing, outdoor 48°F/20% by 9 AM. Lo
Peak dry — outdoor 67°F/6%, clear sky, 865 W/m². Max aggress
Evening — solar dropping fast after 7 PM. Revert to conserva
Monday April 20
Primary crop-band changes:
Monday overnight — 44-47°F outdoor, clear. Wider hysteresis
Monday morning — variable clouds but heating fast (59°F/9% b
Monday peak — 78°F/5% outdoor, 871 W/m². Max aggression. fog
Monday evening — 72°F/14% outdoor, still dry. Warmer overnig
Tactical tunable changes:
Monday overnight — 44-47°F outdoor, clear. Wider hysteresis
Monday morning — variable clouds but heating fast (59°F/9% b
Monday peak — 78°F/5% outdoor, 871 W/m². Max aggression. fog
Monday evening — 72°F/14% outdoor, still dry. Warmer overnig
Tuesday April 21
Primary crop-band changes:
Tuesday overnight — warm 55-57°F, 23-27% RH. Mild conditions
Tuesday morning — fastest ramp of the 3 days. 69°F/18% outdo
Tuesday peak — WORST DAY: 81°F/8% outdoor, 901 W/m² solar. f
Tuesday evening — overcast, 74°F/17% outdoor. Warmer than Su
Tactical tunable changes:
Tuesday overnight — warm 55-57°F, 23-27% RH. Mild conditions
Tuesday morning — fastest ramp of the 3 days. 69°F/18% outdo
Tuesday peak — WORST DAY: 81°F/8% outdoor, 901 W/m² solar. f
Tuesday evening — overcast, 74°F/17% outdoor. Warmer than Su
Wednesday April 22
Primary crop-band changes:
Wednesday overnight anchor — 60°F/31% outdoor, overcast, pos
Tactical tunable changes:
Wednesday overnight anchor — 60°F/31% outdoor, overcast, pos
Changed secondary parameters:
initial 4
initial 4
initial 1
initial -2
initial 0.8
initial 60
initial 60
initial 300
initial 120
initial 60
initial 60
initial 600
initial 90
initial 15
initial 45
initial 500
initial 60
4 → 1
4 → 0
0.8 → 0.4
600 → 900
1 → 0
0.4 → 0.3
0 → 3
0 → 2
0.3 → 0.8
900 → 600
3 → 1
2 → 0
0.8 → 0.4
600 → 900
1 → 0
0.4 → 0.3
0 → 2
0 → 1
0.3 → 0.5
900 → 600
0.5 → 0.8
2 → 1
1 → 0
0.8 → 0.4
600 → 900
1 → 0
0.4 → 0.3
0 → 1
0.3 → 0.5
900 → 600
0.5 → 0.8
Full secondary parameter dump
Value 4.
Value 4.
Value 1.
Value -2.
Value 0.8.
Value 60.
Value 60.
Value 300.
Value 120.
Value 60.
Value 60.
Value 600.
Value 90.
Value 15.
Value 45.
Value 500.
Value 60.
Value 1.
Value 0.
Value 1.
Value -2.
Value 0.4.
Value 60.
Value 60.
Value 300.
Value 120.
Value 60.
Value 60.
Value 900.
Value 90.
Value 15.
Value 45.
Value 500.
Value 60.
Value 0.
Value 0.
Value 1.
Value -2.
Value 0.3.
Value 60.
Value 60.
Value 300.
Value 120.
Value 60.
Value 60.
Value 900.
Value 90.
Value 15.
Value 45.
Value 500.
Value 60.
Value 3.
Value 2.
Value 1.
Value -2.
Value 0.8.
Value 60.
Value 60.
Value 300.
Value 120.
Value 60.
Value 60.
Value 600.
Value 90.
Value 15.
Value 45.
Value 500.
Value 60.
Value 3.
Value 2.
Value 1.
Value -2.
Value 0.8.
Value 60.
Value 60.
Value 300.
Value 120.
Value 60.
Value 60.
Value 600.
Value 90.
Value 15.
Value 45.
Value 500.
Value 60.
Value 1.
Value 0.
Value 1.
Value -2.
Value 0.4.
Value 60.
Value 60.
Value 300.
Value 120.
Value 60.
Value 60.
Value 900.
Value 90.
Value 15.
Value 45.
Value 500.
Value 60.
Value 0.
Value 0.
Value 1.
Value -2.
Value 0.3.
Value 60.
Value 60.
Value 300.
Value 120.
Value 60.
Value 60.
Value 900.
Value 90.
Value 15.
Value 45.
Value 500.
Value 60.
Value 2.
Value 1.
Value 1.
Value -2.
Value 0.5.
Value 60.
Value 60.
Value 300.
Value 120.
Value 60.
Value 60.
Value 600.
Value 90.
Value 15.
Value 45.
Value 500.
Value 60.
Value 2.
Value 1.
Value 1.
Value -2.
Value 0.8.
Value 60.
Value 60.
Value 300.
Value 120.
Value 60.
Value 60.
Value 600.
Value 90.
Value 15.
Value 45.
Value 500.
Value 60.
Value 1.
Value 0.
Value 1.
Value -2.
Value 0.4.
Value 60.
Value 60.
Value 300.
Value 120.
Value 60.
Value 60.
Value 900.
Value 90.
Value 15.
Value 45.
Value 500.
Value 60.
Value 0.
Value 0.
Value 1.
Value -2.
Value 0.3.
Value 60.
Value 60.
Value 300.
Value 120.
Value 60.
Value 60.
Value 900.
Value 90.
Value 15.
Value 45.
Value 500.
Value 60.
Value 1.
Value 0.
Value 1.
Value -2.
Value 0.5.
Value 60.
Value 60.
Value 300.
Value 120.
Value 60.
Value 60.
Value 600.
Value 90.
Value 15.
Value 45.
Value 500.
Value 60.
Value 1.
Value 0.
Value 1.
Value -2.
Value 0.8.
Value 60.
Value 60.
Value 300.
Value 120.
Value 60.
Value 60.
Value 600.
Value 90.
Value 15.
Value 45.
Value 500.
Value 60.
🌆 Evening Cycle (7:06 PM) — iris-20260419-1903
validated
4/10
none recorded
Result: Plan covered 7 PM Apr 19 → 6 AM Apr 20 (~11h). Apr 19 full-day scorecard: score 27.4, compliance 17.8%, temp_compliance 22.4% (bottleneck), vpd_compliance 79.1% (good), heat_stress 2.57h, vpd_high 3.57h, vpd_low 1.93h, cost USD 5.16. VPD management was better than expected (79.1% vs hypothesis 20-30% compliance). The evening correction to stop over-aggressive VPD targeting was appropriate — vpd_low_stress was only 1.93h. Overnight: greenhouse held 68-73°F, VPD 0.8-1.2, RH 56-65% — mechanically stable. However, the Apr 20 partial scorecard (6 PM→6 AM window) shows 9.279 therms gas (USD 7.70) and 30.8h cumulative zone-stress — the tight crop band (63.5-68.9°F, VPD 0.4-0.7) is structurally penalizing: the greenhouse at 72°F and 1.0 VPD registers as double-stressed despite being perfectly healthy for the plants. Cost is running 2x the 7-day average primarily from gas heating against the tight band.
Reflection
Validating previous cycle: iris-20260419-0022
Previous hypothesis: Forecast update — extending coverage through Tuesday, which is now the hardest day in the window (84°F/8% outdoor, VPD 3.57 kPa). Sunday and Monday postures largely retained from iris-20260418-1943 — both days validated as well-calibrated for extreme dry conditions. Sunday: frost protection pre-dawn (33°F nadir), then clear-sky maximum misting aggression. Monday: similar but hotter (81°F/5%) with variable clouds. Tuesday: worst day — 84°F peak, 8-9% RH, clear AM then overcast PM. Maximum aggression with fog_esc=0.3 continued as third data point for the paired experiment (Sunday 72°F/5%, Monday 81°F/5%, Tuesday 84°F/8%). Wednesday overnight anchor at mild 60°F/31% — lightest bias needed.
{"conditions": [{"day": "Sunday", "outdoor_high_f": 72, "outdoor_low_f": 33, "outdoor_rh_pct": 5, "cloud_pct": 0, "severity": "extreme_dry"}, {"day": "Monday", "outdoor_high_f": 81, "outdoor_low_f": 36, "outdoor_rh_pct": 5, "cloud_pct": 60, "severity": "extreme_dry_hot"}, {"day": "Tuesday", "outdoor_high_f": 84, "outdoor_low_f": 51, "outdoor_rh_pct": 8, "cloud_pct": 40, "severity": "extreme_dry_hot"}], "stress_windows": [{"day": "Sunday", "type": "frost", "hours": "05:00-08:00", "mitigation": "bias_heat +4"}, {"day": "Sunday", "type": "vpd_high", "hours": "11:00-19:00", "mitigation": "fog_esc 0.3, gap 15s, sealed 900s"}, {"day": "Monday", "type": "heat+vpd_high", "hours": "12:00-18:00", "mitigation": "fog_esc 0.3, gap 15s, accept heat stress"}, {"day": "Tuesday", "type": "heat+vpd_high", "hours": "10:00-19:00", "mitigation": "fog_esc 0.3, gap 15s, accept 5-8h heat stress"}], "rationale": "Three consecutive extreme dry days with escalating thermal load. Physics-limited cooling above 85°F (lesson #5). Focus on maximum evaporative assist and sealed-vent retention. Tuesday is the worst — earliest morning ramp (09:00 waypoint) because 69°F/18% outdoor by 9 AM means indoor VPD will climb fast."}
**Result:** Plan covered 7 PM Apr 19 → 6 AM Apr 20 (~11h). Apr 19 full-day scorecard: score 27.4, compliance 17.8%, temp_compliance 22.4% (bottleneck), vpd_compliance 79.1% (good), heat_stress 2.57h, vpd_high 3.57h, vpd_low 1.93h, cost USD 5.16. VPD management was better than expected (79.1% vs hypothesis 20-30% compliance). The evening correction to stop over-aggressive VPD targeting was appropriate — vpd_low_stress was only 1.93h. Overnight: greenhouse held 68-73°F, VPD 0.8-1.2, RH 56-65% — mechanically stable. However, the Apr 20 partial scorecard (6 PM→6 AM window) shows 9.279 therms gas (USD 7.70) and 30.8h cumulative zone-stress — the tight crop band (63.5-68.9°F, VPD 0.4-0.7) is structurally penalizing: the greenhouse at 72°F and 1.0 VPD registers as double-stressed despite being perfectly healthy for the plants. Cost is running 2x the 7-day average primarily from gas heating against the tight band.
**Score:** 4/10
> **New finding:** Crop bands (63.5-68.9°F temp, 0.4-0.7 VPD) are structurally too tight for spring conditions. A 5.4°F temp band and 0.3 kPa VPD band guarantee low compliance — healthy overnight conditions (72°F, 1.0 VPD) register as double-failure. This is a band alignment problem, not a control problem. Heater oscillation to maintain 67.5°F+ drives USD 7+ overnight gas costs. Need to revisit crop profile bands or accept structural scoring penalty. → Added to [Lessons Learned](/reference/lessons)
### Hypothesis
**Testing:** Continued fog_escalation_kpa=0.3 test on Mon/Tue. Compare Monday (overcast AM → clearing PM, 82F peak) vs Tuesday (clear all day, 83F peak) to isolate cloud-cover effect on VPD ramp timing and misting water usage. Wednesday serves as humidity-recovery baseline.
**Expected outcome:** Monday: compliance 20-30%, heat_stress 3-5h, vpd_high 4-6h (overcast delays ramp), water 300-400 gal, cost USD 6-9. Tuesday: compliance 15-25%, heat_stress 5-7h, vpd_high 5-8h (clear sky = early ramp), water 350-450 gal, cost USD 7-10. Wednesday: compliance 30-40% (humidity relief), heat_stress 3-5h, vpd_high 3-5h, water 200-300 gal, cost USD 5-7. 72h total: USD 18-26.
#### Setpoints
#### Sunday April 19
**Primary crop-band changes:**
<div class="data-table">
<div class="data-row"><strong>19:10</strong><span>vpd_h 1.2; hyst 0.3</span><p>Evening wind-down. VPD 0.52 at 67F is healthy — relax vpd_hi</p></div>
</div>
**Tactical tunable changes:**
<div class="data-table">
<div class="data-row"><strong>19:10</strong><span>engage 1.6; all 1.9; gap 45</span><p>Evening wind-down. VPD 0.52 at 67F is healthy — relax vpd_hi</p></div>
</div>
#### Monday April 20
**Primary crop-band changes:**
<div class="data-table">
<div class="data-row"><strong>00:00</strong><span>vpd_h 1.4</span><p>Monday overnight. Outdoor dropping to 42F. Bias_heat +2 for </p></div>
<div class="data-row"><strong>06:00</strong><span>vpd_h 1.2</span><p>Pre-dawn Monday. Outdoor 42F, 100% cloud. Extra heating bias</p></div>
<div class="data-row"><strong>10:00</strong><span>vpd_h 0.8</span><p>Monday morning ramp. Still overcast (100% cloud) but outdoor</p></div>
<div class="data-row"><strong>13:00</strong><span>vpd_h 0.7</span><p>Monday peak stress. Clouds clearing (74%), 79F outdoor, 6% R</p></div>
<div class="data-row"><strong>19:00</strong><span>vpd_h 1.2</span><p>Monday evening. Outdoor cooling to 68F. Relax misting, shift</p></div>
</div>
**Tactical tunable changes:**
<div class="data-table">
<div class="data-row"><strong>00:00</strong><span>engage 1.6</span><p>Monday overnight. Outdoor dropping to 42F. Bias_heat +2 for </p></div>
<div class="data-row"><strong>06:00</strong><span>engage 1.6</span><p>Pre-dawn Monday. Outdoor 42F, 100% cloud. Extra heating bias</p></div>
<div class="data-row"><strong>10:00</strong><span>engage 1.3; all 1.6; gap 30</span><p>Monday morning ramp. Still overcast (100% cloud) but outdoor</p></div>
<div class="data-row"><strong>13:00</strong><span>engage 1.2; all 1.5; gap 20</span><p>Monday peak stress. Clouds clearing (74%), 79F outdoor, 6% R</p></div>
<div class="data-row"><strong>19:00</strong><span>engage 1.6; all 1.9; gap 45</span><p>Monday evening. Outdoor cooling to 68F. Relax misting, shift</p></div>
</div>
#### Tuesday April 21
**Primary crop-band changes:**
<div class="data-table">
<div class="data-row"><strong>00:00</strong><span>vpd_h 1.4</span><p>Tuesday overnight. Outdoor 54F dropping to 48F. Moderate hea</p></div>
<div class="data-row"><strong>09:00</strong><span>vpd_h 0.8</span><p>Tuesday early ramp. Clear sky, 66F/11% outdoor by 9 AM — fas</p></div>
<div class="data-row"><strong>13:00</strong><span>vpd_h 0.7</span><p>Tuesday peak stress. 82F/10% outdoor, clear → some cloud PM.</p></div>
<div class="data-row"><strong>19:00</strong><span>vpd_h 1.2</span><p>Tuesday evening. Outdoor 76F dropping — warmer evening than </p></div>
</div>
**Tactical tunable changes:**
<div class="data-table">
<div class="data-row"><strong>00:00</strong><span>engage 1.6</span><p>Tuesday overnight. Outdoor 54F dropping to 48F. Moderate hea</p></div>
<div class="data-row"><strong>09:00</strong><span>engage 1.3; all 1.6; gap 25</span><p>Tuesday early ramp. Clear sky, 66F/11% outdoor by 9 AM — fas</p></div>
<div class="data-row"><strong>13:00</strong><span>engage 1.2; all 1.5; gap 20</span><p>Tuesday peak stress. 82F/10% outdoor, clear → some cloud PM.</p></div>
<div class="data-row"><strong>19:00</strong><span>engage 1.6; all 1.9; gap 45</span><p>Tuesday evening. Outdoor 76F dropping — warmer evening than </p></div>
</div>
#### Wednesday April 22
**Primary crop-band changes:**
<div class="data-table">
<div class="data-row"><strong>00:00</strong><span>vpd_h 1.4</span><p>Wednesday overnight anchor. Moisture arriving — 40-48% outdo</p></div>
</div>
**Tactical tunable changes:**
<div class="data-table">
<div class="data-row"><strong>00:00</strong><span>engage 1.4; gap 35</span><p>Wednesday overnight anchor. Moisture arriving — 40-48% outdo</p></div>
</div>
**Changed secondary parameters:**
<div class="data-table">
<div class="data-row"><strong>19:10</strong><span>bias_cool</span><p>initial 0</p></div>
<div class="data-row"><strong>19:10</strong><span>bias_heat</span><p>initial 0</p></div>
<div class="data-row"><strong>19:10</strong><span>fog_escalation_kpa</span><p>initial 0.5</p></div>
<div class="data-row"><strong>19:10</strong><span>mist_max_closed_vent_s</span><p>initial 300</p></div>
<div class="data-row"><strong>19:10</strong><span>mister_water_budget_gal</span><p>initial 500</p></div>
<div class="data-row"><strong>00:00</strong><span>bias_heat</span><p>0 → 2</p></div>
<div class="data-row"><strong>06:00</strong><span>bias_heat</span><p>2 → 4</p></div>
<div class="data-row"><strong>10:00</strong><span>bias_cool</span><p>0 → 2</p></div>
<div class="data-row"><strong>10:00</strong><span>bias_heat</span><p>4 → 0</p></div>
<div class="data-row"><strong>10:00</strong><span>fog_escalation_kpa</span><p>0.5 → 0.3</p></div>
<div class="data-row"><strong>10:00</strong><span>mist_max_closed_vent_s</span><p>300 → 900</p></div>
<div class="data-row"><strong>13:00</strong><span>bias_cool</span><p>2 → 3</p></div>
<div class="data-row"><strong>19:00</strong><span>bias_cool</span><p>3 → 0</p></div>
<div class="data-row"><strong>19:00</strong><span>bias_heat</span><p>0 → 2</p></div>
<div class="data-row"><strong>19:00</strong><span>fog_escalation_kpa</span><p>0.3 → 0.5</p></div>
<div class="data-row"><strong>19:00</strong><span>mist_max_closed_vent_s</span><p>900 → 300</p></div>
<div class="data-row"><strong>09:00</strong><span>bias_cool</span><p>0 → 2</p></div>
<div class="data-row"><strong>09:00</strong><span>bias_heat</span><p>2 → 0</p></div>
<div class="data-row"><strong>09:00</strong><span>fog_escalation_kpa</span><p>0.5 → 0.3</p></div>
<div class="data-row"><strong>09:00</strong><span>mist_max_closed_vent_s</span><p>300 → 900</p></div>
<div class="data-row"><strong>13:00</strong><span>bias_cool</span><p>2 → 3</p></div>
<div class="data-row"><strong>19:00</strong><span>bias_cool</span><p>3 → 0</p></div>
<div class="data-row"><strong>19:00</strong><span>bias_heat</span><p>0 → 1</p></div>
<div class="data-row"><strong>19:00</strong><span>fog_escalation_kpa</span><p>0.3 → 0.5</p></div>
<div class="data-row"><strong>19:00</strong><span>mist_max_closed_vent_s</span><p>900 → 300</p></div>
<div class="data-row"><strong>00:00</strong><span>bias_heat</span><p>1 → 0</p></div>
<div class="data-row"><strong>00:00</strong><span>fog_escalation_kpa</span><p>0.5 → 0.4</p></div>
<div class="data-row"><strong>00:00</strong><span>mist_max_closed_vent_s</span><p>300 → 600</p></div>
</div>
<details>
<summary>Full secondary parameter dump</summary>
<div class="data-table">
<div class="data-row"><strong>19:10</strong><span>bias_cool</span><p>Value 0.</p></div>
<div class="data-row"><strong>19:10</strong><span>bias_heat</span><p>Value 0.</p></div>
<div class="data-row"><strong>19:10</strong><span>fog_escalation_kpa</span><p>Value 0.5.</p></div>
<div class="data-row"><strong>19:10</strong><span>mist_max_closed_vent_s</span><p>Value 300.</p></div>
<div class="data-row"><strong>19:10</strong><span>mister_water_budget_gal</span><p>Value 500.</p></div>
<div class="data-row"><strong>00:00</strong><span>bias_cool</span><p>Value 0.</p></div>
<div class="data-row"><strong>00:00</strong><span>bias_heat</span><p>Value 2.</p></div>
<div class="data-row"><strong>00:00</strong><span>fog_escalation_kpa</span><p>Value 0.5.</p></div>
<div class="data-row"><strong>00:00</strong><span>mist_max_closed_vent_s</span><p>Value 300.</p></div>
<div class="data-row"><strong>06:00</strong><span>bias_cool</span><p>Value 0.</p></div>
<div class="data-row"><strong>06:00</strong><span>bias_heat</span><p>Value 4.</p></div>
<div class="data-row"><strong>06:00</strong><span>fog_escalation_kpa</span><p>Value 0.5.</p></div>
<div class="data-row"><strong>10:00</strong><span>bias_cool</span><p>Value 2.</p></div>
<div class="data-row"><strong>10:00</strong><span>bias_heat</span><p>Value 0.</p></div>
<div class="data-row"><strong>10:00</strong><span>fog_escalation_kpa</span><p>Value 0.3.</p></div>
<div class="data-row"><strong>10:00</strong><span>mist_max_closed_vent_s</span><p>Value 900.</p></div>
<div class="data-row"><strong>10:00</strong><span>mister_water_budget_gal</span><p>Value 500.</p></div>
<div class="data-row"><strong>13:00</strong><span>bias_cool</span><p>Value 3.</p></div>
<div class="data-row"><strong>13:00</strong><span>fog_escalation_kpa</span><p>Value 0.3.</p></div>
<div class="data-row"><strong>13:00</strong><span>mist_max_closed_vent_s</span><p>Value 900.</p></div>
<div class="data-row"><strong>19:00</strong><span>bias_cool</span><p>Value 0.</p></div>
<div class="data-row"><strong>19:00</strong><span>bias_heat</span><p>Value 2.</p></div>
<div class="data-row"><strong>19:00</strong><span>fog_escalation_kpa</span><p>Value 0.5.</p></div>
<div class="data-row"><strong>19:00</strong><span>mist_max_closed_vent_s</span><p>Value 300.</p></div>
<div class="data-row"><strong>00:00</strong><span>bias_cool</span><p>Value 0.</p></div>
<div class="data-row"><strong>00:00</strong><span>bias_heat</span><p>Value 2.</p></div>
<div class="data-row"><strong>00:00</strong><span>fog_escalation_kpa</span><p>Value 0.5.</p></div>
<div class="data-row"><strong>00:00</strong><span>mist_max_closed_vent_s</span><p>Value 300.</p></div>
<div class="data-row"><strong>09:00</strong><span>bias_cool</span><p>Value 2.</p></div>
<div class="data-row"><strong>09:00</strong><span>bias_heat</span><p>Value 0.</p></div>
<div class="data-row"><strong>09:00</strong><span>fog_escalation_kpa</span><p>Value 0.3.</p></div>
<div class="data-row"><strong>09:00</strong><span>mist_max_closed_vent_s</span><p>Value 900.</p></div>
<div class="data-row"><strong>09:00</strong><span>mister_water_budget_gal</span><p>Value 500.</p></div>
<div class="data-row"><strong>13:00</strong><span>bias_cool</span><p>Value 3.</p></div>
<div class="data-row"><strong>13:00</strong><span>fog_escalation_kpa</span><p>Value 0.3.</p></div>
<div class="data-row"><strong>13:00</strong><span>mist_max_closed_vent_s</span><p>Value 900.</p></div>
<div class="data-row"><strong>19:00</strong><span>bias_cool</span><p>Value 0.</p></div>
<div class="data-row"><strong>19:00</strong><span>bias_heat</span><p>Value 1.</p></div>
<div class="data-row"><strong>19:00</strong><span>fog_escalation_kpa</span><p>Value 0.5.</p></div>
<div class="data-row"><strong>19:00</strong><span>mist_max_closed_vent_s</span><p>Value 300.</p></div>
<div class="data-row"><strong>00:00</strong><span>bias_cool</span><p>Value 0.</p></div>
<div class="data-row"><strong>00:00</strong><span>bias_heat</span><p>Value 0.</p></div>
<div class="data-row"><strong>00:00</strong><span>fog_escalation_kpa</span><p>Value 0.4.</p></div>
<div class="data-row"><strong>00:00</strong><span>mist_max_closed_vent_s</span><p>Value 600.</p></div>
</div>
</details>
---
## End-of-Day Summary
### Climate
<div class="metric-grid">
<div class="metric-card"><strong>Temperature</strong><p>53.6–90.4°F; avg 68.1°F</p></div>
<div class="metric-card"><strong>VPD</strong><p>0.23–3.04 kPa; avg 0.93 kPa</p></div>
<div class="metric-card"><strong>Relative humidity</strong><p>22.2–85.7%</p></div>
</div>
### Stress Hours
- **Heat stress (>85°F):** 6.8h
- **VPD stress (>2.0 kPa):** 9.0h
- **Cold stress (<55°F):** 14.0h
### Economics
<div class="metric-grid">
<div class="metric-card"><strong>Electric</strong><p>USD 0.27</p></div>
<div class="metric-card"><strong>Gas</strong><p>USD 2.45</p></div>
<div class="metric-card"><strong>Water</strong><p>USD 0.090</p></div>
<div class="metric-card"><strong>Total</strong><p>USD 2.81</p></div>
</div>
### Equipment Runtimes
<div class="data-table">
<div class="data-row"><strong>Fan 1</strong><span>189 min</span><p>Primary exhaust runtime.</p></div>
<div class="data-row"><strong>Fan 2</strong><span>211 min</span><p>Secondary exhaust runtime.</p></div>
<div class="data-row"><strong>Vent</strong><span>289 min</span><p>Intake vent runtime.</p></div>
<div class="data-row"><strong>Fog</strong><span>98 min</span><p>Fogger runtime.</p></div>
<div class="data-row"><strong>Heat 1 electric</strong><span>714 min</span><p>Electric heater runtime.</p></div>
<div class="data-row"><strong>Heat 2 gas</strong><span>236 min</span><p>Gas heater runtime.</p></div>
<div class="data-row"><strong>Grow lights</strong><span>0 min</span><p>Supplemental lighting runtime.</p></div>
<div class="data-row"><strong>Mister south</strong><span>1.74h</span><p>South mister runtime.</p></div>
<div class="data-row"><strong>Mister west</strong><span>0.65h</span><p>West mister runtime.</p></div>
<div class="data-row"><strong>Mister center</strong><span>2.08h</span><p>Center mister runtime.</p></div>
</div>
### Water
- **Total:** 502 gal
- **Mister:** 238 gal
### Crop Health (Gemini Vision)
<div class="data-table">
<div class="data-row"><strong>Canna Lilies</strong><span>south · health 70% · 4 obs</span><p>Observation notes are collapsed below to avoid publishing partial vision snippets.</p></div>
<div class="data-row"><strong>Vanda Orchids</strong><span>center · health 60% · 4 obs</span><p>Observation notes are collapsed below to avoid publishing partial vision snippets.</p></div>
<div class="data-row"><strong>lettuce</strong><span>east · health 60% · 4 obs</span><p>Observation notes are collapsed below to avoid publishing partial vision snippets.</p></div>
<div class="data-row"><strong>pepper</strong><span>east · health 58% · 4 obs</span><p>Observation notes are collapsed below to avoid publishing partial vision snippets.</p></div>
<div class="data-row"><strong>strawberry</strong><span>east · health 63% · 4 obs</span><p>Observation notes are collapsed below to avoid publishing partial vision snippets.</p></div>
</div>
<details>
<summary>Vision observation notes</summary>
<div class="data-table">
<div class="data-row"><strong>Canna Lilies</strong><span>Gemini Vision notes</span><p>Canna Lilies look generally healthy, though lighting makes detailed assessment difficult.</p></div>
<div class="data-row"><strong>Vanda Orchids</strong><span>Gemini Vision notes</span><p>Hanging orchids appear generally healthy, though some lower leaves look slightly pale.</p></div>
<div class="data-row"><strong>lettuce</strong><span>Gemini Vision notes</span><p>Seedlings appear small but generally healthy, though hard to see clearly due to image quality.</p></div>
<div class="data-row"><strong>pepper</strong><span>Gemini Vision notes</span><p>Difficult to assess health accurately due to distance and image clarity.</p></div>
<div class="data-row"><strong>strawberry</strong><span>Gemini Vision notes</span><p>Difficult to assess health accurately due to distance and image clarity.</p></div>
</div>
</details>
### Hourly Pattern
<div class="data-table">
<div class="data-row"><strong>12:00</strong><span>77.0°F; VPD 1.20 kPa</span><p>RH 62.4%.</p></div>
<div class="data-row"><strong>13:00</strong><span>79.4°F; VPD 1.26 kPa</span><p>RH 63.6%.</p></div>
<div class="data-row"><strong>14:00</strong><span>81.8°F; VPD 1.93 kPa</span><p>RH 47.2%.</p></div>
<div class="data-row"><strong>15:00</strong><span>84.8°F; VPD 1.74 kPa</span><p>RH 56.7%.</p></div>
<div class="data-row"><strong>16:00</strong><span>76.3°F; VPD 1.35 kPa</span><p>RH 57.2%.</p></div>
<div class="data-row"><strong>17:00</strong><span>71.7°F; VPD 0.86 kPa</span><p>RH 67.7%.</p></div>
<div class="data-row"><strong>18:00</strong><span>67.5°F; VPD 0.57 kPa</span><p>RH 75.5%.</p></div>
<div class="data-row"><strong>19:00</strong><span>64.9°F; VPD 0.46 kPa</span><p>RH 78.5%.</p></div>
<div class="data-row"><strong>20:00</strong><span>61.3°F; VPD 0.43 kPa</span><p>RH 77.0%.</p></div>
<div class="data-row"><strong>21:00</strong><span>60.7°F; VPD 0.42 kPa</span><p>RH 77.3%.</p></div>
<div class="data-row"><strong>22:00</strong><span>60.8°F; VPD 0.47 kPa</span><p>RH 74.4%.</p></div>
<div class="data-row"><strong>23:00</strong><span>60.7°F; VPD 0.53 kPa</span><p>RH 70.9%.</p></div>
<div class="data-row"><strong>00:00</strong><span>60.4°F; VPD 0.50 kPa</span><p>RH 72.0%.</p></div>
<div class="data-row"><strong>01:00</strong><span>60.4°F; VPD 0.54 kPa</span><p>RH 70.1%.</p></div>
<div class="data-row"><strong>02:00</strong><span>60.3°F; VPD 0.53 kPa</span><p>RH 70.5%.</p></div>
<div class="data-row"><strong>03:00</strong><span>60.3°F; VPD 0.54 kPa</span><p>RH 70.1%.</p></div>
<div class="data-row"><strong>04:00</strong><span>60.2°F; VPD 0.54 kPa</span><p>RH 69.6%.</p></div>
<div class="data-row"><strong>05:00</strong><span>60.0°F; VPD 0.53 kPa</span><p>RH 70.1%.</p></div>
<div class="data-row"><strong>06:00</strong><span>62.8°F; VPD 0.63 kPa</span><p>RH 67.9%.</p></div>
<div class="data-row"><strong>07:00</strong><span>65.8°F; VPD 0.73 kPa</span><p>RH 66.3%.</p></div>
<div class="data-row"><strong>08:00</strong><span>68.2°F; VPD 0.86 kPa</span><p>RH 63.2%.</p></div>
<div class="data-row"><strong>09:00</strong><span>67.8°F; VPD 0.84 kPa</span><p>RH 64.0%.</p></div>
<div class="data-row"><strong>10:00</strong><span>71.6°F; VPD 1.03 kPa</span><p>RH 61.8%.</p></div>
<div class="data-row"><strong>11:00</strong><span>75.0°F; VPD 1.07 kPa</span><p>RH 64.5%.</p></div>
</div>
## 7-Day Stress Context
<div class="data-table">
<div class="data-row"><strong>2026-04-13</strong><span>Heat 9.2h; VPD high 5.4h</span><p>Cold stress 1.1h.</p></div>
<div class="data-row"><strong>2026-04-14</strong><span>Heat 0.8h; VPD high 2.2h</span><p>Cold stress 11.6h.</p></div>
<div class="data-row"><strong>2026-04-15</strong><span>Heat 6.6h; VPD high 7.6h</span><p>Cold stress 13.8h.</p></div>
<div class="data-row"><strong>2026-04-16</strong><span>Heat 7.3h; VPD high 5.9h</span><p>Cold stress 10.6h.</p></div>
<div class="data-row"><strong>2026-04-17</strong><span>Heat 0.1h; VPD high 2.9h</span><p>Cold stress 18.3h.</p></div>
<div class="data-row"><strong>2026-04-18</strong><span>Heat 4.2h; VPD high 4.6h</span><p>Cold stress 12.7h.</p></div>
<div class="data-row"><strong>2026-04-19</strong><span>Heat 6.8h; VPD high 9.0h</span><p>Cold stress 14.0h.</p></div>
</div>