View this page on MeshCore Docs.
RAK release fixes and targeted hardware checks, 22 October 2026
Status: RAK4631 Full/Reduced Repeater builds and physical radio checks PASS; RAK3401 Full Room Server radio, CPU sleep and health checks PASS. All six selected RAK release packages passed their existing capacity, capability, Bluetooth DFU and packaging gates.
Firmware and hardware results are bound to
adb11e7b4.
The later 302e441e2 changes only Mini-selected CLI messages; selecting the
non-Mini branches reproduces the prior RAK source byte for byte. Unchanged RAK
checks were retained. The machine-readable receipt
includes package hashes, RAM requirements, radio counters and CPU observations.
RAM repair
The fresh starting source, e34e83e6b, failed both RAK4631 Repeater profiles:
Full had 81,668 internal bytes available against 85,152 required; Reduced had
84,680 against 85,152. These are separate from the earlier Full Companion
flash repair.
Repeater rule targets cannot contain both a scope and a region. One tagged 32-byte name replaces their two separate names, reducing each actual rule from 332 to 300 bytes. All 63 slots remain, saving 2,016 allocated heap bytes. FPF6/7/8 file formats retain their existing field widths and validation.
Ordinary nRF52 SSD1306 builds now use the existing source-enforced 2 KiB allocation bound for this same concrete driver, correcting its previous 4 KiB estimate. This is a 2,048-byte accounting correction, distinct from the rule-table saving. Stacks, packet pools, allocator/transient reserves, sensor features and admission boundaries remain unchanged.
| Target/profile | Available internal bytes | Required heap bytes | Margin | Result |
|---|---|---|---|---|
| RAK4631 Repeater Full | 81,676 | 81,088 | 588 | PASS |
| RAK4631 Repeater Reduced | 84,680 | 81,088 | 3,592 | PASS |
| RAK3401 Room Server Full | 153,940 | 58,416 | 95,524 | PASS |
| RAK3401 Room Server Reduced | 156,928 | 58,416 | 98,512 | PASS |
| RAK3401 unified Repeater Full | 78,364 | 74,176 | 4,188 | PASS |
| RAK3401 unified Repeater Reduced | 81,368 | 74,176 | 7,192 | PASS |
These are canonical build.sh build-firmware Full/Reduced pairs with Cascade
settings, --radio-preset usa-cascade-fixed and --require-ota. The canonical
RAK4631 Repeater and Room Server packages retain their normalized internal-OTA
target identities. PlatformIO commands ran sequentially.
Channel-busy repair
A proven dispatcher defect retained a profile's channel-busy timestamp after
its last waiting packet was cancelled or retired. A later unrelated packet
could inherit the old age and immediately force a transmit with error 0x02.
New work now retires an unused wait before joining that profile. Queued work,
retained driver retries and foreign/direct-OTA owners preserve their live
backoff. begin() resets previous CAD state. No RAM fields or idle-loop scans
were added. Genuine sustained contention still raises the original timeout.
The original failed Room Server capture lacked enough RF data to prove this
was its cause. Both old installed repeaters also had latched 0x02 flags.
The new software regressions and finite new-image hardware results are the
evidence for this repair; historical failures remain recorded.
Physical results
Application-only DFU installed the source-bound images on the Mercerwood Pi. USB reopen checks confirmed role, version, EndF body identity and continuous uptime. No chip/data erase, filesystem backup, bootloader or SoftDevice update occurred.
The RAK Tag was the independent LoRa witness. Each case used three fresh eight-byte nonces, exact routed trace replies and advancing target RX/TX counters. USB carried commands and observations; the request and reply crossed the physical radio link. Settings were 917 MHz, SF7, BW62.5, CR5, preamble32, with two-minute temporary radio leases. The RAK targets retained 2 dBm TX power; the Tag used its saved 22 dBm. The excluded 910.525 MHz channel was not used.
| Installed image | Exact-nonce round trips | Core errors before/after | Result |
|---|---|---|---|
| RAK4631 Reduced Repeater | 3/3 | 0 / 0 | PASS |
| RAK4631 Full Repeater | 3/3 | 0 / 0 | PASS |
| RAK3401 Full Room Server | 3/3 | 0 / 0 | PASS |
After radio cleanup, the Room Server completed one 90.009-second nonhalting SWD capture with power saving on: 6,374 sleeping observations among 8,035 samples, or 79.31% weighted sampled sleep. There were no sampled resets, halts, steps, interrupt masking or lockups; debug controls stayed unchanged. Maximum read time was 3 ms and maximum sample gap 16 ms. Uptime advanced continuously; the post-check had zero errors and an empty queue. This measures sampled CPU states, not electrical current or exact sleep residency.
The first Room preparation stopped on an unsupported ota bootloader status
getter before any RF or CPU capture. Its failure and repeater restoration are
retained. The corrected room-only follow-up treats that optional status page
as unavailable while retaining mandatory bootloader-version and application
identity checks. It did not repeat the already-passing RAK4631 tests.
Final handback leaves both RAKs on patched Full Repeater images, saved 917 MHz settings and power saving on. The RAK3401 gateway service is active again with its original configuration and exact USB owner; final core errors were zero.
Regression checks and CI
- 62 packet-manager cases, including four stale-wait reproductions that failed before their fixes; genuine timeout and live-owner backoff still pass.
- Three Meshtext and nine direct-OTA sanitizer cases; five receive-contract cases; startup-watchdog and radio-idle regressions.
- 55 RAM tests, 21 flood test methods and two OLED checks, including native sanitizers, ARM layout, all 63 rules, FPF6/7/8 compatibility, full-length names, room imports, fault recovery and malformed-file rejection.
- Actual CI now builds both RAK4631 Repeater profiles and both RAK3401 Room Server profiles, rather than relying on a Full Companion build alone.
The shared CAD fix initially exposed a 44-byte Mini Repeater flash overflow. Mini-only CLI text was shortened without removing commands, values or checks. Its exact release-wrapper build now passes at 245,696 of 245,760 application bytes; RAM passes at 43,920 available against 32,288 required. Four replay integration and eight Mini-profile tests passed. Other platforms select their unchanged messages.
The updated CI run passed all 12 firmware and support jobs, including both new RAK build pairs. The main test job exposed an outdated trace-timing extraction fixture: it omitted the dispatcher's new queue helpers. The fixture now extracts those production methods and supplies their state dependencies; all five test methods and ten normal/mutation invocations pass with ASan/UBSan. This fixture-only correction requires no repeated firmware or hardware checks. These targeted checks do not claim a new all-board campaign, RS232 cable traffic, physical OTA installation, maximum-load operation or a long RF soak.