preserve BLE disconnect race stress evidence

This commit is contained in:
Jay
2026-08-18 14:28:10 -04:00
parent 4bf00eb583
commit 3bad2275cc
3 changed files with 28 additions and 0 deletions
+10
View File
@@ -68,6 +68,16 @@ removed before production firmware was built and flashed.
maximum; cumulative error is 152 us over 25.75 seconds. This records bounded maximum; cumulative error is 152 us over 25.75 seconds. This records bounded
BLE scheduling jitter without rate drift and requires timestamp-derived `dt` BLE scheduling jitter without rate drift and requires timestamp-derived `dt`
in future fusion work. in future fusion work.
- `ble_mtu_race_4bf00eb.trk` — SHA-256
`4a231b54a3c7320fd69cac869b830e94aca8f704f946881b9cdfd21991bfa41f`.
This exact-commit stress capture followed six rapid subscribe, first-fragment,
and disconnect cycles aimed at the MTU lookup race. Telemetry remained live
afterward: the capture contains 1,848 CRC-valid samples with zero packet gaps,
resets, send failures, or invalid ACKs, while status records exactly six
disconnects and six replays. The test deliberately withheld application ACKs
beyond the 10.24-second queue window, so sequences 1,024 through 4,021 were
intentionally lost; the single 2,998-sample gap, matching queue-overflow total,
demonstrates bounded buffer exhaustion rather than a suspended output task.
`tests/test_trikke_protocol.py` verifies the hashes, parses the captures in `tests/test_trikke_protocol.py` verifies the hashes, parses the captures in
fragmented chunks, and asserts these signatures so the hardware evidence remains fragmented chunks, and asserts these signatures so the hardware evidence remains
Binary file not shown.
+18
View File
@@ -309,6 +309,24 @@ class ProtocolContractTest(unittest.TestCase):
"transport_invalid_ack_count": 0, "transport_invalid_ack_count": 0,
}, },
}, },
"ble_mtu_race_4bf00eb.trk": {
"sha256": "4a231b54a3c7320fd69cac869b830e94aca8f704f946881b9cdfd21991bfa41f",
"sample_count": 1848,
"first_sequence": 0,
"last_sequence": 4845,
"max_dropped": 2998,
"timing_anomalies": 412,
"gaps": [(1023, 4022, 29_990_016)],
"final_status": {
"sensor_read_failure_count": 0,
"queue_overflow_count": 2998,
"transport_begin_retry_count": 2471,
"transport_disconnect_count": 6,
"transport_send_failure_count": 0,
"transport_replay_count": 6,
"transport_invalid_ack_count": 0,
},
},
} }
for name, contract in expected.items(): for name, contract in expected.items():