Skip to content

release: 0.23.0 (seven builder defects and gaps, one bump) - #81

Merged
dcj merged 1 commit into
mainfrom
release/0.23.0
Aug 21, 2026
Merged

release: 0.23.0 (seven builder defects and gaps, one bump)#81
dcj merged 1 commit into
mainfrom
release/0.23.0

Conversation

@dcj

@dcj dcj commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Bumps __version__ to 0.23.0, promotes [Unreleased], adds the tag link. No code changes.

Seven issues, all filed by a consumer converting a multi-device adapter onto DeviceTreeBuilder, each with a runnable reproduction. Batched into one release rather than a patch now and a minor later, since every version bump costs a Yocto image rebuild downstream.

Fixed — all silent in production

#72 conditionally_settable was inert. The property came out not-settable, which looked right; the entity_setter was registered only when settable was true, so a later set_settable(True) opened a /set topic with no translator and the property accepted commands and discarded them. The only route the API offered for runtime settability, and it did not work.
#77 A value the model already held never reached the wire, so a producer whose model predates the tree published its declared default forever. Reachable only since 0.22.0 — before the reuse fix, twin and model started equally empty.
#73 remove() raised when the model had already dropped the group, leaving the device gone from the broker and a corpse in the builder that short-circuited the next add().
#75 remove() left deferred descendants, so resolve_deferred() rebuilt a torn-down device.
#76 add() recorded bookkeeping after materializing, stranding a live broker-visible device on a raise or a re-entrant call.

Added / Changed

#78 remove_capabilities(), the inverse of extend().
#74 Bookkeeping keyed on the resolved device id rather than DeviceSpec object identity, so a producer can re-derive its spec set freely instead of holding a process-lifetime map the API never told it to keep.

Minor rather than patch: #78 adds a method and #74 changes a documented contract.

Verification

  • 700 tests pass (600 at 0.20.1, 653 at 0.21.0, 680 at 0.22.0)
  • ruff check / ruff format --check clean; markdownlint clean
  • python -m build produces both artifacts; wheel METADATA reads Version: 0.23.0
  • Version agrees across ebus_sdk.__version__, pyproject.toml's dynamic attr, and the setup.py regex shim

🤖 Generated with Claude Code

Bumps __version__ to 0.23.0, promotes Unreleased to [0.23.0], adds the
tag link definition.

Seven issues, all filed by a consumer converting a multi-device adapter
onto DeviceTreeBuilder, each with a runnable reproduction. Batched into
one release rather than a patch now and a minor later, because every
version bump costs a Yocto image rebuild downstream.

Fixed, all silent in production:

  #72  conditionally_settable was inert. The property came out
       not-settable, which looked right, but the entity_setter was
       registered only when settable was true, so a later
       set_settable(True) opened a /set topic with no translator and the
       property accepted commands and discarded them. The only route the
       API offered for runtime settability, and it did not work.
  #77  A value the model already held never reached the wire. Reachable
       only since 0.22.0: before the reuse fix, twin and model started
       equally empty. initial_value now seeds rather than overwrites.
  #73  remove() raised when the model had already dropped the group,
       leaving the device gone from the broker and a corpse in the
       builder.
  #75  remove() left deferred descendants, so resolve_deferred() rebuilt
       a torn-down device.
  #76  add() recorded bookkeeping after materializing, stranding a live
       device on a raise or a re-entrant call.

Added and changed:

  #78  remove_capabilities(), the inverse of extend().
  #74  bookkeeping keyed on the resolved device id rather than DeviceSpec
       object identity, so a producer can re-derive its spec set freely
       instead of holding a process-lifetime map it was never told to
       keep.

Minor rather than patch: #78 adds a method and #74 changes a documented
contract.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@dcj
dcj merged commit f2c5f5f into main Aug 21, 2026
5 checks passed
@dcj
dcj deleted the release/0.23.0 branch August 21, 2026 02:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant