diff --git a/docs/test-results/esp32_ble_radio2_sleep_2026-10-21.md b/docs/test-results/esp32_ble_radio2_sleep_2026-10-21.md index db5d4bada..1f6685f6e 100644 --- a/docs/test-results/esp32_ble_radio2_sleep_2026-10-21.md +++ b/docs/test-results/esp32_ble_radio2_sleep_2026-10-21.md @@ -111,12 +111,15 @@ The same-size V4 build of adds only the channel-response padding fix described below. Bluetooth, radio, sleep-policy and role code are unchanged between those last two revisions. -Classic Heltec V2 BLE remains below its required 8,192-byte internal RAM -reserve. Historical checks left 2,552 bytes free on the baseline and 1,224 bytes +At this checkpoint, Classic Heltec V2 BLE was below its required 8,192-byte +static DRAM reserve. Historical checks left 2,552 bytes free on the baseline and 1,224 bytes on the initial sleep candidate. Removing an unnecessary WiFi-driver reference recovered 1,208 bytes, raising the later candidate to 2,432: 120 below baseline and 5,760 short of the reserve. Final cache/padding revisions were not -remeasured on V2. The gate was retained; this target remains unqualified. +remeasured on V2. The gate was retained. The later +[22 October V2 cache repair](heltec_v2_ble_memory_2026-10-22.md) closes the RAM +build failure with 12,440 static bytes free and unchanged capacities; physical +V2 operation was not measured by that repair. ## Physical V4 observations @@ -663,8 +666,8 @@ failure is retained, with its separate automatic-permission recovery verified. No nRF52 board, hub power or other firmware was changed in this task. The Bluetooth hardware checks pass. SDK light-sleep calls are observed without -SDK errors. Strict sleeping two-frequency packet qualification remains open, -and Classic V2 still fails its existing RAM reserve gate. These results do not +SDK errors. Strict sleeping two-frequency packet qualification remains open. +The later V2 cache repair passes its existing RAM reserve gate. These results do not qualify every ESP32 board or the full thirteen-radio fleet, and do not measure electrical power savings. Unchanged Bluetooth and quiet-wait checks were not repeated for padding, version, documentation or fixture-only changes. diff --git a/docs/test-results/heltec_v2_ble_memory_2026-10-22.md b/docs/test-results/heltec_v2_ble_memory_2026-10-22.md new file mode 100644 index 000000000..b5fa93698 --- /dev/null +++ b/docs/test-results/heltec_v2_ble_memory_2026-10-22.md @@ -0,0 +1,86 @@ + +
+ + +# Heltec V2 BLE RAM reserve repair, 22 October 2026 + +Status: **build, memory and host tests PASS**. Physical V2 operation was not +tested in this work. The earlier RAM failure remains recorded below. + +Clean source +[`1d4016f48`](https://github.com/mikecarper/MeshCore/commit/1d4016f483caaddebde4c923f7eea3dee27ac3ea) +was built through the canonical builder as `Heltec_v2_companion_radio_ble`, +using the auto feature profile, Cascade runtime defaults, USA Cascadia radio +preset and release-length version `v1.18.0.1-halo-keymind-cascade-dev-1d4016f4`. +The [safe receipt](heltec_v2_ble_memory_2026-10-22.safe.json) binds the source, +linked measurements and packaged artifact hashes. + +## Change and retained behavior + +Only V2 BLE explicitly enables the existing `MESH_CONTACT_CACHE` policy. +Its `Heltec_v2_companion_radio_ble_ps` alias inherits the same setting. +Other V2 profiles and the default cache policies of other boards are unchanged. + +All 160 contacts, eight channels and 128 offline frames remain available. +The cache keeps 16 paths and 16 shared secrets resident, rather than embedding +a complete path and shared secret in every contact object. Other paths remain +accessible through checked reads of existing contact records; cold ESP32 +secrets are recalculated without secret-file I/O. These resident-cache limits +do not reduce the contact capacity. Cold access can add filesystem reads or +key-calculation work. + +The Bluedroid Bluetooth host, PIN authentication, bond storage, dependencies, +radio/display setup, contact protocol and 152-byte contact-file records remain +unchanged. No pairing migration or repartitioning is introduced. The packaged +capability verification passes with an empty reductions list. + +The existing 8,192-byte static DRAM reserve remains mandatory. The runtime +model additionally reserves 6,144 bytes for this explicit ESP32 cache opt-in: +4,096 bytes for retained reader buffering plus 2,048 bytes for reader objects, +allocator metadata and related overhead. This is above the unchanged common +filesystem and transient allowances; it is not a claim of zero heap cost. +Automatic Full profiles keep their existing accounting policy. + +## Linked results + +| Check | Baseline `76437c6bf` | Fixed `1d4016f48` | +| --- | ---: | ---: | +| Static DRAM region | 124,580 bytes | 124,580 bytes | +| Occupied static span | 122,964 bytes | 112,140 bytes | +| Static DRAM free | 1,616 bytes | 12,440 bytes | +| Required static reserve | 8,192 bytes | 8,192 bytes | +| Margin above reserve | -6,576 bytes, FAIL | 4,248 bytes, PASS | + +The fixed image saves **10,824 static bytes**. Its runtime model passes with +181,400 internal bytes available versus 141,104 required, including the extra +reader allowance. The modeled margin is 40,296 bytes; these are linked +capacity estimates, not running free-heap or fragmentation measurements. + +The application occupies 1,810,568 of 3,342,336 app-slot bytes. The partition +table is byte-identical to the baseline. Both firmware and merged packages, +capability verification and unchanged application-size gates pass. The failed +baseline ELF/map and successful candidate/final artifacts are retained privately. + +## Verification and limits + +All 74 host test methods passed: + +- 14 contact-cache methods, including the exact non-Full ESP32 160-contact + configuration with default secret-flash caching disabled. Sanitized cases + cover eviction, unchanged frames/files, full reload, cooperative saves, + held snapshots, failed-write rollback and cold-secret recalculation. +- 53 RAM-policy methods, including the resolved-environment metadata check. + Synthetic ELF checks reject the old capacity and one byte below the new + requirement, and accept the exact new boundary. +- Seven contact-lifetime, partial-record and packet-streaming methods. + +The unit workflow now builds this exact classic ESP32 target at release-version +length and enforces both memory gates. The inherited power-saving alias is +checked by the recipe contract; an identical feature configuration was not +built a second time. No firmware feature or capacity was removed to obtain +the pass, and no memory gate was lowered. + +No radio was flashed or contacted. Physical V2 boot, pairing/reconnect, +populated contact sync, filesystem latency and sleep remain outside this +build/host result. It closes the documented V2 RAM build failure, not those +hardware qualification claims. diff --git a/docs/test-results/heltec_v2_ble_memory_2026-10-22.safe.json b/docs/test-results/heltec_v2_ble_memory_2026-10-22.safe.json new file mode 100644 index 000000000..2cd4d3fb5 --- /dev/null +++ b/docs/test-results/heltec_v2_ble_memory_2026-10-22.safe.json @@ -0,0 +1,58 @@ +{ + "source_commit": "1d4016f483caaddebde4c923f7eea3dee27ac3ea", + "source_clean": true, + "canonical_target": "Heltec_v2_companion_radio_ble", + "runtime_profile": "cascade", + "build_profile": "auto", + "radio_preset": "usa-cascadia", + "version": "v1.18.0.1-halo-keymind-cascade-dev-1d4016f4", + "passed": true, + "static_used": 112140, + "static_limit": 124580, + "static_free": 12440, + "static_required_reserve": 8192, + "static_margin": 4248, + "static_saved": 10824, + "runtime_available": 181400, + "runtime_required": 141104, + "runtime_margin": 40296, + "cache_reader_allowance": 6144, + "partitions_unchanged": true, + "capabilities_verified": true, + "reductions": [], + "host_test_methods_passed": 74, + "hardware_tested": false, + "preserved": { + "contacts": 160, + "channels": 8, + "offline_frames": 128, + "bluetooth_host": "Bluedroid", + "existing_bonds": "unchanged storage and host", + "contact_record_bytes": 152 + }, + "artifact_sha256": { + "Heltec_v2_companion_radio_ble.partsig": "a743a4253cddb196524eca11ec4ca63235f8116ed4e5db0363a75842bd7a41b7", + "Heltec_v2_companion_radio_ble-ota-v1.18.0.1-halo-keymind-cascade-dev-1d4016f4.memory.json": "ba9a300ac2ea16855817f3fafa2527cd4e36868b95d3cb9d6af28423e34c64eb", + "Heltec_v2_companion_radio_ble-ota-v1.18.0.1-halo-keymind-cascade-dev-1d4016f4.bin": "09d01ea046e80d6b480e15b00c3cfeef0587a638447c6b6234a8d645c7b1dc48", + "Heltec_v2_companion_radio_ble-ota-v1.18.0.1-halo-keymind-cascade-dev-1d4016f4-merged.bin": "4ba76ada54a961cd58bf998160349d3e3be4898d27d515a6068148410f2442ad", + "Heltec_v2_companion_radio_ble-ota-v1.18.0.1-halo-keymind-cascade-dev-1d4016f4.capabilities.json": "7e306f4a70e02975c86d4623c84f5e80d8f6c753a4bd3b4fa0d227e37257ed2c", + "Heltec_v2_companion_radio_ble-ota-v1.18.0.1-halo-keymind-cascade-dev-1d4016f4.meshtext-license.txt": "c37d0a453a2491514bac33ed835c1877f207390f134ae439a97b06b004e236d2" + }, + "linked_artifacts_sha256": { + "firmware.elf": "e211590b2bfae32fad0cf5cd5a6040a318b838ca3ff515eef58bf1187716058e", + "partitions.bin": "1d9cca96de0fe07ad7fc0648b9878ddecd9ce565e38b589ad20fea698ed4c80c", + "firmware.map": "f24a4f1252ea9a144bf76e4cad42964b5fda39e2155cdfcf8c7a3e099b7bfb8c" + }, + "schema": 1, + "scope": "Clean V2 BLE canonical build and host validation; no hardware qualification", + "baseline": { + "source_commit": "76437c6bf8b9e6589b150f265f41bac829e1584f", + "source_clean": true, + "passed": false, + "static_dram_used": 122964, + "static_dram_limit": 124580, + "static_dram_free": 1616, + "static_dram_required_reserve": 8192, + "static_dram_short_by": 6576 + } +} diff --git a/docs/test-results/index.md b/docs/test-results/index.md index 882753c1b..44ecd58d4 100644 --- a/docs/test-results/index.md +++ b/docs/test-results/index.md @@ -70,6 +70,7 @@ Completed validation reports, experiments, and test guides are collected here. O ## Build, storage, memory, and checklists +- [Heltec V2 BLE RAM reserve repair, 2026-10-22](heltec_v2_ble_memory_2026-10-22.md) - [ESP32 Bluetooth shutdown and radio2 CPU idle, 2026-10-21](esp32_ble_radio2_sleep_2026-10-21.md) - [RAK3401 all firmware CPU sleep checks, 2026-10-21](rak3401_all_roles_cpu_sleep_2026-10-21.md) - [Shared contact RAM savings and RAK4631 Full qualification, 2026-10-19](contact_memory_2026-10-19.md)