Skip to content

LumaSync v1.5.2

Latest

Choose a tag to compare

@github-actions github-actions released this 05 May 07:41

Added

  • Keyboard input for per-edge LED counts and stand-gap in LED Setup, allowing direct numeric entry instead of stepper-only interaction.
  • First close-to-tray OS notification guides new users who wonder where the app went after closing the window.
  • Frontend console.* calls are now bridged to tauri-plugin-log's file sink, so [webview] records appear alongside Rust log entries in the platform log file — runtime debugging no longer requires an open DevTools window.

Changed

  • Polling discipline tightened across telemetry and Hue health checks: all intervals pause when the window is hidden and resume on visibility, reducing CPU and battery draw when LumaSync is running in the background.
  • Boot sequence streamlined: Hue credential validation is de-duplicated (previously fired twice on some paths) and the updater check is hoisted to run earlier, so the first-launch experience is snappier.
  • RoomMap editor migrated to amber Rev 07 design tokens with a 32 px minimum tap-target floor throughout the dock and toolbar.
  • Compact-mode deep-links to non-LIGHTS sections now auto-expand to full-window mode so the target panel is always visible.
  • Window position persistence anchored by window center instead of top-left corner, with a monitor-clamp guard that snaps the window on-screen if the saved position falls outside the current display geometry.
  • Release pipeline (release.yml) now runs the same Rust hardening gate as ci.yml before any tag-triggered build — cargo fmt --check, cargo clippy -D warnings, cargo test --all-features — closing the gap that previously let lint regressions or integration-test failures slip through to a release artefact.
  • CI: pnpm/action-setup bumped v4 → v6 to clear the Node 20 deprecation warning; workflow concurrency and release idempotency (allowUpdates) tightened.
  • Rust deps: mdns-sd 0.13.11 → 0.19.1 (major); ResolvedService surface adapted in the mDNS registry; Cargo.lock transitive graph refreshed on the 2.11.x Tauri line.

Fixed

  • macOS lifecycle hardened: Cmd+Q, tray Quit, and Ctrl+C now all route through a single kick_off_shutdown_and_die path. Two follow-up regressions from the initial rewrite are resolved — the tauri-plugin-single-instance socket is no longer leaked on watchdog exit (which caused the next dev launch to exit within ~50 ms), and stop_hue_stream is detached onto a worker thread with a 1.5 s abandon timeout so it cannot blow the 4 s watchdog.
  • macOS tray icon now ships as a template image (monochrome silhouette), so it renders at the correct size and respects Dark/Light menu bar mode.
  • Non-USB serial port types (Bluetooth, PCI, Unknown) are rejected with PORT_UNSUPPORTED before serialport::open() is called. Previously, opening /dev/cu.Bluetooth-Incoming-Port silently accepted writes while the LED strip stayed dark.
  • Boot output-target recovery: persisted empty [] targets are no longer overwritten with defaults on every launch; the PORT_UNSUPPORTED subscriber auto-adds Hue when a bridge is paired and Hue was not already active; a separate boot path prevents paired-Hue-only users from being stranded in OFF state on restart.
  • WLED backend–frontend wire mismatch: request/response payload shapes for discover, connect, and test were misaligned, causing the picker to render empty and the Connect/Test buttons to fail with MissingField. All three command pairs are now aligned; WledTestResponse reports a real round-trip in milliseconds.
  • WLED: additional validation rejects led_count == 0 at connect time (WLED_INVALID_LED_COUNT) and extends the SSRF guard to also block loopback, unspecified, multicast, and broadcast addresses (WLED_INVALID_IP).
  • Output-target delta-stop no longer evicts a chip from active membership when the underlying stop call fails — the chip stays active so the user can retry, and a transient banner identifies which target needs attention.
  • Hue stream shutdown emits a DTLS close_notify alert and de-dupes foreground/background deactivate calls via a single-shot atomic token, so the bridge clears its "active streamer" slot immediately and the latent HUE_STREAM_NOT_READY_ACTIVE_STREAMER 403 on the next session start is eliminated.
  • RoomMap rename dialog: ESC now cancels from any focused element; Tab cycles input → cancel → confirm; aria-labelledby IDs are generated with useId() to prevent DOM collisions on re-mount.

Security

  • WLED IP validation extended: loopback (127.0.0.0/8), unspecified, multicast, and broadcast addresses are now rejected with WLED_INVALID_IP, layered on top of v1.5.1's parser-level SSRF guard.