Problem
The sync and async clients expose create_subscription(), and its documentation directs users to receive_notification(), but no such method exists. There is no notification dispatcher, decoding path, credit replenishment or reconnect lifecycle.
The public API therefore advertises a feature that cannot be consumed.
Alarm subscriptions remain tracked separately in #794.
Scope
- Build on the response/notification dispatcher rather than reading directly from the request path.
- Decode data-change notifications and associate them with the correct subscription object/reference IDs.
- Expose a bounded sync iterator/callback API and async iterator/queue API.
- Handle finite credit replenishment.
- Buffer a notification that arrives before the CreateObject response registers its subscription ID.
- Delete subscriptions cleanly and prevent stale notifications from being delivered after ID reuse.
- Define behavior on disconnect and optional resubscription after reconnect.
Acceptance criteria
- A created subscription can deliver decoded values through a documented public API.
- Notifications cannot satisfy ordinary requests.
- Initial, burst and out-of-order lifecycle cases are covered by deterministic tests.
- Queues are bounded and expose overflow/missed-update diagnostics.
- Delete/disconnect releases PLC objects and local receiver resources.
- Documentation no longer references a nonexistent method.
Dependencies
- Response correlation and unsolicited-frame routing
- Typed symbolic tag descriptors for name-based subscriptions
Problem
The sync and async clients expose
create_subscription(), and its documentation directs users toreceive_notification(), but no such method exists. There is no notification dispatcher, decoding path, credit replenishment or reconnect lifecycle.The public API therefore advertises a feature that cannot be consumed.
Alarm subscriptions remain tracked separately in #794.
Scope
Acceptance criteria
Dependencies