Observation
A value measured or reported by a source, such as the local UV-6 station, the BMP280, ECCC Hope Airport, Fraser River station 08MF005, BC Wildfire Service, or Skyfield's local calculation.
Observed time answers when the source says the condition occurred. Received/fetched time answers when Weatherman obtained or calculated the record. Keeping both prevents delayed feeds from being mistaken for current conditions.
Forecast
A value generated by Weatherman for a future target time. Forecasts preserve their issue time, target or validity time, product provenance, source inputs, raw payload, and fallback details.
Forecasts are stored separately from observations. Historical forecasts are not rewritten when the model improves; this keeps backtests honest and makes later comparisons replayable.
Product Name
The short, human-readable name shown after Model: on the dashboard, such as Daily Local Forecast. Product names describe the whole forecast product.
Provenance
The detailed internal identifier preserved in stored records, such as daily.local_weatherman_persistence_plus_diurnal. Provenance identifies how a value was produced even when the dashboard uses a shorter product name.
Product name answers "what does this forecast mean to a person?" Provenance answers "which stored implementation and component path produced it?" Both are retained because readable names and reproducible technical history serve different purposes.
Issue Time and Target Time
Issue time is when Weatherman created the forecast. Target time is when the forecast applies. A forecast can only be evaluated after its target time and after an appropriate observation is available.
All stored times are UTC text internally, with the relevant local timezone preserved separately. The dashboard converts them to America/Vancouver for human display.
Freshness
Freshness describes how recently a source observation, calculation, or synchronization completed. A stale source may still be historically useful, but it should not be treated as current input without an explicit fallback or warning.
Freshness is separate from validity. A record can be old but historically valid, or recent but rejected/failed. The dashboard therefore displays source freshness, fetch status, and sync status as separate signals.
Data Sources and Authority
The Raspberry Pi is the operational authority. It collects UV-6 observations, BMP280 pressure, ECCC observations, hydrometric data, BC Wildfire Service snapshots, forecasts, recordbook summaries, and Skyfield events. HostGator is a synchronized read-only presentation and backup layer, not the master collector.
The Mac retains a recovery/development copy and must not run as a parallel collector or publisher. The dashboard cannot fetch live data, generate forecasts, or repair records.
Skyfield Astronomical Events
Skyfield calculates deterministic moonrise, moonset, lunar transit, sunrise, sunset, and lunar phase events locally for Hope using a cached JPL ephemeris. The sole active astronomical source is currently Skyfield; retired USNO records remain only as historical provenance.
The Pi precomputes the next local calendar day's daily events before midnight so the dashboard does not normally have a date-boundary gap. Event times are stored in UTC and displayed in America/Vancouver. The ephemeris version is preserved with the result.
Rain Counter and Current Spells
The UV-6 rain value is a cumulative counter. Weatherman reconstructs rainfall from non-negative increases between observations; counter decreases are treated as resets and are not counted as rain.
A wet day has positive reconstructed rainfall. A dry day has none. Current dry and wet spells are mutually exclusive: the active spell has a day count, while the other is displayed as Inactive. Completed-day recordbook spells require adequate observation coverage; the current partial local day is handled separately.