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
4.3 KiB
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_idis now threaded end-to-end throughDeviceCreate/DeviceUpdate/DeviceResponseand 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/graphreturns the full nodes + edges + validation topology, andGET /api/v1/graph/dependents/{kind}/{id}reports what references an entity (a5effba)
Aggregated snapshot endpoint
- New
GET /api/v1/snapshotreturns 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_deviceno longer masks an intentional 4xx (e.g. an unknownmqtt_source_idor 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.
homeassistantvsandroid). 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_iddevice 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 |