My weather app said 19% chance of rain on an afternoon when Weather Underground was calling for thunderstorms.
I checked the sources that afternoon in Ithaca. NWS had 85% with storms from 2 to 4. ECMWF said 98% and ICON 90%. GFS said 40% and overcast. Two faults stacked on each other. The headline was printing the next hour instead of the whole period. And my forecast request never named a model, so Open-Meteo answered with best_match, a choice nobody made on purpose, and that day it leaned on the one model that missed the storm.
The headline now comes from NWS, the US forecast of record, and it quotes one sentence of the forecaster's own words, like showers and thunderstorms between 2pm and 4pm. That tells you when, which 86% can't.
Then the page disagreed with itself. The hero said 86%. The hourly strip under it said 15, 17, 24, 24, 18 and drew a sun at 4pm, right in the storm window. The seven-day row said 32%. Fixing one wrong number had made the page inconsistent. So the real fix went in at the one seam every panel reads from, before anything renders, and a panel I add later gets corrected for free.
Naming a specific model wasn't the answer either. Two of the obvious picks return visibility and UV as all nulls, which would have quietly emptied two fields on the details panel. Instead a second small request asks three models for rain chance only, and the highest can raise the number but never lower it.
