Skip to content

Add Python-policy publication and feedback behavior - #21

Merged
soulteary merged 5 commits into
mainfrom
feat/python-feedback-parity
Nov 8, 2026
Merged

soulteary merged 5 commits into
mainfrom
feat/python-feedback-parity

Conversation

@soulteary

@soulteary soulteary commented Nov 8, 2026 •

Copy link
Copy Markdown
Member

Extend the explicit Python runtime policy from v0.3.6 with publication-based channel sequences, identity sample metadata, filtered cache waits, optional-query degradation and unified angle feedback. Native behavior remains the default. O20 and hand/arm integration are outside this change.

The changes include:

  • Validate matching Classic tactile lengths, row indices and conflicting repeats without treating unrelated frames as responses.
  • Replace force fields by their physical query, retain other acquisitions, and update scalar aggregate raw data. Keep independent L20Lite category reads in the Python policy; retain the native aggregate path.
  • Count complete channel publications independently of snapshot readers. Project one coherent native cache view and retain the last non-command revision for filtered consumers.
  • Add DeviceIdentity::meta and the separately named wait_for_cached_snapshot() API. Preserve the existing two-argument wait signature, including pointer-to-member use.
  • Disable only sent, unverified firmware-optional queries after the Python failure threshold, expose that observation in capabilities and polling, and clear it on explicit recovery.
  • Support query-only, command-feedback-only and adaptive angle feedback through the existing native poll runtime and Session sender. Reapplying an equivalent plan preserves deadlines and metrics. Verified feedback can discard a redundant poll before its device lane is claimed while retaining explicit readers. Dispatch-only command handles remain observable independently of optional-response observation in that lane.

Regression coverage exercises publication counts, independent identity metadata, filtered waits, shutdown, query degradation, recovery, scalar reads, tactile assembly and polling policies. Installed-consumer checks compile the added API and retain checks for existing signatures.

Local validation passed against transport v0.3.4: 8/8 CTest suites, 74 phase-two/phase-three tests (605 assertions), the installed consumer, 18 documented examples, 30 cross-language behavior observations, 31 same-input wire vectors and 80 pinned Python regressions. Current-head CI, sanitizers, source/prebuilt consumers, complete A+ static analysis and all twelve release-package targets passed. The polling-capability fixture uses an explicit two-second initialization budget for worker startup, retaining its 20 ms polling interval, two-second observation window and required-feedback assertions; it passed ten consecutive local runs. Production timeout defaults are unchanged. No physical device is accessed by these checks.

Prepare patch version 0.3.7. The minimum and paired transport remain v0.3.4 (0e190032d65ed0b315337b45b3779cf4f650ed68). Rebuild the SDK and consumers with matching headers and libraries; binary compatibility with older headers is not claimed. The Python comparison source remains 3a63e723b9a0046e9a60a58339b9f064ef5b70fd, not an assertion about the deployed build.

No new hardware acceptance is claimed. Deployed backends, adapters/drivers, firmware, tactile layouts, physical timestamps, mixed CAN/FD channels and multi-device duration tests require separate hardware validation. Python bindings, automatic reconnect, extended identity raw/version detail parity and field-by-field O30 identity requests remain separate work.

Verified commit: 1fe64d186cdd7008a35870f24cfa98ef36100740.

  • CI: GCC 13 Debug/Release, Windows x64 Debug/Release and ASan/UBSan passed.
  • Prebuilt transport consumers: x86_64 and aarch64 passed against released transport v0.3.4.
  • Complete static analysis: A+, score 100, zero diagnostics; 612/612 format files and 357/357 compilation units for both cppcheck and clang-tidy. The downloaded report passed the independent completeness validator.
  • Release-package matrix: all twelve targets and collection passed.

Post-merge release validation: the initial Ubuntu 26.04 x86_64 job reported an intermittent failure at tests/hand/l20lite/test_runtime_comm.cpp:119 in the unchanged Native L20Lite stop/restart test. The identical assertion reproduced against the unmodified v0.3.6 SDK and test in 2 of 500 concurrent focused runs on the local host (eight workers); 500 serial runs passed. The test file is byte-identical between v0.3.6 and this release. It observes a send notification before stopping, which does not establish complete dual-frame reception. Native cancellation and late-response guards remain unchanged. The isolated target retry passed on the second attempt with the same source, test, configuration and assertions. All eleven other package targets passed on their first attempt. Merged-commit CI, complete A+ analysis, package collection and the verified draft-release gate passed.

Published v0.3.7 from merge commit 1a8063be54f80bf9b9d5421cf5b2cca690b0d5a0 under a signed tag. Merged-commit CI, prebuilt consumers, complete A+ analysis and release acceptance passed. All 26 draft assets were downloaded and independently checked for the twelve package identities, source revisions, object architectures and checksums before publication. The release notes retain the initial Native test failure, baseline reproduction and unchanged isolated retry, along with the transport v0.3.4 dependency, rebuild requirement and hardware-validation limits.

@soulteary
soulteary marked this pull request as ready for review November 8, 2026 04:13
@soulteary
soulteary merged commit 1a8063b into main Nov 8, 2026
23 checks passed
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