Scope freeze — weather_station Locationdex (US NCEI LCD stations)
Frozen 2026-07-03. A new Locationdex kind. Built from NCEI's structured Local
Climatological Data (LCD) CSV feed after Mike pasted the 2023 LCD annual PDF directory
(ncei.noaa.gov/pub/access/cebrequests/2023lcdannual/) and greenlit building from the
CSV feed instead of the PDFs (feedback_integrate_sources_via_chat).
Why the CSV feed, not the pasted PDFs
The pasted URL is 266 US LCD annual-summary PDFs for a single year (2023) — a brittle
parse for one year of data. NCEI serves the same product as a structured CSV feed
(/data/local-climatological-data/) that is machine-readable and multi-year. Mike's call
2026-07-03: build the roster from the CSV feed. (Same lesson as the parked
engineering_climatology candidate: don't parse PDFs when a CSV feed exists.)
What it is
A roster-based Locationdex — the precipitation_station / radiosonde_station
pattern. The slot is one fixed US weather-observing station; it carries the station's
identity, coordinates, elevation, and period of record, and references its measured
LCD series (the NCEI access CSVs) rather than embedding it. LCD is measured NWS/ASOS
station meteorology: temperature, precipitation, wind, pressure, humidity.
- 2,784 stations, 53 states/territories. All geolocated.
- Longest records reach ~94 years (e.g. Boise KBOI, POR from 1931).
Roster source + membership
- Identity/coordinates/POR come from NOAA's ISD station history
(
isd-history.csv), the canonical station inventory:USAF+WBAN11-digit id, name, country, state,ICAOcall, lat/lon, elevation (m), begin/end. - Membership = US stations (
CTRY == US) that NCEI actually serves in the latest full LCD year (present in the 2023 access listing). This makes the roster a current US weather-station set, not the full historical or global ISD catalog. The 11-digit id is the join key between the inventory and the LCD feed. - A station id that appears more than once in ISD history (WBAN reuse) collapses to the row with the longest period of record, so the directory resolves one entry per station.
Slot = a weather station (Locationdex)
- Slot id: the 11-digit
USAF+WBANstation id (validator pattern^\d{11}$). - Fields: name,
icaocall,state,country,latitude,longitude,elevation_m,period_of_record(begin/end/years), and the LCD series references (lcd_access_urlfor the 2023 file,lcd_series_url_templatefor any year).series_embedded = false.
Measured reality vs held out (bright line)
feedback_measured_reality_only. LCD is measured station meteorology from NWS/ASOS
observations — a record of what the weather physically did at a fixed place. This build
carries the measured station and references its measured series; nothing modeled. This is
the measured counterpart to the held-out open_meteo forecast family (forecast model
output stays out; the fixed-site observations are in).
feedback_data_is_data_partial_coverage: a station with no coordinates would be kept with
lat/lon null (rare — all US-2023 stations are geolocated); short records are kept, the
period of record recorded as-is.
Storage + validation
Locationdex sibling storehouse data/location_storehouse/weather_station/<station_id>.json,
file-per-slot, via event_storehouse.write_dossier + rebuild_index_from_disk. The build
clears the kind dir first so removed stations never linger. It self-validates via
dex_validator.validate_kind_or_raise (required fields event_id/station_id/
station_type/latitude/longitude, id pattern ^\d{11}$, a slot check that flags a
non-weather_station type or missing coordinates). pytest logic tests pin the roster parse
(build_station_slot, station_id, parse_year_listing) in
tests/test_monitor/test_weather_station_locationdex.py.
Provenance
KIND_SOURCES["weather_station"] = ["ncei_lcd", "ncei_isd_history"] — the measured series
(LCD) and the station inventory (ISD history), both registered in KNOWN_SOURCES.
Deferred
- Per-station climatology deep-pull. The slot references the LCD access CSV; a later
pass can embed the summarized annual/monthly LCD rows (temperature normals/extremes,
precip totals, degree-days) as the measured record. This is the
precipitation_station"series deep-pull deferred" note. - Full history / global. Membership is anchored on the 2023 access year and US only; historical-only US stations and the global LCD set are a later expansion.
- Live edge. LCD updates as a periodic bulk product; a re-pull is a manual re-run.