Forecast: the read side
The briefing capability is the published site-forecast contract and everything that is a pure function of it — validation, derivation, analysis, comparison across models and across a model’s own successive runs, transport, and the append-only history. If a result is meaningful without a chart, it lives here.
The package has two tiers. The data tier — contract, derivations,
analysis, comparison, transport, history — needs no DOM and produces typed
values and findings. The presentation tier — /meteogram — is
the Meteogram: a validated document becomes a serializable scene graph,
and the scene becomes deterministic SVG. Every surface is an explicit
subpath of @azohra/meteo.briefing:
import { parseSiteForecastJson } from "@azohra/meteo.briefing/contract";import { analyzeForecast } from "@azohra/meteo.briefing/analyze";import { buildMeteogramScene, renderMeteogramSvg } from "@azohra/meteo.briefing/meteogram";The producing side — the engine that samples providers and publishes the
documents this capability consumes — is
@azohra/meteo.forecast. /history is the one Node-only
subpath (node:zlib).
The documentation
Section titled “The documentation”Each page is the single authority for its topic. Start with Render a first Meteogram to see both tiers in one working example.
The data tier
Section titled “The data tier”| Page | Covers |
|---|---|
| Contract validation | Accepting profile, manifest, model, site, and run-index documents at an explicit trust boundary |
| Load published documents | Fetching consistent publications — run-stamp guards, retries, misses discriminated from failures |
| Pure derivations | Pure quantities from published state, local-day projection, valid-time alignment |
| Analyze a profile | analyzeForecast: typed findings over one forecast, with thresholds and evidence attached |
| Compare model profiles | compareForecasts / compareAnalyses: cross-model agreement, spread, and divergence for one site |
| History and run convergence | The append-only month-archive reader and compareRuns convergence |
The presentation tier
Section titled “The presentation tier”| Page | Covers |
|---|---|
| Render a first Meteogram | Validate one profile and serialize a reference chart with its scene-derived key |
| Build a scene graph | Serializable geometry and hit-testing from one validated profile |
| Render SVG and a scene-derived key | Deterministic SVG from a scene, styled by package tokens |
| Defaults and tokens | Configuring the reference scene and renderer through options and tokens |
| Reading a Meteogram | What every mark on the rendered chart means, and how to read it |
Recipes
Section titled “Recipes”Two pages document state the package deliberately does not ship, as recipes over its pure queries and transports:
| Page | Covers |
|---|---|
| Wire an inspector | Pointer, keyboard, and pinned selections over the scene’s pure queries |
| Run an ingest | The store-and-serve loop: poll runs.json, ingest coherent publications, serve through gaps |
JSON Schema for the published documents lives in
schema/,
with committed annotated examples — the same convention the station wire
schemas follow in their own package.