Files
HaloKeymind/docs/pr7_review_validation.md
T

79 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PR #7 review and validation
Validated on 2026-09-10 against integration commit
`fa010196b130dee9a8a6fc6325d794e2f4fb9ede`, which combines base `01cc7b8a`
with PR head `c002966c` and the review fixes. This includes the stacked ESP32
memory changes already present in PR #7.
## Review fixes
- Use the [published ExpressLRS Linkflow calibration](https://github.com/ExpressLRS/Targets/blob/504178dcfa469ee32f4290d6ae9ba02e2f2f365e/TX/GEPRC%20900%20Linkflow.json),
expose 17–30 dBm, and retain the fixed +2 dBm radio drive and correct RF output
after radio recovery. Propagate startup and radio-setting failures.
- Keep Linkflow LoRa OTA enabled, as intended by the added repeater target.
- Preserve stored ACLs and flood filters when allocation fails. Release owned
buffers and prevent accidental shallow copies of their owners.
- Release heap OTA workspaces after self-serving windows; retain them for active
transfers, manual staging, folder operations, and pending application. Service
cleanup on Companions and reset staged-resume flags when a context disappears.
- Count dynamically allocated clients, filters, and OTA workspaces in the RAM
budget. Respect explicit OTA storage ownership in PlatformIO flags.
## Automated validation
- `pio test -e native -e native_kiss_modem`: **1,393/1,393 cases passed**.
- Real C++ radio-power, heap-context, ACL persistence/CLI, and shared OTA queue
tests passed. The applicable radio-power, heap-context, and shared-queue tests
also passed on Linux with AddressSanitizer and UndefinedBehaviorSanitizer.
- Display/inbox, radio receive, static DRAM, and runtime RAM regression tests
passed. ACL allocation-failure coverage verifies that stored clients survive.
- Sequential firmware builds and their memory gates passed for:
`GEPRC_Linkflow_900_repeater`, `Heltec_v2_companion_radio_ble`,
`Tbeam_SX1262_repeater_observer_mqtt`,
`heltec_v4_r8_repeater_observer_mqtt`, `RAK_4631_repeater`, and
`SenseCapIndicator-LoRa_companion_radio_full`.
## Indicator hardware validation
The original SenseCAP Indicator LoRa with 8 MiB flash and 8 MiB octal PSRAM
was reached through the MercerWoodMesh Pi over Wi-Fi. Its MAC, public identity,
board reply, and existing partition layout were checked before updating.
USB interfaces were absent, so this run does not qualify USB behavior.
The Full profile was applied to `SenseCapIndicator-LoRa_comp_radio_usb_wifi`.
The exact application is 2,149,208 bytes:
- Application SHA-256:
`7a2b11e731f946af79d1104818c7993d3897e6d8ec1f0121d27284c0f0c8c665`
- ELF SHA-256, also verified in the application descriptor:
`24e60c7785a7aefe3fb0536b0b595bf19e1264e4d5f100d201290dc95eb1761a`
This direct profile build uses the repository's default `v1.17.1` version text
and `14 Aug 2026` build-date text; the hashes above identify the tested image.
The Wi-Fi updater returned HTTP 200 and booted the application in `app1` at
`0x400000`. The previous application remains in `app0` at `0x10000`; the
partition table, NVS, and SPIFFS were not rewritten. Public identity, radio
parameters, and USB logging preference matched their pre-update values.
The existing Companion stress harness, using a TCP socket adapter, completed
100 persistent cycles and 100 reconnects in 109.9 seconds: **501 requests and
501 validated responses**, with no discarded bytes, malformed frames, or device
error flags. Device info, time, storage, and core statistics were exercised.
The text terminal exposed all four display-power controls and `display.inbox`.
The OTA folder service issued a valid `COUNT` request, received an empty-folder
reply, and returned to its disconnected state after the client closed.
After these checks, four memory snapshots showed 69,548–69,996 bytes of free
internal heap and a 61,428-byte largest block. PSRAM availability stayed at
6,408,731 bytes. Final uptime was 262 seconds, with zero error flags and an
empty outbound queue. This is a short regression check, not a long-term soak.
Raw baseline, upload, stress, and final-state records are retained on the Pi
under `/home/mikec/hwtest/runs/pr7-review/`.
No Linkflow module or RF power meter was available in this run. Linkflow power
calibration is supported by the pinned upstream table and executable driver
tests, not a physical RF output measurement. The Indicator's ESP32-S3 does not
exercise the classic ESP32 heap-OTA default; host tests and classic ESP32 builds
cover that path. Physical display readability was not inspected.