Skip to content

release: 0.23.1 (deferred-queue spin and two related defects) - #84

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

release: 0.23.1 (deferred-queue spin and two related defects)#84
dcj merged 1 commit into
mainfrom
release/0.23.1

Conversation

@dcj

@dcj dcj commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

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

#82 resolve_deferred() spun forever when the device a deferred spec awaited had already been built by an equal-but-distinct DeviceSpec. My regression: 0.23.0 moved add()'s bookkeeping to the resolved device id and did not move the deferred paths with it.
A stale id resolver could orphan its device. remove() re-resolved through the spec's callable, which commonly reads the producer's own model and stops answering once teardown begins, so it got None and returned silently with the device still live and its retained topics in place.
The python_type disagreement check from 0.23.0 is removed. It guarded a difference with no runtime consequence, misfired on 30 of 134 definitions in one real declaration set, and raised mid-materialization.

Patch, and cut promptly rather than batched. I know each bump costs a Yocto rebuild, and I would normally hold a patch to ride with the next minor — but 0.23.0 is live with an infinite loop on a path that is typically a single dispatch thread, so it stops everything a producer publishes.

Verification

🤖 Generated with Claude Code

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

  #82  resolve_deferred() spun forever when the device a deferred spec
       was waiting for had already been built by an equal-but-distinct
       DeviceSpec. My regression: 0.23.0 moved add()'s bookkeeping to the
       resolved device id and did not move the deferred paths with it, so
       the id short-circuit returned before the identity-based queue
       removal. Triggered by exactly the pattern id-keying was introduced
       to enable, and it hangs rather than misbehaves, on what is
       typically a single dispatch thread.

  A stale id resolver could orphan its device. remove() re-resolved
  through the spec's callable, which commonly reads the producer's own
  model and stops answering once teardown begins, so remove() got None
  and returned silently with the device still live. The builder now
  latches the id a spec resolved to when built.

  The python_type disagreement check from 0.23.0 is removed. It guarded a
  difference with no runtime consequence, misfired on the normal case of
  a model using a richer type than the datatype-derived default, and
  raised mid-materialization leaving half a device.

Patch: three fixes, no new API. Cut promptly rather than batched because
0.23.0 is live with an infinite loop.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@dcj
dcj merged commit 7b08e07 into main Aug 21, 2026
5 checks passed
@dcj
dcj deleted the release/0.23.1 branch August 21, 2026 15:03
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