$ bash -e -o pipefail -c python -m pip install platformio==6.1.19 Collecting platformio==6.1.19 Downloading platformio-6.1.19-py3-none-any.whl.metadata (7.2 kB) Collecting bottle==0.13.* (from platformio==6.1.19) Downloading bottle-0.13.4-py2.py3-none-any.whl.metadata (1.6 kB) Collecting click<8.4,>=8.0.4 (from platformio==6.1.19) Downloading click-8.3.3-py3-none-any.whl.metadata (2.6 kB) Collecting colorama (from platformio==6.1.19) Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB) Collecting marshmallow==3.* (from platformio==6.1.19) Downloading marshmallow-3.26.2-py3-none-any.whl.metadata (7.3 kB) Collecting pyelftools<1,>=0.27 (from platformio==6.1.19) Downloading pyelftools-0.33-py3-none-any.whl.metadata (1.0 kB) Collecting pyserial==3.5.* (from platformio==6.1.19) Downloading pyserial-3.5-py2.py3-none-any.whl.metadata (1.6 kB) Collecting requests==2.* (from platformio==6.1.19) Downloading requests-2.34.2-py3-none-any.whl.metadata (4.8 kB) Collecting semantic_version==2.10.* (from platformio==6.1.19) Downloading semantic_version-2.10.0-py2.py3-none-any.whl.metadata (9.7 kB) Collecting tabulate==0.* (from platformio==6.1.19) Downloading tabulate-0.10.0-py3-none-any.whl.metadata (40 kB) Collecting ajsonrpc==1.2.* (from platformio==6.1.19) Downloading ajsonrpc-1.2.0-py3-none-any.whl.metadata (6.9 kB) Collecting starlette<0.53,>=0.19 (from platformio==6.1.19) Downloading starlette-0.52.1-py3-none-any.whl.metadata (6.3 kB) Collecting uvicorn<0.41,>=0.16 (from platformio==6.1.19) Downloading uvicorn-0.40.0-py3-none-any.whl.metadata (6.7 kB) Collecting wsproto==1.* (from platformio==6.1.19) Downloading wsproto-1.3.2-py3-none-any.whl.metadata (5.2 kB) Collecting packaging>=17.0 (from marshmallow==3.*->platformio==6.1.19) Downloading packaging-26.3-py3-none-any.whl.metadata (3.5 kB) Collecting charset_normalizer<4,>=2 (from requests==2.*->platformio==6.1.19) Downloading charset_normalizer-3.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (46 kB) Collecting idna<4,>=2.5 (from requests==2.*->platformio==6.1.19) Downloading idna-3.20-py3-none-any.whl.metadata (7.2 kB) Collecting urllib3<3,>=1.26 (from requests==2.*->platformio==6.1.19) Downloading urllib3-2.8.0-py3-none-any.whl.metadata (7.4 kB) Collecting certifi>=2023.5.7 (from requests==2.*->platformio==6.1.19) Downloading certifi-2026.7.22-py3-none-any.whl.metadata (2.5 kB) Collecting anyio<5,>=3.6.2 (from starlette<0.53,>=0.19->platformio==6.1.19) Downloading anyio-4.15.1-py3-none-any.whl.metadata (4.7 kB) Collecting typing-extensions>=4.10.0 (from starlette<0.53,>=0.19->platformio==6.1.19) Downloading typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB) Collecting h11>=0.8 (from uvicorn<0.41,>=0.16->platformio==6.1.19) Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB) Downloading platformio-6.1.19-py3-none-any.whl (421 kB) Downloading ajsonrpc-1.2.0-py3-none-any.whl (22 kB) Downloading bottle-0.13.4-py2.py3-none-any.whl (103 kB) Downloading click-8.3.3-py3-none-any.whl (110 kB) Downloading marshmallow-3.26.2-py3-none-any.whl (50 kB) Downloading pyelftools-0.33-py3-none-any.whl (201 kB) Downloading pyserial-3.5-py2.py3-none-any.whl (90 kB) Downloading requests-2.34.2-py3-none-any.whl (73 kB) Downloading charset_normalizer-3.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (257 kB) Downloading idna-3.20-py3-none-any.whl (69 kB) Downloading semantic_version-2.10.0-py2.py3-none-any.whl (15 kB) Downloadi Full transcript in the execution-proof artifact. $ bash -e -o pipefail -c pio test -e native ******************************************************************************** If you like PlatformIO, please: - star it on GitHub > https://github.com/platformio/platformio-core - follow us on LinkedIn to stay up-to-date on the latest project news > https://www.linkedin.com/company/platformio/ - try PlatformIO IDE for embedded development > https://platformio.org/platformio-ide ******************************************************************************** Verbosity level can be increased via `-v, -vv, or -vvv` option Collected 1 tests Platform Manager: Installing native Downloading 0% 10% Unpacking 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Platform Manager: native@1.2.1 has been installed! Processing test_telemetry in native environment -------------------------------------------------------------------------------- Building... Tool Manager: Installing platformio/tool-scons @ ~4.40801.0 Downloading 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Unpacking 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Tool Manager: tool-scons@4.40801.0 has been installed! Library Manager: Installing throwtheswitch/Unity @ ^2.6.1 Downloading 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% Unpacking 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Library Manager: Unity@2.6.1 has been installed! Testing... test/test_telemetry/test_main.cpp:57: test_calibration_and_quality [PASSED] test/test_telemetry/test_main.cpp:58: test_replay_is_rejected [PASSED] test/test_telemetry/test_main.cpp:59: test_serializer_escapes_json_identifiers [PASSED] test/test_telemetry/test_main.cpp:60: test_buffer_is_bounded_and_fifo [PASSED] -------------- native:test_telemetry [PASSED] Took 15.75 seconds -------------- =================================== SUMMARY =================================== Environment Test Status Duration ------------- -------------- -------- ------------ native test_telemetry PASSED 00:00:15.752 ================== 4 test cases: 4 succeeded in 00:00:15.752 ================== $ bash -e -o pipefail -c pio run -e esp32dev Processing esp32dev (platform: espressif32@6.12.0; board: esp32dev; framework: arduino) -------------------------------------------------------------------------------- Platform Manager: Installing espressif32 @ 6.12.0 Downloading 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Unpacking 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Platform Manager: espressif32@6.12.0 has been installed! Tool Manager: Installing espressif/toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5 Downloading 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Unpacking 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Tool Manager: toolchain-xtensa-esp32@8.4.0+2021r2-patch5 has been installed! Tool Manager: Installing platformio/framework-arduinoespressif32 @ ~3.20017.0 Downloading 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Unpacking 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Tool Manager: framework-arduinoespressif32@3.20017.241212+sha.dcc1105b has been installed! Tool Manager: Installing platformio/tool-esptoolpy @ ~2.40900.0 Downloading 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Unpacking 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Collecting cryptography~=45.0.3 Downloading cryptography-45.0.7-cp311-abi3-manylinux_2_34_x86_64.whl.metadata (5.7 kB) Collecting ecdsa~=0.19.1 Downloading ecdsa-0.19.2-py2.py3-none-any.whl.metadata (29 kB) Collecting bitstring~=4.3.1 Downloading bitstring-4.3.1-py3-none-any.whl.metadata (5.3 kB) Collecting reedsolo~=1.7.0 Downloading reedsolo-1.7.0-py3-none-any.whl.metadata (23 kB) Collecting intelhex~=2.3.0 Downloading intelhex-2.3.0-py2.py3-none-any.whl.metadata (2.7 kB) Collecting cffi>=1.14 (from cryptography~=45.0.3) Downloading cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.5 kB) Collecting six>=1.9.0 (from ecdsa~=0.19.1) Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB) Collecting bitarray<4.0,>=3.0.0 (from bitstring~=4.3.1) Downloading bitarray-3.12.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (41 kB) Collecting pycparser (from cffi>=1.14->cryptography~=45.0.3) Downloading pycparser-3.11-py3-none-any.whl.metadata (8.2 kB) Downloading cryptography-45.0.7-cp311-abi3-manylinux_2_34_x86_64.whl (4.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 110.9 MB/s 0:00:00 Downloading ecdsa-0.19.2-py2.py3-none-any.whl (150 kB) Downloading bitstring-4.3.1-py3-none-any.whl (71 kB) Downloading reedsolo-1.7.0-py3-none-any.whl (32 kB) Downloading intelhex-2.3.0-py2.py3-none-any.whl (50 kB) Downloading bitarray-3.12.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (398 kB) Downloading cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (221 kB) Downloading six-1.17.0-py2.py3-none-any.whl (11 kB) Downloading pycparser-3.11-py3-none-any.whl (51 kB) Installing collected packages: reedsolo, intelhex, six, pycparser, bitarray, ecdsa, cffi, bitstring, cryptography Successfully installed bitarray-3.12.0 bitstring-4.3.1 cffi-2.1.1 cryptography-45.0.7 ecdsa-0.19.2 intelhex-2.3.0 pycparser-3.11 reedsolo-1.7.0 six-1.17.0 Tool Manager: tool-esptoolpy@2.40900.250804 has been installed! Verbose mode can be enabled via `-v, --verbose` option CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32dev.html PLATFORM: Espressif 32 (6.12.0) > Espressif ESP32 Dev Module HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-j Full transcript in the execution-proof artifact. $ bash -e -o pipefail -c python -m unittest discover -v -s cloud test_confirmed_receipt_marks_the_report_sent (test_receipts.ReceiptTests.test_confirmed_receipt_marks_the_report_sent) ... ok test_events_reject_empty_values_of_the_wrong_type (test_receipts.ReceiptTests.test_events_reject_empty_values_of_the_wrong_type) ... ok test_invalid_receipts_keep_the_report_pending (test_receipts.ReceiptTests.test_invalid_receipts_keep_the_report_pending) ... ok test_omitted_events_and_empty_list_have_the_same_key (test_receipts.ReceiptTests.test_omitted_events_and_empty_list_have_the_same_key) ... ok test_conflicting_key_cannot_overwrite_a_report (test_sync.OutboxTests.test_conflicting_key_cannot_overwrite_a_report) ... ok test_retries_keep_reports_until_confirmed (test_sync.OutboxTests.test_retries_keep_reports_until_confirmed) ... ok ---------------------------------------------------------------------- Ran 6 tests in 0.061s OK $ g++ -std=c++17 -Wall -Wextra -Werror -Iinclude .proof/demo.cpp src/telemetry.cpp -o /tmp/firmware-proof $ /tmp/firmware-proof calibration overflow rejected; finite serialization enforced