Allstate Check First Forecast

A day with the forecast skill

Whenever the skill mentions a time — a storm, a wind advisory, tomorrow's forecast — it now always says which day it means: today, tonight, tomorrow morning, or tomorrow night. Below: one story told four times, then a gallery of more alerts and more ordinary days, each showing the time of day, the weather, and exactly what Alexa says.

A day with a wind advisory

Reno, NV has a wind advisory running from 11am to 2am the next morning. Here's what four different customers hear, depending only on when they happen to ask.

The evening before, 9:00 pm
The advisory hasn't started yet — it's still a whole day away.
"...a wind advisory will be in effect from 11:00 AM tomorrow morning through 2:00 AM tomorrow night..."
The morning of, 9:00 am
Two hours before it starts.
"...a wind advisory will be in effect from 11:00 AM today through 2:00 AM tonight..."
Right in the middle of it, 1:00 pm
It's already going on.
"...a wind advisory will be in effect from 11:00 AM today through 2:00 AM tonight..."
Same sentence as the 9am call — and that's correct. Both calls happen on the same day, so "today" and "tonight" mean the same thing either time.
After it's over, 3:00 am
The advisory already ended at 2am.
Nothing about the advisory — it's over, so it's simply not mentioned. The customer hears the ordinary forecast instead.

An ordinary day, no advisories

No alert, just the regular forecast — but the skill always looks ahead, never back at conditions the customer is already in the middle of.

Morning call, 9:00 am
Alexa looks at tonight, tomorrow, and tomorrow night — whichever of the three has the most notable weather.
"...there's a chance of thunderstorms tonight, with a high of 85 and a low of 63."
Evening call, 8:30 pm
Tonight's own weather is never repeated back — only tomorrow counts from here.
"...there's a chance of severe thunderstorms tomorrow evening, with a high of 84 and a low of 55."

More alerts, more times of day

Every kind of alert falls into one of two patterns: some only say when it ends, others say both when it starts and ends. Either way, the day always comes through clearly.

More ordinary days

No alert active — just whichever upcoming day or night has the most notable weather, always ahead, never behind.

A mix-up we found and fixed

For a little while, that evening call had a bug: if the worse weather was the next night rather than tomorrow's daytime, the skill said "tonight" instead of "tomorrow evening" — making weather over a day away sound like it was happening right now.

Before
"...there's a chance of severe thunderstorms tonight..." — sounded immediate, but meant over 24 hours away.
After
"...there's a chance of severe thunderstorms tomorrow evening..." — correct, and the storm is still mentioned so nobody's caught off guard.

Fixed, tested, and live.

For the engineering team — technical detail

Branch fix/forecast-forward-window-and-alert-time-context · PR #60 (open) · deployed as Lambda version 204, both ETHAN and development aliases.

All 42 configured alert types speak one of two sentence shapes: 13 "until" types (never mention a start time, only when it ends — e.g. Tornado Warning) and 29 "from…through" types (speak both a start and an end — e.g. Wind Advisory, Severe Thunderstorm Warning). An alert whose start falls beyond the forward window, or that's already expired, is suppressed entirely and the ordinary forecast plays instead.

The ordinary (no-alert) forecast's window size depends on whether "now" falls in a daytime or nighttime NWS block (~6am–6pm vs 6pm–6am): 3 blocks on a morning check, 2 on an evening check. It always picks the most severe block in that window (Thunderstorm > Snow/Ice > Rain > Wind > Cloudy > Sunny); ties keep the nearer block.

The fixed bug: lambda/forecast.js's forwardLabels labeled blocks by position alone — the first night-block it saw was always "tonight," regardless of whether "now" was already night. lambda/timeBlocks.js's dayQualifier (used for alerts) already branched correctly on this; forwardLabels just never got the same treatment. Now takes a nowIsDaytime parameter (default true, so the morning-check case is unchanged); when false, the window's one possible night block always reads "tomorrow evening."

Verification: full suite 282/282, live-tip-probe.mjs 252/0, plus a dedicated regression test and a direct read of the deployed Lambda's response.