- Introduce internal/providers/nws with shared timestamp parsing used by both
NWS sources and normalizers
- Migrate NWS observation source + normalizer to use the shared provider helper
for consistent RFC3339/RFC3339Nano handling
- Introduce internal/providers/openweather with a shared URL invariant helper
enforcing units=metric
- Remove duplicated OpenWeather URL validation logic from the observation source
- Align provider layering: move provider “contract/quirk” logic out of
normalizers and into internal/providers
- Update normalizer and standards documentation to clearly distinguish:
provider helpers (internal/providers) vs canonical mapping logic
(internal/normalizers)
This refactor reduces duplication between sources and normalizers, clarifies
layering boundaries, and establishes a scalable pattern for future forecast
and alert implementations.