Skip to content

feat(read): rich device detail + get_dependencies + get_device_group - #36

Merged
simons-plugins merged 3 commits into
mainfrom
feat/read-wave
Jul 22, 2026
Merged

feat(read): rich device detail + get_dependencies + get_device_group#36
simons-plugins merged 3 commits into
mainfrom
feat/read-wave

Conversation

@simons-plugins

Copy link
Copy Markdown
Owner

Closes #33, closes #34, closes #35. Stacked on #32 — merge #32 first, retarget before deleting its branch.

  • Rich get_device_by_id — full states dict (enumerated-option duplicate keys dropped) + curated subclass attributes (battery, sensorValue, displayStateValUi, hvac/setpoints, speed, sprinkler zones, energy, timestamps, protocol). None-valued attributes omitted; list tools deliberately keep the slim shape.
  • get_dependenciesgetDependencies on device/variable/trigger/schedule/action_group with a total_dependents rollup; descriptions steer agents to check before destructive ops.
  • get_device_groupgetGroupList + serialised root device with battery, resolving the null-battery-on-child-endpoint confusion on multi-endpoint Z-Wave modules.
  • Existence pre-validation + unknown-arg rejection per the wave-hardening conventions. 356 tests (6 new). 2026.6.2 → 2026.7.0 (68 tools).

🤖 Generated with Claude Code

https://claude.ai/code/session_01EYAGXd4bE9D9Z5kZeSHeo7

- get_device_by_id now returns the full states dict (enum-dup keys
  dropped) plus curated subclass attributes: battery, sensor value +
  UI display value, hvac modes/setpoints, speed index/level,
  sprinkler zones, energy, lastChanged/lastSuccessfulComm, protocol.
  List tools keep the slim shape for prompt economy.
- get_dependencies wraps getDependencies on all five entity
  namespaces — check before variable_delete / device_enable(false).
- get_device_group wraps getGroupList and serialises the root device
  (batteryLevel lives only on the root of multi-endpoint modules).
  66 -> 68 tools.

Closes #33, closes #34, closes #35.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYAGXd4bE9D9Z5kZeSHeo7
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 7aba2c8a-570d-405f-bc7c-e5c90297f832

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/read-wave

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

simons-plugins and others added 2 commits July 22, 2026 21:07
…te filter, honest unknowns

- _serialize_device_detail counts getter failures into attr_read_errors
  so a broken IOM can't read as 'device has no attributes'.
- State dot-filter now drops a dotted key only when its base state
  exists (true sub-state signature: enum options, .ui strings) — a
  genuine dotted state id survives.
- get_dependencies reports total_dependents: null for unrecognised
  shapes instead of a false 0 the description tells agents to trust.
- get_device_group's vanished-root catch narrowed to the lookup;
  serializer bugs now surface loudly.
- Coverage: all five getDependencies namespaces asserted against the
  mock (camelCase actionGroup pinned), wire-path dispatch for
  get_dependencies, detail shape through _get_device_handler,
  attr_read_errors, non-list/mixed getGroupList, unknown-shape
  fallback. 362 tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYAGXd4bE9D9Z5kZeSHeo7
@simons-plugins
simons-plugins changed the base branch from fix/release-tag-race to main July 22, 2026 20:21
@simons-plugins
simons-plugins merged commit c9cda9e into main Jul 22, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant