You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When the pipeline degrades, the dashboard says nothing. On 2026-09-10 the production forecast was re-published unchanged from an anchor ~34h old and a visitor to https://energy.jeroenveen.nl had no way to tell.
What the page does today
dashboard.js:102 loadAugurForecast fetches augur_forecast_shadow.json and stores it, but never reads metadata.t0 or metadata.last_updated. The only last_updated in the render path is data-processor.js:35, which is new Date().toISOString() — the browser's clock, on the Energy Zero path, unrelated to the forecast.
So the two fields that would reveal staleness both exist in the JSON and neither reaches the page. Worse, they disagree in a way that reads as healthy: on the 09-10 run last_updated was 2026-09-10T03:01 (fresh) while t0 was 2026-09-09T20:00 (stale), because the run genuinely executed — it just had nothing new to work with.
Why this is worth fixing
The pipeline alarms loudly and correctly: [ALARM: t0 stale], [ALARM: eval stale], the heartbeat email. Every one of those is visible only to us. The product itself is the one surface a user sees, and it is silent — a forecast anchored 34h ago renders exactly like one anchored 4h ago.
Sketch
Surface the forecast's t0 age on the Prices tab (e.g. "forecast anchored 34h ago" when age exceeds a threshold).
Grey or dash the band past some staleness bound rather than drawing it at full confidence.
When the pipeline degrades, the dashboard says nothing. On 2026-09-10 the production forecast was re-published unchanged from an anchor ~34h old and a visitor to https://energy.jeroenveen.nl had no way to tell.
What the page does today
dashboard.js:102 loadAugurForecastfetchesaugur_forecast_shadow.jsonand stores it, but never readsmetadata.t0ormetadata.last_updated. The onlylast_updatedin the render path isdata-processor.js:35, which isnew Date().toISOString()— the browser's clock, on the Energy Zero path, unrelated to the forecast.So the two fields that would reveal staleness both exist in the JSON and neither reaches the page. Worse, they disagree in a way that reads as healthy: on the 09-10 run
last_updatedwas2026-09-10T03:01(fresh) whilet0was2026-09-09T20:00(stale), because the run genuinely executed — it just had nothing new to work with.Why this is worth fixing
The pipeline alarms loudly and correctly:
[ALARM: t0 stale],[ALARM: eval stale], the heartbeat email. Every one of those is visible only to us. The product itself is the one surface a user sees, and it is silent — a forecast anchored 34h ago renders exactly like one anchored 4h ago.Sketch
t0age on the Prices tab (e.g. "forecast anchored 34h ago" when age exceeds a threshold).t0should not be drawn as forecast at all — related to Dashboard forecasts the first ~24h against a day-ahead auction that already cleared #30, which is the same class of problem from the other end.Product change, not a model one. Found while diagnosing the 2026-09-07..09-09 EDH outage.