docs(radio): record on-device validation results for duty-cycle restore

Duty-cycle throttling, CAD-under-load, capture decoupling, remote admin under
throttle, and radio-watchdog fire/recover all device-confirmed on a Heltec
V4.2 (busy mesh + off-frequency bench). Notes the watchdog observability
gotchas found during testing: silent on release builds (check stats-radio-diag
err_flags bit 8) and armed only after first radio activity.
This commit is contained in:
agessaman
2026-07-09 19:33:39 -07:00
parent 847be34e7d
commit 258ca46c0b
+17 -5
View File
@@ -36,11 +36,23 @@ mechanism that keeps EU 868 MHz nodes under the legally-mandated duty cycle.
### Must be validated on-device before merge
This touches core TX timing. Confirm on hardware:
- Normal traffic still flows (repeater forwards, observer uplinks).
- Sustained TX is throttled to the configured duty cycle (watch `get` airtime/queue stats;
verify `next_tx_time` spacing under load).
- The observer radio watchdog still recovers a stuck radio (`radio_watchdog_minutes`).
This touches core TX timing. Confirm on hardware — **all device-confirmed 2026-07-09/10
on a Heltec V4.2 (busy live mesh + off-frequency bench):**
- ✅ Normal traffic still flows (repeater forwards, observer uplinks).
- ✅ Sustained TX is throttled to the configured duty cycle: at `set dutycycle 1` on a
busy mesh, TX pinned to ~1% while MQTT capture continued at full rate (after the
`RxReservePacketManager` fixes below). Remote admin remains usable under throttle
with the priority-shed + stale-expiry policy.
- ✅ CAD enabled under load: TX, capture, and CLI all normal.
- ✅ The observer radio watchdog fires and recovers non-destructively: with
`radio.watchdog 1` on a silent frequency, `err_flags` bit 8 set, radio remained in
RX state through repeated recovery cycles, and packets were still received after.
Note: firings are invisible on release builds (no MESH_DEBUG) — check
`stats-radio-diag` `err_flags`; the watchdog arms only after first radio activity
(`last_active > 0`), so a radio wedged from boot is deliberately not covered.
Remaining before undraft: passive soak at fleet-default `airtime_factor` (duty
convergence, flat heap, adverts still advertised).
### Known interaction: throttling starves MQTT capture (mitigated)