diff --git a/CHANGELOG.md b/CHANGELOG.md index e4daae08..63363bc6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ All notable changes to `mostlyright`. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.8.0] — 2026-06-19 — GOES ABI L2 satellite ingest (free local tier) + +Minor release: a new optional extra **`mostlyrightmd-weather[satellite]`** adds local-first GOES-16/19 ABI Level-2 single-pixel extraction at station locations, mirroring the `[nwp]` extra and the `forecast_nwp()` pipeline shape. + +### Added +- **`weather.satellite()` fetcher + `[satellite]` optional extra** ([#78](https://github.com/mostlyrightmd/mostlyright-sdk/pull/78), Phase 25). Reads anonymous public NOAA NODD buckets (AWS `noaa-goes16/19`, GCP mirror) directly — no hosted backend — and returns a leakage-safe DataFrame of single-pixel ABI L2 derived products extracted at a station's ICAO lat/lon. Covers **GOES-16 and GOES-19** (the GOES-East lineage) across **10 products / 18 variables**: `ABI-L2-ACMC` (cloud/clear-sky mask — the primary CONUS product), `LSTC`, `TPWC`, `ACHAC`, `CTPC`, `AODC`, `DSIC` (stability indices), `DSRF` (downward shortwave radiation — full-disk, gated behind a one-time warning), and the 3D vertical profiles `LVMPC` / `LVTPC`. + - **`schema.satellite.v1`** with source identity `"noaa_goes"` (shared by live self-extraction and the future paid adapter so a cross-delivery model reconciles), a per-row `delivery` lineage enum `{live, hosted}` (informational only, NOT source-identity), `qc_status` (annotate-never-drop: `clean`/`flagged`/`suspect`), ICAO `^[A-Z]{4}$` station identity, and event-time (`scan_start/end`) vs knowledge-time (`as_of`) wiring through `KnowledgeView` so satellite is leakage-safe in `research()`/backtests. + - **Whole-file S3/GCS transport** (single full-object read into memory, not byte-range), a parquet cache tier at `~/.mostlyright/cache/satellite/...`, and a **fleet-ready backfill CLI** (`python -m mostlyright.weather.satellite backfill`) with crash-safe resume, an AWS/GCP `--mirror` selector, and an on-demand throughput probe. + - Lazy-imports the heavy deps (`boto3`/`s3fs`/`gcsfs`/`h5netcdf`/`xarray`) inside the public function — the module imports cleanly without the extra and raises `SourceUnavailableError` with a `pip install mostlyrightmd-weather[satellite]` hint when it is absent. + +### Notes +- Dual version bump: PyPI `1.8.0` (`mostlyrightmd`, `mostlyrightmd-weather`, `mostlyrightmd-markets`) and npm `vts-1.8.0` (`@mostlyrightmd/core`, `@mostlyrightmd/weather`, `@mostlyrightmd/markets`, `mostlyright`). **This release is Python-only** — the TypeScript satellite reader is a deferred parity ticket (future `h5wasm` impl) per `CROSS-SDK-SYNC.md`; the npm `1.8.0` carries no satellite surface and bumps for version parity only. +- Known follow-ups (tracked, non-blocking — the bulk backfill is the not-yet-run path): wire cached-partition reads into `satellite(cache=True)`; have the backfill write finalized (schema-shaped) rows; add dead-PID/stale-lock recovery to the backfill progress lock. + ## [1.7.0] — 2026-06-12 — GEFS/CFS ensemble member selection Minor release: `forecast_nwp()` gains a `member=` ensemble-member selector for GEFS and CFS. diff --git a/packages-ts/core/package.json b/packages-ts/core/package.json index f95f1bf6..7e1e6c37 100644 --- a/packages-ts/core/package.json +++ b/packages-ts/core/package.json @@ -1,6 +1,6 @@ { "name": "@mostlyrightmd/core", - "version": "1.7.0", + "version": "1.8.0", "description": "TypeScript SDK core for quants, ML pipelines, and AI agents: types, schemas, validators, temporal-safety primitives, and the research() join over weather data + prediction-market settlements. Local-first, no hosted backend.", "keywords": [ "weather", diff --git a/packages-ts/markets/package.json b/packages-ts/markets/package.json index 6430d5ec..4abd679a 100644 --- a/packages-ts/markets/package.json +++ b/packages-ts/markets/package.json @@ -1,6 +1,6 @@ { "name": "@mostlyrightmd/markets", - "version": "1.7.0", + "version": "1.8.0", "description": "Prediction-market data for TypeScript / Node — Kalshi NHIGH/NLOW weather-contract resolvers, Polymarket discovery + settlement, and Kalshi + Polymarket trade history. For quants, backtesting, and ML training pipelines.", "keywords": [ "kalshi", diff --git a/packages-ts/meta/package.json b/packages-ts/meta/package.json index 2ac57255..56ed83e3 100644 --- a/packages-ts/meta/package.json +++ b/packages-ts/meta/package.json @@ -1,6 +1,6 @@ { "name": "mostlyright", - "version": "1.7.0", + "version": "1.8.0", "description": "Public-data SDK for TypeScript — one import for quants, ML pipelines, and AI agents. Adapters ship weather (METAR, ASOS, GHCNh, NWS CLI) and prediction-market settlements (Kalshi NHIGH/NLOW, Polymarket) today; SEC filings, Federal Reserve series, court filings, FDA approvals, and equities are next. Local-first, no hosted backend.", "keywords": [ "weather", diff --git a/packages-ts/weather/package.json b/packages-ts/weather/package.json index 1200ecda..5e9ec0b4 100644 --- a/packages-ts/weather/package.json +++ b/packages-ts/weather/package.json @@ -1,6 +1,6 @@ { "name": "@mostlyrightmd/weather", - "version": "1.7.0", + "version": "1.8.0", "description": "Weather data for TypeScript / Node — live METAR (AWC), ASOS archive (IEM), historical observations (GHCNh), and NWS climate text products (CLI). For quants, ML training pipelines, and weather-bot agents. Direct public-API access, no hosted backend.", "keywords": [ "weather", diff --git a/packages/core/pyproject.toml b/packages/core/pyproject.toml index 79110237..1f6e0e02 100644 --- a/packages/core/pyproject.toml +++ b/packages/core/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "mostlyrightmd" -version = "1.7.0" +version = "1.8.0" description = "Python SDK for quants, ML engineers, and AI agents — one interface to public data. Adapters ship weather + prediction-market settlements (Kalshi NHIGH/NLOW, Polymarket) today; SEC filings, Federal Reserve series, court filings, FDA approvals, and equities are next. Schema-versioned, leakage-free, local-first. Imports as `mostlyright`." readme = "README.md" license = "MIT" diff --git a/packages/markets/pyproject.toml b/packages/markets/pyproject.toml index e440b947..b8a42550 100644 --- a/packages/markets/pyproject.toml +++ b/packages/markets/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "mostlyrightmd-markets" -version = "1.7.0" +version = "1.8.0" description = "Prediction-market data for Python — Kalshi NHIGH/NLOW weather-contract resolvers, Polymarket discovery + settlement, and Kalshi + Polymarket trade history. For quants, backtesting, and ML training pipelines. Imports as `mostlyright.markets`." readme = "README.md" license = "MIT" diff --git a/packages/weather/pyproject.toml b/packages/weather/pyproject.toml index 479efc57..84d2c032 100644 --- a/packages/weather/pyproject.toml +++ b/packages/weather/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "mostlyrightmd-weather" -version = "1.7.0" +version = "1.8.0" description = "Weather data for Python — live METAR (AWC), ASOS archive (IEM), historical observations (GHCNh), and NWS climate text products (CLI). For quants, ML training pipelines, and weather-bot agents. Direct public-API access, no hosted backend. Imports as `mostlyright.weather`." readme = "README.md" license = "MIT" diff --git a/uv.lock b/uv.lock index 8dea959f..a96c9fb5 100644 --- a/uv.lock +++ b/uv.lock @@ -1366,7 +1366,7 @@ wheels = [ [[package]] name = "mostlyrightmd" -version = "1.7.0" +version = "1.8.0" source = { editable = "packages/core" } dependencies = [ { name = "httpx" }, @@ -1410,7 +1410,7 @@ provides-extras = ["parquet", "research", "polars"] [[package]] name = "mostlyrightmd-markets" -version = "1.7.0" +version = "1.8.0" source = { editable = "packages/markets" } dependencies = [ { name = "httpx" }, @@ -1460,7 +1460,7 @@ provides-extras = ["parquet", "polymarket", "trades", "polars"] [[package]] name = "mostlyrightmd-weather" -version = "1.7.0" +version = "1.8.0" source = { editable = "packages/weather" } dependencies = [ { name = "filelock" },