zerodev1 & 2 compile and tests succeeded, example form zerodev2: ``` jlpoole@zerodev2:/usr/local/src/ble-reticulum $ python3 -m pytest migration/tests/test_identity_helpers_cpp_equivalence.py -q -rs ===================================== test session starts ===================================== platform linux -- Python 3.13.5, pytest-8.3.5, pluggy-1.5.0 rootdir: /usr/local/src/ble-reticulum configfile: pytest.ini plugins: typeguard-4.4.2, asyncio-0.25.1 asyncio: mode=Mode.AUTO, asyncio_default_fixture_loop_scope=function collected 21 items migration/tests/test_identity_helpers_cpp_equivalence.py ..s.................. [100%] =================================== short test summary info =================================== SKIPPED [1] migration/tests/test_identity_helpers_cpp_equivalence.py:64: BLEInterface importable; source fallback not used ================================ 20 passed, 1 skipped in 2.60s ================================ jlpoole@zerodev2:/usr/local/src/ble-reticulum $ python3 -m pytest migration/tests/test_fragmentation_cpp_equivalence.py migration/tests/test_fragmentation_backend_shim.py -q ===================================== test session starts ===================================== platform linux -- Python 3.13.5, pytest-8.3.5, pluggy-1.5.0 rootdir: /usr/local/src/ble-reticulum configfile: pytest.ini plugins: typeguard-4.4.2, asyncio-0.25.1 asyncio: mode=Mode.AUTO, asyncio_default_fixture_loop_scope=function collected 36 items migration/tests/test_fragmentation_cpp_equivalence.py ............................ [ 77%] migration/tests/test_fragmentation_backend_shim.py ........ [100%] ===================================== 36 passed in 5.07s ====================================== jlpoole@zerodev2:/usr/local/src/ble-reticulum $ ``` ## Field test results ```bash (rnsenv) jlpoole@jp /usr/local/src/ble-reticulum/scripts $ ./analyze_reticulum_file_transfer_20260516_1130.pl ../tmp/run16/20260517_1316_zerodev1_BilateralConstitution_CPP.txt ../tmp/run16/20260517_1316_zerodev2_BilateralConstitution_CPP.txt Reticulum BLE file transfer analysis Generated: 2026-05-17 13:18:17 PDT Input files: ../tmp/run16/20260517_1316_zerodev1_BilateralConstitution_CPP.txt ../tmp/run16/20260517_1316_zerodev2_BilateralConstitution_CPP.txt Log provenance summary: 20260517_1316_zerodev1_BilateralConstitution_CPP.txt receiver=zerodev1 date='Sun May 17 13:14:42 PDT 2026' command_lines=21 post_marker_lines=591 20260517_1316_zerodev2_BilateralConstitution_CPP.txt receiver=zerodev2 date='Sun May 17 01:14:44 PM PDT 2026' command_lines=20 post_marker_lines=587 Chrony clock notes from logs: 20260517_1316_zerodev1_BilateralConstitution_CPP.txt System time : 0.000601033 seconds slow of NTP time System time : 0.000489284 seconds slow of NTP time 20260517_1316_zerodev2_BilateralConstitution_CPP.txt System time : 0.000179263 seconds slow of NTP time System time : 0.000172438 seconds slow of NTP time Declared outbound sends observed in logs: sender=zerodev1 file=US_Constitution.txt chunks= 140 bytes= 44225 chunk_data_bytes=316 sender=zerodev2 file=US_Constitution.txt chunks= 148 bytes= 44225 chunk_data_bytes=n/a Direction: zerodev1->zerodev2 file : US_Constitution.txt chunks received : 140 of 140 completeness : 100.00% missing chunks : none duplicate chunks : none payload bytes RX : 44225 first chunk RX : 13:15:09.853 last chunk RX : 13:15:46.269 receiver span : 36.416 s sender span : 14.301 s payload rate RX span : 1214.4 B/s 9715.5 bit/s payload rate TX span : 3092.5 B/s 24739.9 bit/s one-way latency min/median/mean/p95/max/stddev: 243.979 / 11512.287 / 11498.435 / 21675.719 / 22359.194 / 6564.508 ms receiver inter-chunk gap min/median/mean/p95/max/stddev: 149.000 / 247.000 / 261.986 / 340.000 / 391.000 / 41.138 ms sender inter-chunk gap min/median/mean/p95/max/stddev: 101.950 / 102.959 / 102.883 / 103.934 / 108.573 / 1.017 ms Direction: zerodev2->zerodev1 file : US_Constitution.txt chunks received : 148 of 148 completeness : 100.00% missing chunks : none duplicate chunks : none payload bytes RX : 44225 first chunk RX : 13:15:09.804 last chunk RX : 13:15:44.712 receiver span : 34.908 s sender span : 15.452 s payload rate RX span : 1266.9 B/s 10135.2 bit/s payload rate TX span : 2862.1 B/s 22897.1 bit/s one-way latency min/median/mean/p95/max/stddev: 247.634 / 9976.582 / 9997.460 / 18882.898 / 19703.868 / 5718.277 ms receiver inter-chunk gap min/median/mean/p95/max/stddev: 146.000 / 243.000 / 237.469 / 292.000 / 341.000 / 28.719 ms sender inter-chunk gap min/median/mean/p95/max/stddev: 103.746 / 103.952 / 105.114 / 108.940 / 123.369 / 3.165 ms Hello/handshake RX records: zerodev2 -> zerodev1 recv=13:15:09.530 latency= 169.698 ms message='hello' zerodev1 -> zerodev2 recv=13:15:09.537 latency= 118.429 ms message='hello back' Caution: one-way latency assumes sender and receiver clocks are synchronized. Your chronyc tracking output helps bound this error, but it is not a substitute for ACK/round-trip timing. (rnsenv) jlpoole@jp /usr/local/src/ble-reticulum/scripts $ ```