v0.3.0
Sunsteer v0.3.0
A hardening and portability release — no breaking changes (the /state contract stays schema: 1). Compose users upgrade by pulling the new images; Kubernetes users get a ready-to-adapt
manifest base.
✨ Highlights
- Pluggable relay drivers (RELAY_DRIVER) — the relay is now abstracted like the meter, with a documented relay interface.
- Kubernetes manifests (deploy/k8s/) — non-root kustomize base with an automatic db-migrate Job and pinned images.
- CSRF protection on the UI, loopback-by-default binding for the UI and Grafana, and non-root containers.
- Supply chain: digest-pinned base images, SHA-pinned Actions, and SBOM + SLSA provenance on every released image.
- CI now gates on ruff, pip-audit, and a real-TimescaleDB integration smoke.
🔒 Security
- Dependency bumps clearing known CVEs (starlette → 1.0.x, plus fastapi/jinja2/python-multipart).
- CHANGE_ME placeholders for credentials keep the UI fail-closed and make services fail fast.
🐛 Fixed
- Forecast honors PV_TZ; exporter threads no longer die silently; the UI degrades gracefully on DB outages; relay "success" requires a non-error RPC body; the hardware auto-off watchdog
is enforced.
Full detail in the CHANGELOG.