The ~18:30 evening bump is load returning from 4CP curtailment release, not BTM solar rolloff (analysis 2026-07-24).
peak-setting — day set a new MTD maxtight — gap ≤ 800 MW of prior MTD maxmid — 800 < gap ≤ 2000 MWfree — gap > 2000 MW (natural curve)Gap is measured after the fleet acts (an outcome); forecast headroom is what the fleet was reacting to (a cause). Days bunch 1,000-1,600 MW under the record because that is where defending puts them.
Weekdays, Jun–Sep for gap axis. Cache only — refresh: python flexload.py --recompute
DA forecast captured through —
Precip filter uses weighted mm (Open-Meteo), not inches. Rain bust threshold = 4 mm.
Below-peak weekdays only. 2026 dead zone at 800–1600 MW = fleet precision.
Free = steep natural decline; tight/peak shallower = curtailment release (return wave).
record-expected — headroom ≤ 0 (DA above prior MTD max)pressure — 0 < headroom ≤ 1.7 GWfree — headroom > 3 GWheadroom = prior_MTD_max − day-max DaFcstMW · source LoadFcstActual only
Early month: MTD max resets on the 1st. Days 2–4 are flagged because a low early peak (often while flexible load is not defending yet) makes the next day look “record-expected” without meaning the same mid-month pressure.
x = forecast headroom (GW, record line at 0); y toggles load-only error or renewable-adjusted net-load error. Hollow = rain-excluded. Annotates 2026-07-30. Thresholds provisional.
EIA monthly TX BTM TWh — order of magnitude; cannot explain ~1–1.6 GW return wave alone.
| Date | WD | Max MW | Gap | Gap cat | DA @peak | fcst err | ren DA err | net-load err | Headroom | HR cat | Excluded | Source |
|---|