Files
ledgrab/RELEASE_NOTES.md
alexei.dolgolyov 6aeda935f1
Build Android APK / build-android (push) Failing after 11s
Build Release / create-release (push) Successful in 6s
Build Release / build-docker (push) Successful in 2m57s
Build Release / build-linux (push) Successful in 1m49s
Build Release / build-windows (push) Successful in 3m35s
Build Release / publish-release (push) Successful in 2s
chore: release v0.8.1
2026-05-28 23:35:35 +03:00

4.3 KiB

v0.8.1 (2026-05-28)

User-facing changes

Features

Multi-broker MQTT devices
  • The device editor now shows an MQTT broker picker for device_type=mqtt (in both the add-device and device-settings modals), wired into load / save / validate / dirty-check / clone. An empty selection means "first available broker"
  • mqtt_source_id is now threaded end-to-end through DeviceCreate / DeviceUpdate / DeviceResponse and the device routes; the referenced broker is validated on create and update (a5effba)
Schema-driven wiring-graph editor
  • The visual graph editor now renders ports and edges generically from a backend-served schema (GET /api/v1/graph/schema) instead of hard-coding the connectable-field topology in two places — so client and server can no longer drift
  • New GET /api/v1/graph returns the full nodes + edges + validation topology, and GET /api/v1/graph/dependents/{kind}/{id} reports what references an entity (a5effba)
Aggregated snapshot endpoint
  • New GET /api/v1/snapshot returns all output targets (with processing state + metrics), devices (with brightness), the source / preset / clock lists, and the system block in a single response — collapsing the Home Assistant integration's previous ~2N+M request fan-out into one round trip
  • ?include= fetches only a subset of sections, and an excluded section also skips its server-side work (e.g. cold-cache hardware brightness probes or the blocking NVML performance query) (a5effba)

Bug Fixes

  • Graceful shutdown no longer hangs: uvicorn's graceful-shutdown wait is now bounded (GRACEFUL_SHUTDOWN_TIMEOUT, shared by the desktop, Android, and demo launchers). A lingering events WebSocket (which the browser auto-reconnects) used to keep connections from draining, so the lifespan shutdown never ran — leaving LED targets lit and blocking process exit. Ctrl+C / OS shutdown with the UI open now reliably stops targets and checkpoints the DB (a5effba)
  • Device update error codes: update_device no longer masks an intentional 4xx (e.g. an unknown mqtt_source_id or failed group validation) as a generic 500 (a5effba)

Development / Internal

Backend

  • Wiring-graph schema engine (api/graph_schema.py): a pure, unit-tested module that is the single source of truth for which reference fields connect which entity kinds; builds the topology and performs dependency lookup plus cycle / dangling-reference detection without booting the app or any store. The route layer only gathers serialized entities and delegates (a5effba)
  • Structured access log: a new middleware emits one structured line per request, attributing it to the authenticated token's friendly label (the key name, never the secret) so traffic can be traced to a client (e.g. homeassistant vs android). uvicorn's own access log is disabled to avoid duplicate lines (a5effba)
  • Shared validate_mqtt_source_exists (_mqtt_validation.py) deduplicates the MQTT-source existence check between the device and output-target routes (a5effba)

Frontend

  • Service-worker refresh for the new bundle (a5effba)

Tests

  • New suites: graph routes + schema engine, snapshot routes, access-log middleware, mqtt_source_id device regressions, and the bounded-shutdown entrypoint. Full suite: 1614 passing (a5effba)

All Commits (1)
Hash Message Author
a5effba feat: aggregated snapshot + wiring-graph APIs, MQTT device brokers alexei.dolgolyov