Listening for events…

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+WBAN 11-digit id, name, country, state, ICAO call, 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+WBAN station id (validator pattern ^\d{11}$).
  • Fields: name, icao call, state, country, latitude, longitude, elevation_m, period_of_record (begin/end/years), and the LCD series references (lcd_access_url for the 2023 file, lcd_series_url_template for 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.
Live Feed