Repository navigation
This release fixes two callback shutdown edge cases found during a repository audit and adds repeatable tests against real WFTNP equipment.
- Track callback task lifetime separately from subscription intent, so shutdown waits for callback cleanup after a failed subscription is replaced or removed.
- Avoid deadlock when callback cleanup calls
stop()while another shutdown is already joining that callback. - Log discovery resolution failures at debug level.
- Add
task test:hardware: one opt-in, serial lane with local configuration and a write-blocking TCP proxy. Ordinary CI never connects to equipment.
Validation: 91 simulator/unit tests pass with 96% combined coverage; formatting, lint, source typing, and strict package metadata checks pass. The hardware lane passed against KICKR BIKE and KICKR RUN: 30-second streams with interleaved reads, three real TCP interruptions per device, automatic subscription recovery, and notification disable/re-enable. The final run received 121 bike packets and 61 treadmill packets during the streams. No equipment-control commands were sent.
See the audit and hardware validation for details, instructions, and limitations. Hardware checks used idle equipment; simultaneous ROUVY/Zwift operation and long workouts remain unverified.
pip install 'wftnp[discovery]==0.1.2'