Release Notes v1.1.0
Released: 2026-04-08
This release cuts SignalRGB API polling in half, adds granular error diagnostics, and fixes entity ID breakage on Home Assistant 2026.02+. The development stack moves fully to the Astral toolchain (ruff + ty + uv), the CI pipeline adopts shared reusable workflows, and the minimum requirement jumps to Home Assistant 2026.4.0 with Python 3.14.2+.
🌟 Highlights
⚡ Halved API Polling Cost
The coordinator now calls get_current_state() + get_effect(state.id) instead of three separate calls (get_current_effect + get_enabled + get_brightness). API round-trips per poll cycle drop from 4 to 2 — applied in light.py coordinator updates, _delayed_refresh, and button.py press handlers.
🐛 Granular Exception Handling
The blanket SignalRGBException catch is replaced with specific handlers for SignalRGBConnectionError, NotFoundError, and APIError. Users now see actionable messages in the HA log — connection errors include the host, API errors include err.code and err.detail. The coordinator raises UpdateFailed instead of HomeAssistantError, preventing refresh cycle crashes.
🐛 Entity ID Compatibility Fix
Explicit self.entity_id assignments are removed from light.py, button.py, and select.py. Home Assistant 2026.02 tightened entity ID validation and rejected the uppercase ULID characters from config_entry.entry_id. Entities now use HA's idiomatic auto-generation from unique_id + device name. Fixes #13, closes #14, closes #15.
🔧 Astral Toolchain Migration
pylint and mypy are replaced by ruff (lint + format) and ty (type checking). Ruff line-length moves from 88 to 100. The Makefile gains typecheck, fix, and coverage targets, and make check now runs lint → typecheck → test in sequence.
👷 CI Overhaul and Release Pipeline
The monolithic ci-cd.yml is replaced by two focused workflows: ci.yml (shared hyperb1iss/shared-workflows/python-ci.yml@v1 + local typecheck and HACS validation) and release.yml (a workflow_dispatch pipeline that bumps versions in manifest.json and pyproject.toml, verifies the build, commits, tags, and creates a GitHub Release with AI-generated notes via git-iris).
⚡ Performance
- Coordinator polling reduced from 4 API calls to 2 per cycle using
get_current_state()inlight.pyandbutton.py - Setup probe switched from
get_current_effect()toget_current_state()in__init__.py— 1 call instead of 2 - Connection errors during setup logged at
WARNING(retries expected) rather thanERROR, reducing log noise during SignalRGB restarts
🐛 Bug Fixes
- Entity ID breakage on HA 2026.02+: Removed hardcoded
entity_idassignments that contained uppercase ULID characters, letting HA auto-generate valid IDs (#13, #14, #15) - Coordinator crash on API errors:
UpdateFailedreplacesHomeAssistantErrorin the coordinator update function —DataUpdateCoordinatoronly handlesUpdateFailed, so the old exception would crash the refresh cycle - CI deadlock: Removed caller-side concurrency group from
ci.ymlthat conflicted with the shared workflow's own concurrency handling - Pre-commit ruff-format bug: Fixed a copy-pasted
filesregex that excludedcustom_components/from formatting - Missing trailing newline in
translations/en.json
⬆️ Dependencies
- Home Assistant: >=2025.7.1 → >=2026.4.0
- Python: >=3.13.2 → >=3.14.2
- signalrgb SDK: >=1.0.1 → >=1.0.2 (PEP 695 type params, dead
requests.Sessionremoval) - pytest:
==8.4.0→>=8.4.1(relaxed pin for compatibility) - ruff: v0.9.10 → v0.15.9 in pre-commit
- pre-commit-hooks: v5 → v6
- Added:
ty>=0.0.28for type checking - Removed:
pylint,mypy, legacyrequirements.txt
🔧 Developer Experience
- New Makefile targets:
make typecheck(ty),make fix(ruff auto-fix + format),make coverage(HTML report) make checknow runs lint → typecheck → test as a single command- Pre-commit gains safety hooks:
check-json,check-toml,check-added-large-files(1 MB),check-merge-conflict,detect-private-key,check-case-conflict,mixed-line-ending --fix=lf - Stricter pytest:
--strict-markers,--strict-config, branch + parallel coverage withshow_missing - All source reformatted to line-length 100
📝 Documentation
- README modernized:
for-the-badgebadges, HACS Default badge (integration accepted into the default repository), HA 2026.4+ and Python 3.14+ compatibility badges, Astral stack development section with Make target table - CHANGELOG.md added following Keep a Changelog format with historical entries for v1.0.1, v1.0.0, and earlier
- HACS install instructions updated — custom repository workaround removed, replaced with standard HACS default flow
💥 Breaking Changes
- Home Assistant 2026.4.0+ required — Users on HA 2025.x must upgrade Home Assistant before installing this version. Python 3.14.2+ is also required (bundled with HA 2026.4+).
- Entity IDs will change on upgrade — Explicit entity IDs like
light.signalrgb_<ulid>are replaced by HA auto-generated IDs (typicallylight.signalrgb). Automations, scripts, and dashboard cards referencing the old entity IDs must be updated.
📋 Upgrade Notes
- Update Home Assistant to 2026.4.0 or newer before upgrading this integration
- Check your automations and scripts for hardcoded entity IDs — after upgrade, entity IDs will be auto-generated by HA (e.g.,
light.signalrgbinstead oflight.signalrgb_<entry_id>). Update references accordingly. - HACS users: The integration is now in the HACS default repository — no custom repository configuration needed
- Developers: Run
uv syncto pick up the newtydependency and droppedpylint/mypypackages. Usemake checkfor the full lint → typecheck → test pipeline.