Repository navigation
Remove unused L20 write reply reservations under the Python policy - #25
Merged
Merged
Conversation
soulteary
marked this pull request as ready for review
November 8, 2026 18:40
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
L20 speed, current-limit and fault-clear writes inherited Native optional reply reservations under the explicit Python policy. A same-key read could wait for an unused reply window after the command had already reached physical dispatch.
Remove those reservations for Python-policy L20 dispatch-only controls. Keep physical receipts, frame contents, inter-frame delays and the existing shared Session sender. Python-policy response matching now uses Session event order after physical claim, with a timestamp fallback when order metadata is absent. A queued read cannot consume a previous write reply received before its claim.
Native defaults and public C++ APIs are unchanged. The paired and minimum transport remain v0.3.4 (0e190032d65ed0b315337b45b3779cf4f650ed68). Rebuild the SDK and downstream consumers to use the fix.
Validation:
Classic L20 replies have no transaction identifier. A same-opcode late write reply received after a following read is physically claimed remains indistinguishable from a read response, as in the Python reference. This patch does not remove that protocol limitation.
No new physical-device acceptance is claimed. Deployed firmware reply timing, adapters/drivers, physical timestamps and sustained multi-device operation require separate hardware validation. O20, Python bindings and hand/arm integration are excluded. No second sender or scheduling queue is added.
Earlier local runs encountered intermittent initialization, polling and timeout failures in unchanged Native fixtures. Isolated checks and the final complete run passed without changes to Native implementation, assertions or timeout budgets. The underlying causes have not all been established.
The first Windows x64 Release CI attempt timed out in the unchanged Native L20 subcase of "HandDevice cache and validation stay available during a blocked send". An unchanged selected-job rerun passed. The SDK implementation, assertions and timeout budgets were retained; the underlying cause was not established. The independent Windows x64 Release package validation also passed on the same source.
Published as v0.3.11, stable and latest. The signed tag identifies merged source eb06091; its tree matches the tested PR tree.
Post-merge validation passed on that exact source:
All 26 assets were downloaded and independently checked for source/version/dependency identity, object architecture, API SHA-256 and size, and archive checksums before publication. Public release metadata, notes, signed tag and every published asset digest/size were checked again after publication. Hardware acceptance remains separate as described in the release notes.