From c7934af08d994d0b975a8cee52252939fe3c8b3f Mon Sep 17 00:00:00 2001 From: mikecarper Date: Wed, 21 Oct 2026 11:01:14 -0700 Subject: [PATCH] Document RAK3401 sequential CPU sleep qualification [skip ci] --- docs/test-results/index.md | 1 + .../rak3401_all_roles_cpu_sleep_2026-10-21.md | 127 ++ ...1_all_roles_cpu_sleep_2026-10-21.safe.json | 1420 +++++++++++++++++ 3 files changed, 1548 insertions(+) create mode 100644 docs/test-results/rak3401_all_roles_cpu_sleep_2026-10-21.md create mode 100644 docs/test-results/rak3401_all_roles_cpu_sleep_2026-10-21.safe.json diff --git a/docs/test-results/index.md b/docs/test-results/index.md index 16f6cd465..292384078 100644 --- a/docs/test-results/index.md +++ b/docs/test-results/index.md @@ -62,6 +62,7 @@ Completed validation reports, experiments, and test guides are collected here. O ## Build, storage, memory, and checklists +- [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) - [Heltec V3 Full memory qualification, 2026-10-19](heltec_v3_full_memory_2026-10-19.md) - [Personal room mailbox checks](room_mailboxes.md) diff --git a/docs/test-results/rak3401_all_roles_cpu_sleep_2026-10-21.md b/docs/test-results/rak3401_all_roles_cpu_sleep_2026-10-21.md new file mode 100644 index 000000000..4775043ec --- /dev/null +++ b/docs/test-results/rak3401_all_roles_cpu_sleep_2026-10-21.md @@ -0,0 +1,127 @@ + + + + +# RAK3401 all firmware CPU sleep checks, 21 October 2026 + +All 15 applicable images were installed and measured sequentially on the same +RAK3401. **All 13 profiles that support power saving passed the CPU sleep +capture with PS on.** Twelve also passed every runtime check. Full Room Server +slept correctly but raised a channel-busy timeout flag, so its overall result +remains failed. Terminal Chat and KISS expose no PS setting and showed no sleep. +The campaign therefore is not an all-modes qualification pass. + +The board is left running **Full unified Repeater at `efad0076`, PS on**. +Its final core snapshot had zero error flags and an empty queue. The original +`mctomqtt.service` and exact USB ownership were restored without changing its +configuration. Updates used application-only packages; the reported bootloader +version is unchanged. + +## Results + +Each row has a complete 90-second CPU capture and an independently matched +whole-application readback. Percentages are weighted estimates from sampled +processor states, not exact sleep residency or current measurements. + +| Firmware/profile | Source | PS | Sleeping/total samples | Sleep estimate | Result | +| --- | --- | --- | --- | --- | --- | +| Full Companion | `e16db810` | on | 5,510/8,000 | 68.78% | Pass | +| USB Companion | `e16db810` | on | 6,115/7,999 | 76.41% | Pass | +| BLE Companion | `e16db810` | on | 5,931/8,014 | 74.03% | Pass | +| Full Room Server | `e16db810` | on | 5,929/8,009 | 74.01% | CPU pass; health flag | +| Reduced Room Server | `e16db810` | on | 5,487/7,980 | 68.67% | Pass | +| Full Sensor | `e16db810` | on | 5,890/7,992 | 73.82% | Pass | +| Reduced Sensor | `e16db810` | on | 6,099/8,028 | 76.00% | Pass | +| Terminal Chat | `e16db810` | unsupported | 0/8,012 | 0.00% | PS unsupported; no sleep | +| KISS modem | `e16db810` | unsupported | 0/8,054 | 0.00% | PS unsupported; no sleep | +| Full Serial1 RS232 repeater | `efad0076` | on | 6,257/8,134 | 76.94% | Pass | +| Reduced Serial1 RS232 repeater | `efad0076` | on | 6,428/8,094 | 79.53% | Pass | +| Full internal-flash OTA repeater | `efad0076` | on | 6,275/8,106 | 77.38% | Pass | +| Reduced internal-flash OTA repeater | `efad0076` | on | 6,138/8,073 | 75.94% | Pass | +| Reduced unified OTA repeater | `efad0076` | on | 6,393/8,019 | 79.69% | Pass | +| Full unified OTA repeater | `efad0076` | on | 5,875/8,013 | 73.19% | Pass | + +The [safe receipt](rak3401_all_roles_cpu_sleep_2026-10-21.safe.json) records +application/package hashes, source commits, capability and memory checks, +capture flags, timings and final handback health. All 15 capture-integrity +checks passed; no halt, step, interrupt masking, lockup or reset was sampled +inside any capture window. Debug-control state remained unchanged. + +Full Room Server's `core.errors` changed from 0 to 2 at uptimes 51 and 148 +seconds. The value is a bitmask: `0x02` is the latched CAD/channel-busy timeout +flag. The dispatcher bounds its channel-busy wait, records this flag, then +permits a transmit attempt. The observation does not establish the cause of +that busy condition or prove subsequent RF delivery. The CPU capture passed +at 74.01%, but the strict zero-error post-check failed and remains visible. +The failed result was retained, and this unchanged capture was not repeated. + +Terminal Chat and KISS have no power-saving command or application idle-sleep +integration. Both completed valid captures with zero sleeping observations; +they are unsupported PS coverage, not PS-on passes. + +## Hardware and procedure + +The tested assembly is one RAK3401 core with an external RAK13302 radio and no +external NOR flash. Coverage includes Full/USB/BLE Companion; Full/Reduced +Room Server and Sensor; Terminal Chat and KISS; and Full/Reduced Serial1 RS232, +internal-flash LoRa OTA and unified OTA repeaters. The dedicated RAK13302 plus +W25Q16 image is excluded because its required external flash is absent. The +unified image exercised its no-NOR/internal-storage path. + +The nine non-repeater images are bound to `e16db810`; the six repeaters are +bound to `efad0076`, after the build corrections below. No claim is made that +all images came from one revision. One application was active at a time, with +an exact application readback before each measurement. No bootloader or +SoftDevice package was installed. + +Supported roles acknowledged `set powersaving on`, confirmed the saved value, +and provided a fresh RAM-only diagnostic window. USB command ports were closed +for capture. Companion intentionally prevents idle sleep with a configured USB +host, so only this target's USB data authorization was temporarily disabled +while retaining power, then restored. BLE sessions were disconnected for idle +capture and authenticated again afterward. + +The nonhalting SWD sampler used MEM-AP reads of DHCSR at jittered 7–13 ms +intervals for 90 seconds. Sleep acceptance requires at least 5,000 samples, +100 sleeping observations, complete timing and chip-identity checks, unchanged +debug controls, and no sampled reset/halt/step/masking/lockup. Read timing must +remain within the 10 ms read and 25 ms gap limits. This measures observed CPU +sleep states, not just a firmware eligibility counter. + +Five early preparations stopped before PS setting or CPU sampling: Full/USB +Companion on an arrow-prefixed reply, Full/Reduced Room Server on the first +version reply, and Terminal on LF/CRLF handling. The private reader was +corrected; a bounded retry of only the read-only version getter retained the +first unsupported reply. Their first actual CPU captures appear above, with +the earlier failed preparations retained in the JSON. Completed captures were +not repeated. An interrupted read-only Sensor application readback was also +preserved separately; it did not alter the installed image or repeat a CPU +capture. + +## Build corrections + +Commit [`efad0076`](https://github.com/mikecarper/MeshCore/commit/efad0076816f7ba2293c68f56f8db18ac17344b9) +fixes two defects exposed while preparing the matrix. All 15 selected packages +then passed their build, capability and memory gates. + +The Full internal-flash and unified repeaters originally missed the required +runtime heap reserve by 412 and 564 bytes. Qualified nRF52 repeaters now use +the existing grouped Merkle-proof workspace instead of retaining every source +leaf: a 1,536-byte allowance replaces 4,096 bytes, saving 2,560 bytes of +worst-case active heap. The 1,024-block source capacity, wire proofs, sensors, +tables, stack and remaining reserves are retained. No admission gate was lowered. + +The Serial1 RS232 recipe already disables GPS because the bridge owns that +UART, but its release capability contract incorrectly required GPS. Both +RAK3401 bridge profiles now follow the existing UART ownership contract while +retaining the INA monitor drivers. Compatible recipes retain their GPS checks. +Validation passed 49 RAM tests, four source-proof suites and two GPS-contract +tests. The proof suites include sanitized nRF52 Full/Reduced runs through the +unchanged 1,024-block maximum, byte-identical proofs, allocation ownership, +backpressure and simultaneous fetching/serving. + +This finite sleep campaign does not qualify RF delivery, LoRa OTA installation, +UART peer traffic, external storage, regulator savings or battery life. +Application readback covers the package bytes, not protected storage or user +data; an unchanged runtime bootloader version is separate from a full +bootloader-byte preservation check. diff --git a/docs/test-results/rak3401_all_roles_cpu_sleep_2026-10-21.safe.json b/docs/test-results/rak3401_all_roles_cpu_sleep_2026-10-21.safe.json new file mode 100644 index 000000000..97048e6c1 --- /dev/null +++ b/docs/test-results/rak3401_all_roles_cpu_sleep_2026-10-21.safe.json @@ -0,0 +1,1420 @@ +{ + "schema": 1, + "scope": "RAK3401 sequential firmware CPU-sleep qualification", + "generated_utc": "2026-10-21T17:58:08.701525+00:00", + "status": "complete_with_failures", + "expected_images": 15, + "outcome_counts": { + "passed": 12, + "runtime_or_restoration_check_failed": 1, + "powersaving_unsupported": 2 + }, + "installed_sources_recorded": [ + "e16db810407d2c7071f6ca0ef089738bb31e439c", + "efad0076816f7ba2293c68f56f8db18ac17344b9" + ], + "CPU_capture_sources": [ + "e16db810407d2c7071f6ca0ef089738bb31e439c", + "efad0076816f7ba2293c68f56f8db18ac17344b9" + ], + "state_receipt_sha256": "d85f2f3ade57b7fa6cad21482be8a7fe6428b2787707236bff6ecc6119e8f60f", + "service_restored": true, + "final_image": "unified-full", + "final_handback_health": { + "core": { + "battery_mv": 4218, + "uptime_secs": 158, + "errors": 0, + "queue_len": 0 + }, + "snapshot_at_unix_seconds": 1792605446.4549475, + "serial_closed_before_service_start": true + }, + "bootloader_runtime_version_unchanged": true, + "app_only_DFU_no_bootloader_payload": true, + "build_history": { + "original_failed_receipts_preserved": true, + "correction_source": "efad0076816f7ba2293c68f56f8db18ac17344b9", + "corrected_six_package_builds_passed": true + }, + "images": [ + { + "key": "companion-full", + "role": "companion", + "target": "RAK_3401_companion_radio_full", + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "version": "v1.18.0.1-halo-keymind-cascade-dev-e16db810", + "sensor_profile": null, + "transport": "usb", + "zip_sha256": "000f92f910461d8ea10f0389dbba678ee6188ec0b3b0ac377dfd7f775126b955", + "application_sha256": "ea3a15f1d9855a34c933da2b1ab40566421a30a8c7584212a32b191b0c9adbe8", + "application_bytes": 686288, + "EndF_body_hash": "3f038be53ae6d1f0", + "capabilities_sha256": "f8474ba664f32cd3e2b0f8a4c79cc7eb1436f0eed711163dfafef97152ca66c4", + "memory_sha256": "a009efd7e323e635a21415793d8abd5102f69625126f342b6b2d8a1f8b3f89c5", + "measurement_present": true, + "measurement_reported_passed": true, + "powersaving_supported": true, + "powersaving_before": "on", + "powersaving_after": "on", + "cpu_sleep_reported_passed": true, + "capture_returncode": 0, + "sample_count": 8000, + "sleeping_samples": 5510, + "weighted_sleep_fraction": 0.6877725497602951, + "elapsed_ms": 90011, + "observed_ms": 90006.5, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 3, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 8000, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 5510, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [], + "core_before": { + "uptime_secs": 61, + "errors": 0, + "queue_len": 0 + }, + "core_after": { + "uptime_secs": 160, + "errors": 0, + "queue_len": 0 + }, + "UART_closed_for_capture": true, + "capture_sha256": "7ec3b1148fa1c54344b363c4b2e3620c08e04e28986ddde34ba123b04cdb21de", + "diagnostic_boolean_restored": true, + "usb_authorization_restored": true, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "0acb94085a64c5234a17b61f4e6240520fe9446b86913f4350f75a21695c060d", + "expected_application_sha256": "ea3a15f1d9855a34c933da2b1ab40566421a30a8c7584212a32b191b0c9adbe8", + "observed_application_sha256": "ea3a15f1d9855a34c933da2b1ab40566421a30a8c7584212a32b191b0c9adbe8", + "bytes": 686288, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "734397392da50605cd83ba087cec03caeec4b5b44e797849cbe62ea4dc4bb835", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 82828, + "required_heap_bytes": 59968, + "required_contiguous_bytes": 11008 + }, + "measurement_receipt_sha256": "3a11c6782981cf2d4508c24453450eae1da124fea2e21040dc4b3414e2454df8", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "passed", + "preparation_failed_before_sampling": false, + "latest_source_bound_followup": true, + "prior_attempts": [ + { + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "application_sha256": "ea3a15f1d9855a34c933da2b1ab40566421a30a8c7584212a32b191b0c9adbe8", + "outcome": "harness_or_protocol_failed", + "sample_count": null, + "sleeping_samples": null, + "weighted_sleep_fraction": null, + "preparation_failed_before_sampling": true, + "measurement_receipt_sha256": "b5c1d46ca2a42d16123d6ca2eeeb293c417f4af1758730da0d0d1a45fe926e60" + } + ] + }, + { + "key": "companion-usb", + "role": "companion", + "target": "RAK_3401_companion_radio_usb", + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "version": "v1.18.0.1-halo-keymind-cascade-dev-e16db810", + "sensor_profile": null, + "transport": "usb", + "zip_sha256": "12f3cfee02b02c66d06c8f0d3439150613ea7b71a9bb7f5ffc87d9d45fedc7e5", + "application_sha256": "7d21d0d63114f0b5da349f0f6dd6f947323737601b96570a3bddc4560d759d5d", + "application_bytes": 525628, + "EndF_body_hash": null, + "capabilities_sha256": "c3f16c2f53b6475c29a28a22fcb01c9b32c7086231d6ea084695cabe23ee35bf", + "memory_sha256": "3ed72c28a69b1bc0085a138e74a2eb108ec589a04bee77bd1d254c9e9da45834", + "measurement_present": true, + "measurement_reported_passed": true, + "powersaving_supported": true, + "powersaving_before": "on", + "powersaving_after": "on", + "cpu_sleep_reported_passed": true, + "capture_returncode": 0, + "sample_count": 7999, + "sleeping_samples": 6115, + "weighted_sleep_fraction": 0.7640833333333333, + "elapsed_ms": 90004, + "observed_ms": 90000.0, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 5, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 7999, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 6115, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [], + "core_before": { + "uptime_secs": 48, + "errors": 0, + "queue_len": 0 + }, + "core_after": { + "uptime_secs": 145, + "errors": 0, + "queue_len": 0 + }, + "UART_closed_for_capture": true, + "capture_sha256": "80ab4cc855288c1a84d4766f4be9b1c1f3478fe592d4c5be92ed4a37ec12c85b", + "diagnostic_boolean_restored": true, + "usb_authorization_restored": true, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "0b7edabd8e265e47929e2a51bf6bfd8fc995cfea0525b5ab5f10ed67a965961e", + "expected_application_sha256": "7d21d0d63114f0b5da349f0f6dd6f947323737601b96570a3bddc4560d759d5d", + "observed_application_sha256": "7d21d0d63114f0b5da349f0f6dd6f947323737601b96570a3bddc4560d759d5d", + "bytes": 525628, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "3033766160c52de6ede18ba1c086291ffa9f0c69e44a3e2ebbdb08e058f57197", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 98772, + "required_heap_bytes": 47872, + "required_contiguous_bytes": 11008 + }, + "measurement_receipt_sha256": "f9c903712c4a95f4592f9f18a5e85f67702d46b79068b1b097f13fd30d28b425", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "passed", + "preparation_failed_before_sampling": false, + "latest_source_bound_followup": true, + "prior_attempts": [ + { + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "application_sha256": "7d21d0d63114f0b5da349f0f6dd6f947323737601b96570a3bddc4560d759d5d", + "outcome": "harness_or_protocol_failed", + "sample_count": null, + "sleeping_samples": null, + "weighted_sleep_fraction": null, + "preparation_failed_before_sampling": true, + "measurement_receipt_sha256": "cc254ea6bb0786c125d4fde95731fa0fa8b96066cf9f10ef4372d01c6244bb76" + } + ] + }, + { + "key": "companion-ble", + "role": "companion", + "target": "RAK_3401_companion_radio_ble", + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "version": "v1.18.0.1-halo-keymind-cascade-dev-e16db810", + "sensor_profile": null, + "transport": "ble", + "zip_sha256": "ab945603b65675dd2fba9ed6af976c30c97798362e97fa968b1ab40a6de2b921", + "application_sha256": "548dbdff71525a652bc006b69ef1ba71de772209eb67fc896d1a3ebaa1c38c7b", + "application_bytes": 499360, + "EndF_body_hash": null, + "capabilities_sha256": "4e833c6b50c21a5ae5d34b3c4643ae2d8669db61f4b755dd38665987c1b5711c", + "memory_sha256": "90a5c19cd9a83c38f8689b2e21658bf394e895b38dae81b2a53215501f62ba02", + "measurement_present": true, + "measurement_reported_passed": true, + "powersaving_supported": true, + "powersaving_before": "on", + "powersaving_after": "on", + "cpu_sleep_reported_passed": true, + "capture_returncode": 0, + "sample_count": 8014, + "sleeping_samples": 5931, + "weighted_sleep_fraction": 0.7402891046865625, + "elapsed_ms": 90006, + "observed_ms": 90002.0, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 4, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 8014, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 5931, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [], + "core_before": { + "uptime_secs": 62, + "errors": 0, + "queue_len": 0 + }, + "core_after": { + "uptime_secs": 178, + "errors": 0, + "queue_len": 0 + }, + "UART_closed_for_capture": true, + "capture_sha256": "c0dbddbb2733d4a8e63d4fde9e0b3b4ca24463b251997ee313c62c7ee1dc1330", + "diagnostic_boolean_restored": true, + "usb_authorization_restored": true, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "582330ba908c42723470a5ed8580cfd40101e3308b5834a0fa04576f669056be", + "expected_application_sha256": "548dbdff71525a652bc006b69ef1ba71de772209eb67fc896d1a3ebaa1c38c7b", + "observed_application_sha256": "548dbdff71525a652bc006b69ef1ba71de772209eb67fc896d1a3ebaa1c38c7b", + "bytes": 499360, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "9c231bd0f56a3a29a750f7f438d8d46a55f22fa97bc3566678f2d3929db56352", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 95860, + "required_heap_bytes": 53792, + "required_contiguous_bytes": 11008 + }, + "measurement_receipt_sha256": "fc1da0e4a039617ad50f842b8e8fb3d0cb410f0b832c8da334b4ffc95a3bf3a8", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "passed", + "preparation_failed_before_sampling": false + }, + { + "key": "room-full", + "role": "room", + "target": "RAK_3401_room_server_lora_ota_no_external_sensors", + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "version": "v1.18.0.1-halo-keymind-cascade-dev-e16db810", + "sensor_profile": "full", + "transport": "usb", + "zip_sha256": "832e1b8d503f44e366246fcf3b969dd43234e8d8f5261a4b3ea94b6724da8d83", + "application_sha256": "2ac2640a9011d643cdfdc57ed61b4b69a95d43dffc19a5a3bbbfe19e46ce7835", + "application_bytes": 575620, + "EndF_body_hash": "4c60bc9f159e3048", + "capabilities_sha256": "902054ba9b4c9a32a3dff028a952ac749da8742aebca08f4ffe139e4b675de6b", + "memory_sha256": "d4690262964077e8a60f665778e1c29260cf439350100c2a1908665bcd2e826c", + "measurement_present": true, + "measurement_reported_passed": false, + "powersaving_supported": true, + "powersaving_before": "on", + "powersaving_after": "on", + "cpu_sleep_reported_passed": true, + "capture_returncode": 0, + "sample_count": 8009, + "sleeping_samples": 5929, + "weighted_sleep_fraction": 0.7400537724005377, + "elapsed_ms": 90013, + "observed_ms": 90009.0, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 2, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 8009, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 5929, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [], + "core_before": { + "uptime_secs": 51, + "errors": 0, + "queue_len": 0 + }, + "core_after": { + "uptime_secs": 148, + "errors": 2, + "queue_len": 0 + }, + "UART_closed_for_capture": true, + "capture_sha256": "d626276baa692447a777c0186295d917fd2d1e8f8fbc5c8850558097bcb8afa4", + "diagnostic_boolean_restored": null, + "usb_authorization_restored": null, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "ce5fa2ca35dc42142ee7ce12faf59633c5de67392d706c47a4f912f337e9d19e", + "expected_application_sha256": "2ac2640a9011d643cdfdc57ed61b4b69a95d43dffc19a5a3bbbfe19e46ce7835", + "observed_application_sha256": "2ac2640a9011d643cdfdc57ed61b4b69a95d43dffc19a5a3bbbfe19e46ce7835", + "bytes": 575620, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "08e0ae1e4ddcb1aae8417b8523e8daf97d428249d9cad8975f57ef521f3c1506", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 154660, + "required_heap_bytes": 60464, + "required_contiguous_bytes": 10256 + }, + "measurement_receipt_sha256": "0a262572be56610785bf10db913c6825fef60e18de00400734db2d3fbec2ac91", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "runtime_or_restoration_check_failed", + "preparation_failed_before_sampling": false, + "latest_source_bound_followup": true, + "prior_attempts": [ + { + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "application_sha256": "2ac2640a9011d643cdfdc57ed61b4b69a95d43dffc19a5a3bbbfe19e46ce7835", + "outcome": "harness_or_protocol_failed", + "sample_count": null, + "sleeping_samples": null, + "weighted_sleep_fraction": null, + "preparation_failed_before_sampling": true, + "measurement_receipt_sha256": "e29db6ea6cb4ccf389739d98696020ed2770c8abb5f041a5c229f63da62ac26c" + } + ] + }, + { + "key": "room-reduced", + "role": "room", + "target": "RAK_3401_room_server_lora_ota_no_external_sensors", + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "version": "v1.18.0.1-halo-keymind-cascade-dev-e16db810", + "sensor_profile": "reduced", + "transport": "usb", + "zip_sha256": "514660e2829e53d74f3a46565c8c703af455505310517c3d6d43da6a3cdb6da3", + "application_sha256": "859ee15efe13a5c4b3a64ad20918c490d6bd5d2bd9e61e54774b9b1a7239c4f3", + "application_bytes": 523076, + "EndF_body_hash": "1ce8b5d89dbe7aa2", + "capabilities_sha256": "f77dcd9833b7e67305adfcce7c711323027dad8623a55a2e262f38d6f08b093e", + "memory_sha256": "4d6ef68829c081b90dbda71bb296f2c836936b5d3dc5fd28f769ab96340836f3", + "measurement_present": true, + "measurement_reported_passed": true, + "powersaving_supported": true, + "powersaving_before": "on", + "powersaving_after": "on", + "cpu_sleep_reported_passed": true, + "capture_returncode": 0, + "sample_count": 7980, + "sleeping_samples": 5487, + "weighted_sleep_fraction": 0.6866792578602378, + "elapsed_ms": 90014, + "observed_ms": 90010.0, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 2, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 7980, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 5487, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [], + "core_before": { + "uptime_secs": 47, + "errors": 0, + "queue_len": 0 + }, + "core_after": { + "uptime_secs": 144, + "errors": 0, + "queue_len": 0 + }, + "UART_closed_for_capture": true, + "capture_sha256": "7202893f8531ac6600e4bb8393c5dc2cc3bf8bafb04a5f84aa221e439623abaa", + "diagnostic_boolean_restored": true, + "usb_authorization_restored": null, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "9d2def07b181e9712af19b86f8ec4bf0c105190ca42198256f012ad349b3a158", + "expected_application_sha256": "859ee15efe13a5c4b3a64ad20918c490d6bd5d2bd9e61e54774b9b1a7239c4f3", + "observed_application_sha256": "859ee15efe13a5c4b3a64ad20918c490d6bd5d2bd9e61e54774b9b1a7239c4f3", + "bytes": 523076, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "10d8754e9c043a85d9e1abc8b4436bb4ed1e906c4de06d414fedb5865586d00d", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 157648, + "required_heap_bytes": 60464, + "required_contiguous_bytes": 10256 + }, + "measurement_receipt_sha256": "7cc3ca4a3eb0f36ee893ef5799eb407162384e7c73b1024daebb68badb125a8c", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "passed", + "preparation_failed_before_sampling": false, + "latest_source_bound_followup": true, + "prior_attempts": [ + { + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "application_sha256": "859ee15efe13a5c4b3a64ad20918c490d6bd5d2bd9e61e54774b9b1a7239c4f3", + "outcome": "harness_or_protocol_failed", + "sample_count": null, + "sleeping_samples": null, + "weighted_sleep_fraction": null, + "preparation_failed_before_sampling": true, + "measurement_receipt_sha256": "e65ed289bbb8464bab9e5d4639103c05226ca68c3cb42d55b4135ceb72c0fc26" + } + ] + }, + { + "key": "sensor-full", + "role": "sensor", + "target": "RAK_3401_sensor_lora_ota_no_external_sensors", + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "version": "v1.18.0.1-halo-keymind-cascade-dev-e16db810", + "sensor_profile": "full", + "transport": "usb", + "zip_sha256": "e659020046f0872c8c74fbbe8afdbf7a0ae670d2a47d38a7d21886cedd59ea93", + "application_sha256": "8712bcfaf491b2934674ef0b992312c53f2ecab4f7d831ea1b9670c477394b82", + "application_bytes": 537680, + "EndF_body_hash": "03f4768418a7289d", + "capabilities_sha256": "f4514a6b8da24c902105d4c3e72961d7ae56d27bd75c1b7f2700a1211bd9dbe5", + "memory_sha256": "b07c46fa4519f3af449225781591dce83c445557b5f247aeae1b08d6d2916776", + "measurement_present": true, + "measurement_reported_passed": true, + "powersaving_supported": true, + "powersaving_before": "on", + "powersaving_after": "on", + "cpu_sleep_reported_passed": true, + "capture_returncode": 0, + "sample_count": 7992, + "sleeping_samples": 5890, + "weighted_sleep_fraction": 0.7381990700361653, + "elapsed_ms": 90007, + "observed_ms": 90003.5, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 2, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 7992, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 5890, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [], + "core_before": { + "uptime_secs": 124, + "errors": 0, + "queue_len": 0 + }, + "core_after": { + "uptime_secs": 220, + "errors": 0, + "queue_len": 0 + }, + "UART_closed_for_capture": true, + "capture_sha256": "7d81b7d1f7f326f9a600c3522d4eb2761d6c4b13dd207d6a838cb509e62e75d0", + "diagnostic_boolean_restored": true, + "usb_authorization_restored": null, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "a6b4f9c3404229a0342f359e498a4b6ebf680b8dd164fb4f6d760da7af3e0450", + "expected_application_sha256": "8712bcfaf491b2934674ef0b992312c53f2ecab4f7d831ea1b9670c477394b82", + "observed_application_sha256": "8712bcfaf491b2934674ef0b992312c53f2ecab4f7d831ea1b9670c477394b82", + "bytes": 537680, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "457665b76263daec9797bad7a2ce5d68ae8f3a6dbadee21ca8a0dc90840c9867", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 163948, + "required_heap_bytes": 60464, + "required_contiguous_bytes": 10256 + }, + "measurement_receipt_sha256": "db8ad108180858931e683a197733838b8b73f5aa5afb2829d258c724f6ed3ac5", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "passed", + "preparation_failed_before_sampling": false + }, + { + "key": "sensor-reduced", + "role": "sensor", + "target": "RAK_3401_sensor_lora_ota_no_external_sensors", + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "version": "v1.18.0.1-halo-keymind-cascade-dev-e16db810", + "sensor_profile": "reduced", + "transport": "usb", + "zip_sha256": "cee3a05eb04f46fa6569c9c9af6ccc799175bd17340157b7f9706c7966408de8", + "application_sha256": "9533a39d4f50eef8f552e193a364431607caa89e946fb0a3463ef4d4f7b7f055", + "application_bytes": 484208, + "EndF_body_hash": "266cf2be76d88530", + "capabilities_sha256": "1a38fd8e529f4e34c57f72006b8c84f6374f214c25c72a5b23a61d7cbeb91b44", + "memory_sha256": "2217776f25a531d1ed87d11c2ad29903390bf5eb6f660a5e90bdcc01e56cb323", + "measurement_present": true, + "measurement_reported_passed": true, + "powersaving_supported": true, + "powersaving_before": "on", + "powersaving_after": "on", + "cpu_sleep_reported_passed": true, + "capture_returncode": 0, + "sample_count": 8028, + "sleeping_samples": 6099, + "weighted_sleep_fraction": 0.7600444444444444, + "elapsed_ms": 90005, + "observed_ms": 90000.0, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 2, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 8028, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 6099, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [], + "core_before": { + "uptime_secs": 42, + "errors": 0, + "queue_len": 0 + }, + "core_after": { + "uptime_secs": 138, + "errors": 0, + "queue_len": 0 + }, + "UART_closed_for_capture": true, + "capture_sha256": "64dab942d951cd9e7bf1db8399fc1ed8a08b9431dc14950297ab2e428058b253", + "diagnostic_boolean_restored": true, + "usb_authorization_restored": null, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "9f6de854483e067d13fd05f5a59c7ea28b42004cfd4684bca67e1f8828fde649", + "expected_application_sha256": "9533a39d4f50eef8f552e193a364431607caa89e946fb0a3463ef4d4f7b7f055", + "observed_application_sha256": "9533a39d4f50eef8f552e193a364431607caa89e946fb0a3463ef4d4f7b7f055", + "bytes": 484208, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "5beca1f66f2439a49260541df3aab15032f48a04b2088517849c5bfe90207728", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 166944, + "required_heap_bytes": 60464, + "required_contiguous_bytes": 10256 + }, + "measurement_receipt_sha256": "dd245bd323b2c6f0bfa9050565d47e26f9a9131a948dc2e97ab6c24a79e982a5", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "passed", + "preparation_failed_before_sampling": false + }, + { + "key": "terminal", + "role": "terminal", + "target": "RAK_3401_terminal_chat", + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "version": "v1.18.0.1-halo-keymind-cascade-dev-e16db810", + "sensor_profile": null, + "transport": "usb", + "zip_sha256": "5d3c77cf991a391a31919bcbc664a396759707e152aa8abf5ab110215142dad5", + "application_sha256": "b0af0e4185e44337d170b42a719cf8798d15634c7d47a402dad22c9718400c13", + "application_bytes": 399296, + "EndF_body_hash": null, + "capabilities_sha256": "b079c2ab61bc196820c5168a7c315f319ea824cf0b0539591eeeffce38a330cc", + "memory_sha256": "03cfbdfedd09cff8c1942d251a98b9fec76591c02200a7f3c382592d44076665", + "measurement_present": true, + "measurement_reported_passed": false, + "powersaving_supported": false, + "powersaving_before": null, + "powersaving_after": null, + "cpu_sleep_reported_passed": false, + "capture_returncode": 0, + "sample_count": 8012, + "sleeping_samples": 0, + "weighted_sleep_fraction": 0.0, + "elapsed_ms": 90011, + "observed_ms": 90006.5, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 2, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 8012, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 0, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [ + "insufficient_sleeping_observations" + ], + "core_before": { + "uptime_secs": null, + "errors": null, + "queue_len": null + }, + "core_after": { + "uptime_secs": null, + "errors": null, + "queue_len": null + }, + "UART_closed_for_capture": true, + "capture_sha256": "7a438d2c3b07e5f7434e8885daeb5d8a118904f12db0ffe96d555d5f2d06f873", + "diagnostic_boolean_restored": null, + "usb_authorization_restored": null, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "5e3d66113a9c6dca45b380c6df2d03c94049ad3ea08234d3a22c318991d4f730", + "expected_application_sha256": "b0af0e4185e44337d170b42a719cf8798d15634c7d47a402dad22c9718400c13", + "observed_application_sha256": "b0af0e4185e44337d170b42a719cf8798d15634c7d47a402dad22c9718400c13", + "bytes": 399296, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "a94897f491403a7a30f2f63f3cbbeba631facbaa0b58517a380fb4e388437709", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 180308, + "required_heap_bytes": 37888, + "required_contiguous_bytes": 10240 + }, + "measurement_receipt_sha256": "af31399ccb4bfd25cd936ff515585cfb13df0024177c6af85f0413d77589a181", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "powersaving_unsupported", + "preparation_failed_before_sampling": false, + "latest_source_bound_followup": true, + "prior_attempts": [ + { + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "application_sha256": "b0af0e4185e44337d170b42a719cf8798d15634c7d47a402dad22c9718400c13", + "outcome": "harness_or_protocol_failed", + "sample_count": null, + "sleeping_samples": null, + "weighted_sleep_fraction": null, + "preparation_failed_before_sampling": true, + "measurement_receipt_sha256": "363270b050436b6b6430a2267360ca05de0313aabc2b6506983d3ad86039953c" + } + ] + }, + { + "key": "kiss", + "role": "kiss", + "target": "RAK_3401_kiss_modem", + "source_commit": "e16db810407d2c7071f6ca0ef089738bb31e439c", + "version": "v1.18.0.1-halo-keymind-cascade-dev-e16db810", + "sensor_profile": null, + "transport": "usb", + "zip_sha256": "f8d01848f6e78561ad5d65cf30abe31b2e2ad28786add084d541c93e4e913525", + "application_sha256": "4734f014bcc01cff985b3d0950bfc06a81beee9f40ff6ae2bac82e2c4ba4a12a", + "application_bytes": 279564, + "EndF_body_hash": null, + "capabilities_sha256": "b04d168e16aad3be541f778d57257b6ec513f03d6270d33cabe958d7d6ac9d46", + "memory_sha256": "2ebcbba08dd08515ce0b2e4dafa5d44602a2e9fa18c20affa0a629b039c60255", + "measurement_present": true, + "measurement_reported_passed": false, + "powersaving_supported": false, + "powersaving_before": null, + "powersaving_after": null, + "cpu_sleep_reported_passed": false, + "capture_returncode": 0, + "sample_count": 8054, + "sleeping_samples": 0, + "weighted_sleep_fraction": 0.0, + "elapsed_ms": 90006, + "observed_ms": 90002.0, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 4, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 8054, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 0, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [ + "insufficient_sleeping_observations" + ], + "core_before": { + "uptime_secs": null, + "errors": null, + "queue_len": null + }, + "core_after": { + "uptime_secs": null, + "errors": null, + "queue_len": null + }, + "UART_closed_for_capture": true, + "capture_sha256": "16fb7d7c701f0b9320d1cd27f50d4c22af5db3fa437791f49e0d2448f79055bb", + "diagnostic_boolean_restored": null, + "usb_authorization_restored": null, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "8b7f759c11f5cf1582ac0354bd7d473a1947d81422290cf87c658133fec3ffe4", + "expected_application_sha256": "4734f014bcc01cff985b3d0950bfc06a81beee9f40ff6ae2bac82e2c4ba4a12a", + "observed_application_sha256": "4734f014bcc01cff985b3d0950bfc06a81beee9f40ff6ae2bac82e2c4ba4a12a", + "bytes": 279564, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "8794702478cfc61cbc4139ee46b7e9c0717a0f1be42869cc0077b454e13635a3", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 211052, + "required_heap_bytes": 37888, + "required_contiguous_bytes": 10240 + }, + "measurement_receipt_sha256": "ab3b641e06722062e6a9722c93c1a97f83a5b74bc2fc63f6872ba3a60ac8d28f", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "powersaving_unsupported", + "preparation_failed_before_sampling": false + }, + { + "key": "rs232-full", + "role": "repeater", + "target": "RAK_3401_repeater_bridge_rs232_serial1", + "source_commit": "efad0076816f7ba2293c68f56f8db18ac17344b9", + "version": "v1.18.0.1-halo-keymind-cascade-dev-efad0076", + "sensor_profile": "full", + "transport": "usb", + "zip_sha256": "d7e3e547579a85d27416ac5ab3eec1d47f20134c2b11504cf2e979ea2234b52b", + "application_sha256": "7c13795704607cb43566a6dffefc8d9487fd6c7b21f07c8b3ff76bf3f3fe50ff", + "application_bytes": 616488, + "EndF_body_hash": "4728de9096fb5c8f", + "capabilities_sha256": "6c3c2093e0f62560b7610402cecb5a09566e1e5bab98676201f1eb4b6705ec20", + "memory_sha256": "8fc99a7bcd4cddda8b6d14ce0ce94fd1a33f65f0fb8ea4c6f8d3d3f680f85e23", + "measurement_present": true, + "measurement_reported_passed": true, + "powersaving_supported": true, + "powersaving_before": "on", + "powersaving_after": "on", + "cpu_sleep_reported_passed": true, + "capture_returncode": 0, + "sample_count": 8134, + "sleeping_samples": 6257, + "weighted_sleep_fraction": 0.7694452776944528, + "elapsed_ms": 90012, + "observed_ms": 90009.0, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 6, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 8134, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 6257, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [], + "core_before": { + "uptime_secs": 53, + "errors": 0, + "queue_len": 0 + }, + "core_after": { + "uptime_secs": 149, + "errors": 0, + "queue_len": 0 + }, + "UART_closed_for_capture": true, + "capture_sha256": "57445274057f2de1db13c8f5556f8f6d3a3c749cbd8cbb87f6208a88dedd7b94", + "diagnostic_boolean_restored": true, + "usb_authorization_restored": null, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "2988cc3096c6274cb240455b8b9ce9eaab2b8523261e1c659d3e46bbea9c0fbc", + "expected_application_sha256": "7c13795704607cb43566a6dffefc8d9487fd6c7b21f07c8b3ff76bf3f3fe50ff", + "observed_application_sha256": "7c13795704607cb43566a6dffefc8d9487fd6c7b21f07c8b3ff76bf3f3fe50ff", + "bytes": 616488, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "c91a250aff109c7d4de80adf436ff0c615e866c29b8c04a04006c7c15545b333", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 150644, + "required_heap_bytes": 77936, + "required_contiguous_bytes": 21184 + }, + "measurement_receipt_sha256": "3062ed53c26358d9fe30f76bce3172859e158e5938975483b2f3c4d8351e2cee", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "passed", + "preparation_failed_before_sampling": false + }, + { + "key": "rs232-reduced", + "role": "repeater", + "target": "RAK_3401_repeater_bridge_rs232_serial1", + "source_commit": "efad0076816f7ba2293c68f56f8db18ac17344b9", + "version": "v1.18.0.1-halo-keymind-cascade-dev-efad0076", + "sensor_profile": "reduced", + "transport": "usb", + "zip_sha256": "1b2905d4f379c7cf40fcdfc7a874dfa6d3683b63e44f97fa4df643135460349a", + "application_sha256": "5e992c3d0a9cf4d586d1e88bc0925f2d3ee6a57658cc0688de3099558259eb71", + "application_bytes": 563932, + "EndF_body_hash": "9ac0ab238e917644", + "capabilities_sha256": "98343e6e9181c8196ac7332cf3f5f49ad9fb38234bb07e22f56d53f63eb5ae5f", + "memory_sha256": "992d642f022e97dbd33df50a6975d2ccd691de14c8d4138222b4dc3c7aa37cd5", + "measurement_present": true, + "measurement_reported_passed": true, + "powersaving_supported": true, + "powersaving_before": "on", + "powersaving_after": "on", + "cpu_sleep_reported_passed": true, + "capture_returncode": 0, + "sample_count": 8094, + "sleeping_samples": 6428, + "weighted_sleep_fraction": 0.7953080905717397, + "elapsed_ms": 90010, + "observed_ms": 90006.0, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 3, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 8094, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 6428, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [], + "core_before": { + "uptime_secs": 49, + "errors": 0, + "queue_len": 0 + }, + "core_after": { + "uptime_secs": 145, + "errors": 0, + "queue_len": 0 + }, + "UART_closed_for_capture": true, + "capture_sha256": "1faff3f98c2783915e2179c14c89504811f963c0e93195ded034c18e04cd17df", + "diagnostic_boolean_restored": true, + "usb_authorization_restored": null, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "85c7b2ac276899c0f944676846845038af5203afdb9bcc1dc602518d3930cc3e", + "expected_application_sha256": "5e992c3d0a9cf4d586d1e88bc0925f2d3ee6a57658cc0688de3099558259eb71", + "observed_application_sha256": "5e992c3d0a9cf4d586d1e88bc0925f2d3ee6a57658cc0688de3099558259eb71", + "bytes": 563932, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "4d5829dbf7e95f224d2b45fc03c2ba885390b4b0dc1d552161021fde752ea0e5", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 153624, + "required_heap_bytes": 77936, + "required_contiguous_bytes": 21184 + }, + "measurement_receipt_sha256": "361ed3225e2accd856ffa3964ff784fce123ad7830fa22b45a786bad7f1d3cfa", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "passed", + "preparation_failed_before_sampling": false + }, + { + "key": "repeater-full", + "role": "repeater", + "target": "RAK_3401_repeater_lora_ota_no_external_sensors", + "source_commit": "efad0076816f7ba2293c68f56f8db18ac17344b9", + "version": "v1.18.0.1-halo-keymind-cascade-dev-efad0076", + "sensor_profile": "full", + "transport": "usb", + "zip_sha256": "3632e900a98544bce453fe2505ee9193e9b59558b55fbcd7c96125152d716fc3", + "application_sha256": "755f39d64321aa09f7dc219dadc94747c644ea287e2ba7b6bd8d09896a5ee6ac", + "application_bytes": 618196, + "EndF_body_hash": "3e1f108c1bedf8bb", + "capabilities_sha256": "d9df0be64e011ca116c67b92ec9d42e749a929811d7409f4ea5734870bae1e41", + "memory_sha256": "3df846c01bb2698726b4dfe2a55e47a750183e296298484195dcd4be6d2d9734", + "measurement_present": true, + "measurement_reported_passed": true, + "powersaving_supported": true, + "powersaving_before": "on", + "powersaving_after": "on", + "cpu_sleep_reported_passed": true, + "capture_returncode": 0, + "sample_count": 8106, + "sleeping_samples": 6275, + "weighted_sleep_fraction": 0.773756812462153, + "elapsed_ms": 90003, + "observed_ms": 90000.5, + "maximum_gap_ms": 16.5, + "maximum_read_ms": 4, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 8106, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 6275, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [], + "core_before": { + "uptime_secs": 54, + "errors": 0, + "queue_len": 0 + }, + "core_after": { + "uptime_secs": 149, + "errors": 0, + "queue_len": 0 + }, + "UART_closed_for_capture": true, + "capture_sha256": "09c3b563b7221b21762587ae2ec6336ba804ed4df6e8bb1f2016df992c3c6d52", + "diagnostic_boolean_restored": true, + "usb_authorization_restored": null, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "d53e3d497129516e53aef317a7ea93b47895f05bf05981f17c5fdf89c6d8de91", + "expected_application_sha256": "755f39d64321aa09f7dc219dadc94747c644ea287e2ba7b6bd8d09896a5ee6ac", + "observed_application_sha256": "755f39d64321aa09f7dc219dadc94747c644ea287e2ba7b6bd8d09896a5ee6ac", + "bytes": 618196, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "16b0175178e35ad2cfdfb3c649d6fe03475e4ea09790b663f3a0ffe768300a90", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 80084, + "required_heap_bytes": 77936, + "required_contiguous_bytes": 21184 + }, + "measurement_receipt_sha256": "d4fd14a4055d89d06456dc337a6ce2c056d4a78959fab9cdd8effcd55b38314a", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "passed", + "preparation_failed_before_sampling": false + }, + { + "key": "repeater-reduced", + "role": "repeater", + "target": "RAK_3401_repeater_lora_ota_no_external_sensors", + "source_commit": "efad0076816f7ba2293c68f56f8db18ac17344b9", + "version": "v1.18.0.1-halo-keymind-cascade-dev-efad0076", + "sensor_profile": "reduced", + "transport": "usb", + "zip_sha256": "a227c4c1bd890a6e54829ab114072bc3fb8b39be0820ef7d6275f08fdd666579", + "application_sha256": "559150aeca6fb982af59ec6c4fb5f353b42e268d5b417d3fea05789306ecceb5", + "application_bytes": 565960, + "EndF_body_hash": "d7e943cd9fe2909b", + "capabilities_sha256": "298cbf87e9285e2628e2478b3e3b0f1664da19b0d448ae00bd104d9805f33d22", + "memory_sha256": "2211b2db4c10349a06bb76ff6c9c025870c76703a807f5d684bbf3825aaf93ef", + "measurement_present": true, + "measurement_reported_passed": true, + "powersaving_supported": true, + "powersaving_before": "on", + "powersaving_after": "on", + "cpu_sleep_reported_passed": true, + "capture_returncode": 0, + "sample_count": 8073, + "sleeping_samples": 6138, + "weighted_sleep_fraction": 0.7593964913840034, + "elapsed_ms": 90011, + "observed_ms": 90007.0, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 4, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 8073, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 6138, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [], + "core_before": { + "uptime_secs": 49, + "errors": 0, + "queue_len": 0 + }, + "core_after": { + "uptime_secs": 145, + "errors": 0, + "queue_len": 0 + }, + "UART_closed_for_capture": true, + "capture_sha256": "ac8d3a6f8d7284a00b9806d81edd30e8bc575c444a8cc23b431f7ec2a7000828", + "diagnostic_boolean_restored": true, + "usb_authorization_restored": null, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "65949dbde08dfb444526901b27007bd7875813dbff65ab862d044c3a1b80f197", + "expected_application_sha256": "559150aeca6fb982af59ec6c4fb5f353b42e268d5b417d3fea05789306ecceb5", + "observed_application_sha256": "559150aeca6fb982af59ec6c4fb5f353b42e268d5b417d3fea05789306ecceb5", + "bytes": 565960, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "5a270f2dc85e9eb6a146ed522852e2b20f1a32a3fc55657ecd595247bf932307", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 83056, + "required_heap_bytes": 77936, + "required_contiguous_bytes": 21184 + }, + "measurement_receipt_sha256": "e1cb399597c3e43aafb66cd04aa5b6646dc047a399c7827db06bdb7d700e4bf0", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "passed", + "preparation_failed_before_sampling": false + }, + { + "key": "unified-reduced", + "role": "repeater", + "target": "RAK_3401_repeater_unified_lora_ota", + "source_commit": "efad0076816f7ba2293c68f56f8db18ac17344b9", + "version": "v1.18.0.1-halo-keymind-cascade-dev-efad0076", + "sensor_profile": "reduced", + "transport": "usb", + "zip_sha256": "ad63bd3fdfdf19c01012ad5b267ecd0be93dfb94e28202801efbd448e03956e3", + "application_sha256": "9d7ff8068dd05a831b5830a2cdfe8b12b50b61e51f511e77a9225e843f3f60ff", + "application_bytes": 577852, + "EndF_body_hash": "e60782d3dbba43c7", + "capabilities_sha256": "0f1c8942b07f76c9725cc16aef545a35a743516e567fe6451ab834c5336287e4", + "memory_sha256": "6476550f2dad1c5d8a1658d93767eb2b22ec89995856cd729da917522e52970c", + "measurement_present": true, + "measurement_reported_passed": true, + "powersaving_supported": true, + "powersaving_before": "on", + "powersaving_after": "on", + "cpu_sleep_reported_passed": true, + "capture_returncode": 0, + "sample_count": 8019, + "sleeping_samples": 6393, + "weighted_sleep_fraction": 0.7969492109166255, + "elapsed_ms": 90014, + "observed_ms": 90009.5, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 2, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 8019, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 6393, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [], + "core_before": { + "uptime_secs": 50, + "errors": 0, + "queue_len": 0 + }, + "core_after": { + "uptime_secs": 147, + "errors": 0, + "queue_len": 0 + }, + "UART_closed_for_capture": true, + "capture_sha256": "56756e56470de8517e14d8123366705933faebbca514c9cd8c34e689bdd47255", + "diagnostic_boolean_restored": true, + "usb_authorization_restored": null, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "abd7fb29a40124b3d9c478e89fea33a6fde47b7194bae6d32f28f821a9949337", + "expected_application_sha256": "9d7ff8068dd05a831b5830a2cdfe8b12b50b61e51f511e77a9225e843f3f60ff", + "observed_application_sha256": "9d7ff8068dd05a831b5830a2cdfe8b12b50b61e51f511e77a9225e843f3f60ff", + "bytes": 577852, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "54b76c8fb448d2da182e401533324bf576c1ccecd07155fd78cb18a238d6067d", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 82720, + "required_heap_bytes": 77728, + "required_contiguous_bytes": 15808 + }, + "measurement_receipt_sha256": "16664c34e99c59ba03cd53201a0131c58e2140f97f945f73f5d92ac4d702cf34", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "passed", + "preparation_failed_before_sampling": false + }, + { + "key": "unified-full", + "role": "repeater", + "target": "RAK_3401_repeater_unified_lora_ota", + "source_commit": "efad0076816f7ba2293c68f56f8db18ac17344b9", + "version": "v1.18.0.1-halo-keymind-cascade-dev-efad0076", + "sensor_profile": "full", + "transport": "usb", + "zip_sha256": "ec3aa4b7023c4fddb45f4b7e5ae8756181599222146f4ffb0be317626a2c32b1", + "application_sha256": "6a8bdb84db07bcc9f9c252df7221d43b6a182cd914aeed49746cd58ebe651614", + "application_bytes": 630076, + "EndF_body_hash": "3d28fc48c0f34c01", + "capabilities_sha256": "cd4011fff9891e638771c763e9e2a318fb7c6839720da9a61640ea084dc957aa", + "memory_sha256": "141c8096698e8e9980aecd84ef622f956c7afd85e437537ac5cb4b7dc3b79272", + "measurement_present": true, + "measurement_reported_passed": true, + "powersaving_supported": true, + "powersaving_before": "on", + "powersaving_after": "on", + "cpu_sleep_reported_passed": true, + "capture_returncode": 0, + "sample_count": 8013, + "sleeping_samples": 5875, + "weighted_sleep_fraction": 0.7318940420898242, + "elapsed_ms": 90003, + "observed_ms": 89998.0, + "maximum_gap_ms": 16.0, + "maximum_read_ms": 2, + "baseline_debug_enabled": true, + "baseline_debug_control": "0001", + "initial_sticky_reset": true, + "sample_flags": { + "C_DEBUGEN": 8013, + "C_HALT": 0, + "C_STEP": 0, + "C_MASKINTS": 0, + "S_HALT": 0, + "S_SLEEP": 5875, + "S_LOCKUP": 0, + "S_RESET_ST": 0 + }, + "parser_failures": [], + "core_before": { + "uptime_secs": 56, + "errors": 0, + "queue_len": 0 + }, + "core_after": { + "uptime_secs": 154, + "errors": 0, + "queue_len": 0 + }, + "UART_closed_for_capture": true, + "capture_sha256": "9377d1b9caf6b2d258afa33d2ff5c9b75af200805cf7469a911b0e23e43c86b1", + "diagnostic_boolean_restored": true, + "usb_authorization_restored": null, + "no_sampled_halt_step_mask_or_lockup": true, + "no_reset_during_capture": true, + "debug_control_unchanged": true, + "capture_integrity_passed": true, + "application_readback": { + "receipt_present": true, + "receipt_sha256": "f4a43629e83473e446eb27ad9d428ace68845af2d7a44fbd0c8643ec11d60259", + "expected_application_sha256": "6a8bdb84db07bcc9f9c252df7221d43b6a182cd914aeed49746cd58ebe651614", + "observed_application_sha256": "6a8bdb84db07bcc9f9c252df7221d43b6a182cd914aeed49746cd58ebe651614", + "bytes": 630076, + "returncode": 0, + "halt_reset_or_debug_control_write": false, + "config_sha256": "d91509a13c80d0b4b5403e480acf3187538a39db0b97a1ffe86b56df089ba281", + "log_sha256": "47de065e1a5b127846c73f90654054bb49e0a7aa5d932429828cec0a56ca3782", + "passed": true, + "files_verified": true + }, + "metadata": { + "capabilities_verified": true, + "memory_verified": true, + "available_internal_bytes": 79724, + "required_heap_bytes": 77728, + "required_contiguous_bytes": 15808 + }, + "measurement_receipt_sha256": "980fc6ad7c3daf7823e98cc57a81dda28c89f03eadbe4c7c651e3ff20100d5f3", + "capture_file_verified": true, + "artifact_receipt_consistent": true, + "outcome": "passed", + "preparation_failed_before_sampling": false + } + ], + "limits": [ + "Sampled S_SLEEP observations are not exact residency or electrical current.", + "Application readback covers only package bytes at 0x26000; no user-data or protected-storage preservation proof follows.", + "Application-only DFU and unchanged bootloader version are separate from a complete bootloader-byte preservation check.", + "No RF delivery, coverage, throughput, GPS or battery-life claim follows from this CPU-sleep campaign.", + "A valid capture with insufficient sleeping observations is separate from an invalid capture or failed test harness." + ], + "cpu_sleep_pass_count": 13, + "runtime_health_findings": [ + { + "image": "room-full", + "core_errors_before": 0, + "core_errors_after": 2, + "meaning": "latched CAD/channel-busy timeout bit", + "cpu_sleep_passed": true, + "overall_health_passed": false, + "cause_not_isolated": true + } + ] +}