• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

zwave-js / zwave-js-ui / 19273238312
20%

Build:
DEFAULT BRANCH: master
Ran 11 Nov 2025 05:15PM UTC
Jobs 1
Files 68
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

11 Nov 2025 05:14PM UTC coverage: 20.142% (-0.03%) from 20.168%
19273238312

push

github

web-flow
fix: changedZwaveKeys incorrectly includes UI defaults as changes (#4454)

The recent feature to update driver options without restart (PR #4413)
fails because `changedZwaveKeys` includes properties that weren't
actually modified by the user—specifically, default values added by the
UI that don't exist in stored settings.

## Root Cause

```typescript
// Before: Only checks keys in NEW settings
changedZwaveKeys = Object.keys(settings.zwave || {}).filter(
  (key) => !utils.deepEqual(actualSettings.zwave?.[key], settings.zwave?.[key])
)
```

When the UI sends settings, it includes all properties with defaults.
Keys present in new settings but absent in stored settings are detected
as "changed", even if the user only modified logging settings. If these
keys aren't in `editableZWaveSettings`, the system incorrectly requires
a restart.

## Changes

```typescript
// After: Check keys from both old AND new settings
const allKeys = new Set([
  ...Object.keys(actualSettings.zwave || {}),
  ...Object.keys(settings.zwave || {}),
])
changedZwaveKeys = Array.from(allKeys).filter(
  (key) => !utils.deepEqual(actualSettings.zwave?.[key], settings.zwave?.[key])
)
```

This ensures only keys with actual value differences are detected as
changed, not keys added as UI defaults.

Added debug logging to surface which keys changed and why restart is
required when troubleshooting similar issues.

> [!WARNING]
>
> <details>
> <summary>Firewall rules blocked me from connecting to one or more
addresses (expand for details)</summary>
>
> #### I tried to connect to the following addresses, but was blocked by
firewall rules:
>
> - `224.0.0.251`
> - `firmware.zwave-js.io`
>   - Triggering command: `node server/bin/www.js` (dns block)
>
> If you need me to access, download, or install something from one of
these locations, you can either:
>
> - Configure [Actions setup
steps](https://gh.io/copilot/actions-setup-steps) to set up my
environment, which run before the firewall is enabl... (continued)

333 of 441 branches covered (75.51%)

Branch coverage included in aggregate %.

0 of 37 new or added lines in 1 file covered. (0.0%)

4048 of 21310 relevant lines covered (19.0%)

1.18 hits per line

New Missed Lines in Diff

Lines Coverage ∆ File
37
0.0
0.0% api/app.ts
Jobs
ID Job ID Ran Files Coverage
1 19273238312.1 11 Nov 2025 05:15PM UTC 68
20.14
GitHub Action Run
Source Files on build 19273238312
  • Tree
  • List 68
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 371032c6 on github
  • Prev Build on master (#19229937753)
  • Next Build on master (#19273323451)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc