Skip to content

Commit 19eef09

Browse files
dcjclaude
andauthored
release: 0.18.1 (refresh_tree $state ordering + consumer contract guide) (#34)
Pure-fix release. No API change, no ebus-mqtt-client floor bump. - fix: Device.refresh_tree() now publishes a device's own $state after its descendants rather than before, so a device no longer announces ready while the children its $description names have published nothing (#31, #32). Thanks to @cayossarian. - docs: doc/consuming-a-homie-tree.md, the consumer-side contract guide (#33). Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent f1464ca commit 19eef09

2 files changed

Lines changed: 5 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ All notable changes to `ebus-sdk` are recorded here. Format follows [Keep a Chan
44

55
## [Unreleased]
66

7+
## [0.18.1] — 2026-08-07
8+
79
### Added
810

911
- [`doc/consuming-a-homie-tree.md`](doc/consuming-a-homie-tree.md): the controller/subscriber-side guide, and the counterpart to [`doc/building-a-proxy.md`](doc/building-a-proxy.md). It states the asymmetry the convention relies on and that this repo had never written down: a producer SHOULD minimize `$state` and `$description` transitions (quality-of-implementation, best-effort), while a consumer MUST react to every one of them, unconditionally (correctness). Covers what `$state=ready` does and does not promise (it means "my own `$description` is current", never "my children are present", and no producer can make the latter true since children are commissioned out of band), and the three ways consumers get this wrong: the one-shot barrier that stops reconciling after startup, awaiting a `$description` that the content-hash suppression never sends, and inferring publish order across retained messages. Linked from the README.
@@ -274,7 +276,8 @@ The 0.2.0 release introduces first-class parent/child device trees on both the d
274276

275277
Initial public release on PyPI. It predates this repo's tagging convention (the earliest tag is `v0.1.4`), so there is no `v0.1.2` tag to read; the published artifact on PyPI is the record of the surface that shipped.
276278

277-
[Unreleased]: https://github.com/electrification-bus/python-sdk/compare/v0.18.0...HEAD
279+
[Unreleased]: https://github.com/electrification-bus/python-sdk/compare/v0.18.1...HEAD
280+
[0.18.1]: https://github.com/electrification-bus/python-sdk/releases/tag/v0.18.1
278281
[0.18.0]: https://github.com/electrification-bus/python-sdk/releases/tag/v0.18.0
279282
[0.17.0]: https://github.com/electrification-bus/python-sdk/releases/tag/v0.17.0
280283
[0.16.0]: https://github.com/electrification-bus/python-sdk/releases/tag/v0.16.0

src/ebus_sdk/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
# Structural types for a caller-supplied MQTT client
8282
from ebus_sdk.transport import MqttControllerTransport, MqttDeviceTransport, MqttTransport
8383

84-
__version__ = "0.18.0"
84+
__version__ = "0.18.1"
8585

8686
__all__ = [
8787
# Homie classes

0 commit comments

Comments
 (0)