Files
ledgrab/RELEASE_NOTES.md
alexei.dolgolyov 838c95484d
Build Release / create-release (push) Successful in 4s
Build Android APK / build-android (push) Failing after 22s
Build Release / build-linux (push) Successful in 2m54s
Build Release / build-windows (push) Successful in 4m50s
Build Release / build-docker (push) Successful in 6m34s
Build Release / publish-release (push) Successful in 4s
chore: release v0.9.0
2026-06-23 14:48:37 +03:00

8.2 KiB

v0.9.0 (2026-06-23)

A large feature release: a full activity/audit log, two roadmap batches of capture and smart-light improvements, per-pixel control for LIFX/Hue/Nanoleaf, and new outbound integrations (webhooks + Home Assistant MQTT discovery).

Features

Activity Log

  • Persistent activity/audit log: storage model with migration, recorder with actor context and retention, and event instrumentation across four categories (1ac4a0f, 726f39e, 25c613c)
  • REST API for list / export / settings / clear (4a09275)
  • Activity tab with smart filtering, live updates, and export, plus a dashboard widget and settings panel (9a0137f, 6e1dd21)

Per-pixel smart lights

  • LIFX multizone (SetExtendedColorZones) and Tile per-pixel streaming, auto-detected on connect with single-colour fallback (39b0554)
  • Philips Hue gradient-lightstrip mapping: Entertainment v2 frames keyed by channel id, with a hue_gradient_mode toggle (39b0554)
  • Nanoleaf extControl v2 per-panel UDP streaming (per_panel mode) (6745e25)

Capture & effects

  • Linear-light blending and spatio-temporal dithering, opt-in per calibration (6745e25)
  • Audio-reactive palette modulation across all 12 procedural effects (6745e25)
  • Color-harmony gradient generator (complementary / analogous / triadic / …) (6745e25)

Automations & integrations

  • Solar sunrise/sunset automation trigger (new utils/solar.py) (6745e25)
  • Outbound webhook automation action (Discord / IFTTT / Zapier / Node-RED), SSRF-gated at save and fire time (39b0554)
  • Home Assistant MQTT auto-discovery: read-only binary sensors per automation, availability via birth/will, with cleanup on disable/delete (39b0554)
  • League of Legends poller wired via a LoLPollManager + shared runtime state (6745e25)
  • auth.expose_docs flag (default off) to view /docs, /redoc, and /openapi.json without a token; all real endpoints stay protected (126d8f2)

Bug Fixes

  • Pre-release review hardening: solar timezone crash, webhook header CRLF, MQTT topic-prefix injection, thread-safe get_stats copy, MQTT discovery lock, reactive_mode Literal, and calibration-modal accessibility (0c096db)
  • Comprehensive review fixes across security, concurrency, performance, Android, and UI (17dd2e0)
  • Activity Log polish: accessible export menu, i18n placeholders, dashboard section reconciliation, column alignment, ticking time, and no spinner flash on instant filtering (3dd1ac3, ff1ff06, 77284e8, ae74cca, 077c99c)

Development / Internal

CI/Build

  • Best-effort arm64 multi-arch Docker manifest via QEMU + docker manifest (amd64 path untouched) (6745e25)

Chores

  • Activity Log feature plan/subplan scaffold, post-merge cleanup, and context graduated into CLAUDE.md (1afe7d6, e584235)

Tests: ~180 new unit tests added across the activity log, roadmap features, and integrations. Release gate green: ruff + tsc + build clean, pytest 2739 passed / 2 skipped.


All Commits
Hash Message Author
0c096db fix: address pre-release review findings (2026-06-23) alexei.dolgolyov
39b0554 feat: roadmap round two (2026-06-23) — per-pixel smart-lights + integrations alexei.dolgolyov
6745e25 feat: roadmap batch (2026-06-19) — solar/linear-light/dither/nanoleaf + integrations alexei.dolgolyov
126d8f2 feat(auth): add auth.expose_docs flag to view API docs without a token alexei.dolgolyov
e584235 chore(activity-log): post-merge cleanup + graduate context to CLAUDE.md alexei.dolgolyov
077c99c fix(activity-log): no spinner flash on instant filtering alexei.dolgolyov
ae74cca fix(activity-log): UI polish - accessible export menu, i18n placeholders, zero-result spinner fix alexei.dolgolyov
77284e8 fix(activity-log): dashboard section reconciliation + activity column alignment alexei.dolgolyov
ff1ff06 fix(activity-log): post-test polish - localize descriptions, dashboard widget, ticking time alexei.dolgolyov
3dd1ac3 fix(activity-log): final-review fixes - crosslink keys + sanitize parity alexei.dolgolyov
6e1dd21 feat(activity-log): phase 6 - dashboard widget + settings panel + docs alexei.dolgolyov
9a0137f feat(activity-log): phase 5 - Activity tab (smart filtering, live updates, export) alexei.dolgolyov
4a09275 feat(activity-log): phase 4 - REST API (list/export/settings/clear) alexei.dolgolyov
25c613c feat(activity-log): phase 3 - event instrumentation (4 categories) alexei.dolgolyov
726f39e feat(activity-log): phase 2 - recorder, actor context, retention, lifecycle alexei.dolgolyov
1ac4a0f feat(activity-log): phase 1 - storage model, migration, repository alexei.dolgolyov
1afe7d6 chore(activity-log): scaffold feature plan and phase subplans alexei.dolgolyov
17dd2e0 fix: resolve comprehensive review findings (security, concurrency, perf, Android, UI) alexei.dolgolyov