Python SDK live on PyPI: pip install amanoki. Typed Client / AsyncClient covering every current endpoint, RFC 7807 error subclasses.
Per-IP rate limit (60 rpm, token bucket) at the app layer. 429 body is application/problem+json; Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset all set.
Errors go out as RFC 7807 application/problem+json with {type, title, status, detail, instance}. The type URI points at the methodology section for the relevant failure class.
Every 2xx JSON response now carries an _meta block (api version, methodology URL, not-advice notice).
Weather cache refreshes every 60 minutes in a background task; weather_staleness_warning on regime-forecast responses when the last fetch is older than 2 h.
Regime-forecast responses gain confidence_caveat (majority-class over-confidence) and untrained_classes (classes with zero training frequency).
/v1/admin/usage hides presence behind 404 when the token is missing or wrong. /v1/health/deep added. Root / returns service-discovery JSON.
Live regime-forecast now serves a multinomial logistic regression trained with a 24-bar embargo.
Features: v1 (area + UTC hour + is-weekend + current z-vol + five Open-Meteo vars) plus z-vol lags at t-1/-2/-6/-24 and regime one-hot at t-1.
Winner-per-horizon chosen by test Brier on an identical held-out; v1.5 wins all three horizons.
Test Brier: 0.017 @ 60 min · 0.032 @ 120 min · 0.075 @ 240 min (baseline ≈ 0.43).
An ESN reservoir-computing v2 was scaffolded and scrapped on service-fit grounds (state management, embargo, serve-time weather sequence alignment); the simpler lag-augmented v1.5 was shipped instead.