Skip to content

v0.3.7

Choose a tag to compare

@github-actions github-actions released this 08 Nov 05:09
· 5 commits to main since this release
v0.3.7
1a8063b
  • Extend the explicit RuntimeBehavior::kPython policy with publication-based channel sequences and coherent retained snapshots. Cache readers do not advance acquisition counters. Identity reads carry independent sample metadata; closed Python-policy caches retain identity evidence with invalid metadata.
  • Add wait_for_cached_snapshot(previous, timeout, wake_on_command_feedback) without overloading the existing two-argument wait signature. Filtered waits use the last non-command publication, retain command feedback in the current cache, and wake when their device generation ends. These waits perform no device I/O.
  • Reject matching malformed Classic tactile rows in the Python policy, including invalid lengths, row markers and conflicting duplicates. Unrelated routes and opcodes remain unmatched. Correct force aggregation so one query replaces its own fields and scalar raw data follows the latest scalar query while matrix evidence from other queries remains available.
  • Read L20Lite fingertip scalar categories independently in the Python policy. Track firmware-optional failures per channel and generation: only sent, unverified optional queries can degrade after repeated response/protocol failures; a previously successful channel is not disabled by later response loss. Disable only that channel and restore probing after explicit recovery.
  • Add query-only, command-feedback-only and adaptive angle feedback policies to unified polling. Only verified current-state command feedback fulfills the requested angle rate. Equivalent plans are no-ops. Polling uses the existing native runtime and transport Session; no second physical send queue is added.

Native behavior remains the default. The policy covers Classic L6, O6, L20Lite, L20, L30 and explicitly selected O30 V25. Existing C++ method signatures remain available; public metadata and configuration additions require rebuilding the SDK and downstream consumers with matching headers and libraries. The minimum and paired transport remain v0.3.4 (0e190032d65ed0b315337b45b3779cf4f650ed68). Binary compatibility with earlier headers is not claimed.

Validation uses offline FakeTransport regressions, Python reference contracts, native/source/prebuilt/installed consumers, sanitizers, complete static analysis and the twelve-target release matrix. No new physical-device acceptance is claimed. Adapter/driver/firmware, physical timestamps, deployed tactile layouts, mixed CAN/FD channels and long-duration multi-device behavior require separate hardware validation. O20, Python bindings, automatic reconnect and hand/arm integration are outside this patch. Extended identity raw/version field parity and O30 field-by-field identity requests remain separate work.

Build and verification

Source commit: 1a8063be54f80bf9b9d5421cf5b2cca690b0d5a0 (PR #21). The signed v0.3.7 tag identifies this commit.

  • Merged-commit CI: GCC 13 and Windows x64 Debug/Release, ASan and UBSan passed.
  • Released-transport consumers: x86_64 and aarch64 passed against transport v0.3.4.
  • Complete static report: A+, score 100, zero diagnostics; 612 format files and 357 compilation units for each analysis tool. The downloaded report passed the completeness validator.
  • Release acceptance: all twelve package targets, collection and draft-release checks passed. The 26 downloaded draft assets were independently checked for package/source identities, object architectures and checksums before publication.

Release validation initially reported an intermittent failure in the unchanged Native L20Lite stop/restart polling test. The same assertion reproduced with the unmodified v0.3.6 SDK and original test in concurrent focused runs (2/500 with eight workers on the local host); 500 serial runs passed. The isolated package retry passed without source, test, configuration or assertion changes. Native cancellation and late-response guards are unchanged.

Local offline verification also passed: 8/8 CTest groups; 74 phase-two/phase-three tests with 605 assertions; installed-consumer checks; compilation of 18 documented examples; 30 cross-language observations; 31 outgoing-wire vectors; and 80 Python regressions against reference commit 3a63e723b9a0046e9a60a58339b9f064ef5b70fd. This reference pin does not identify the deployed Python build. These checks do not add physical-device acceptance.