2.9 KiB
Weather Data Internals
This document describes Weather API ingestion into weatherdata.Bundle.
Purpose
internal/adapters/weatherapi fetches normalized weather data from one
configured Weather API endpoint and assembles the bundle consumed by forecast
derivation and module builders. Module builders expose normalized current
conditions and weather story context when those sources are available.
Inputs And Outputs
Inputs:
config.Configwith Weather API URL, timeout, format, units, timezone, precision, and missing-source policy- HTTP responses using the Weather API
dataenvelope
Outputs:
weatherdata.Bundlewith observation, current conditions, hourly forecast, narrative forecast, active alerts, discussion, latest weather story, source records, and source warnings- stub source record for the daily forecast source slot
- optional saved bundle JSON through app fetch helpers
Boundaries
- The adapter owns HTTP calls, response-envelope handling, source hashing, and decoding into internal bundle types.
- It does not derive dayparts, resolve report periods, build module values, compare snapshots, write report state, or invoke Scriptorium.
Config Fields Used
weather_api.base_urlweather_api.timeoutweather_api.formatweather_api.unitsweather_api.timezoneweather_api.precisionmissing_source.defaultmissing_source.sources
External Adapters Used
- Weather API HTTP service
See Weather API integration for the external contract used by this project.
State Or Manifest Behavior
The adapter records source name, endpoint, query, fetch time, source timestamps
when available, SHA-256 hash over compact raw data JSON, missing status, and
source warnings. Successful data: null responses from /alerts/active
represent a checked empty active-alert list, not a missing source.
app.FetchAndSaveBundle can write bundle JSON atomically for inspection.
Skip And Resume Behavior
No resume behavior. Optional missing or malformed sources may be omitted, warned, or treated as errors according to missing-source policy. Hourly forecast data is required and cannot be skipped.
Failure Behavior
- Missing or invalid
weather_api.base_urlprevents client construction. - HTTP errors, response read failures, and envelope decode failures include endpoint context.
- Missing hourly data or hourly forecasts with no periods fail bundle fetch.
- Optional and stub sources follow missing-source policy.
- Explicit
data: nullfrom/alerts/activeproduces an empty, non-missing alert run.
Tests
Inspect:
internal/adapters/weatherapi/client_test.gointernal/app/app_test.go
Invariants
- Weather facts come from normalized source data.
- Full hourly and narrative products are fetched; Go owns report-period selection.
- Source provenance and warnings remain inspectable downstream.