AetherSDR v26.5.2.1 — Six days of community momentum + Day-1 hotfix sweep
The first natural-cadence release after the 1.0-equivalent v26.5.1. 123 commits in six days, driven by an unusually active week from community contributors and the AetherClaude orchestrator — plus four Day-1 fixes shipped within hours of the original v26.5.2 tag.
Why .1? v26.5.2 was tagged earlier today and immediately surfaced a regression in TCI TX audio level (down ~6 dB at the source for WSJT-X / JTDX), a Windows process-hang on close, and an AppImage x86_64 build failure. Rather than leave v26.5.2 advertised with known bugs, this hotfix consolidates all four fixes into a single recommended release. Anyone targeting v26.5.2 should install v26.5.2.1 instead.
Headline content
AetherModem — AX.25 packet decoder, Phase 0 (@jensenpat)
Native HDLC/AX.25 receiver with a 21-lane phase bank, FCS validation, and a dedicated Packet Decode dialog. RX is active on 300 baud HF and 1200 baud VHF; TX is live on 300 baud HF with timing refinements queued for Phase 1. (#2753, #2766, #2788, #2791)
FreeDV / RADE ergonomics (@NF0T)
Sync + SNR indicator in the VFO widget for FDVU/FDVL slices, a far-end info row showing decoded callsign and frequency offset, and end-of-over (EOO) callsign decode that posts to FreeDV Reporter. (#2776, #2660, #2659)
4 m / 2 m bands on FLEX-6500 and FLEX-6700
Surfaced via ModelCapabilities using FlexLib ModelInfo.cs as the authority. Works with the radio's internal XVTR or any external transverter. (#2757, closes #695)
PersistentDialog architecture sweep
New PersistentDialog base class + showOrRaisePersistent<T>() lifecycle pattern. 10+ dialogs migrated: Profile Manager, Profile Import/Export, Memory, Network Diagnostics, PropDashboard, TxBand, Waveforms, RadioSetup (primary + 3 secondary entry points), DxCluster, AetherDsp, AX.25 Packet Decoder, MIDI, MQTT, SpotHub. Frameless toggle now propagates correctly across all of them; geometry persists; the duplicate-window class of bug is gone. (#2644, #2676, #2742, #2772, #2774, #2775, #2795)
Spectrum & panadapter stabilization (@rfoust)
Panadapter restore-on-reconnect across multi-pan and floating-pan setups, macOS GPU lifecycle cleanup, dBm-range echo smoothing (no snap-back after release), Ctrl-drag dBm zoom, Ctrl-drag waterfall rate. (#2786, #2792, #2793, #2717, #2783)
Protocol hardening
M-message severity parsing (no more Info notices popping modals), hex meter num field handling, tx_slice_mode from transmit status, FlexWaveformModel for firmware v4.2.18 waveform status. (#2785, #2771, #2773, #2759)
Also new this cycle
Features: Smart Spot Filtering, auto-squelch 3-way SQL cycle, local antenna display names, ATU band pre-tune sweep, FlexRadio .ssdr_cfg profile import/export, FlexControl CWX F1-F12 macros, independent RX/TX CW decode toggles, audio device hotplug with notification dialog, PEP peak-hold tick on FWDPWR, two-tone TUNE via right-click, TNF status tooltip, network audio packet-loss concealment, pan-follow-VFO flag-edge trigger, radio-letter slice display for Multi-Flex, interlock notification system, numeric entry for Aetherial Audio params, RF Gain / AGC-T shortcuts.
Notable fixes: Profile-Save silently no-oping on existing names, XVTR waterfall offset on unvalidated profiles, XVTR direct-entry tuning above 450 MHz, vanished panstack on left-dock startup, ATU walk on discrete-channel bands (60 m), TCI v2.0 spec/impl compliance + RF2K-S amplifier interop, macOS Bluetooth headset mic capture rate, macOS frameless title-bar drag, CW Int16 sidetone fallback on WASAPI, RADE DAX stream lifecycle on macOS, Windows DAX flag toggle on slice-mode change, and the spot-tooltip / cluster-echo / DVK shortcut polish that always shows up in a community-driven cycle.
Infrastructure: log rotation + retention cap, AsyncLogWriter and PerfTelemetry test harnesses, IARU R1 reference table lock, VirtualAudioBridge thread safety, CI post-merge guard for stale-snapshot reverts, in-repo URL refresh after the ten9876 → aethersdr org move, zlib 1.3.1 vendored, spec-kit constitution at .specify/memory/constitution.md, audio pipeline + TCI mDNS schema docs.
Day-1 hotfix sweep (new in v26.5.2.1)
TCI TX audio level regression vs v26.5.1 (#2806)
v26.5.2's TCI server identity (device:SunSDR2DX + protocol:ExpertSDR2,1.9, added in #2597 for RF2K-S amplifier whitelist compatibility) hit a specific code path in WSJT-X's TCITransceiver that halves outgoing TX sample amplitude (K2 = 0.499 / 0x7FFF vs K1 = 0.999 / 0x7FFF) when both of these match:
device:is"SunSDR2DX"or"SunSDR2PRO"protocol:is not"ExpertSDR3"
Operators measured ~70 W of 100 W expected on a 100 W slice. The fix changes identity to device:AetherSDR + protocol:ExpertSDR3,1.5, which clears both triggers and selects WSJT-X command formats that AetherSDR has supported correctly since v26.5.1.
Everything else from #2597 (strict init-burst order, vfo_limits, if_limits, channels_count, split_enable, post-READY audio stream configuration) is preserved — that's the bulk of what the RF2K-S TCI parser actually keys on to engage. Configurable / per-client adaptive identity to restore the SunSDR2DX whitelist half is tracked in #2806.
Windows process lingering in Task Manager after close (#2802, @chibondking)
Three independent root causes ganged up to keep AetherSDR.exe visible in Task Manager indefinitely after the main window closed:
m_aetherialStripcarriesQt::Windowfor an independent taskbar entry; Qt 6 treats that as top-level forquitOnLastWindowClosed, and the defaultWA_QuitOnClose = trueblocked the quit signal.m_appletPanelFloatWindowis constructedparent = nullptr(a real top-level) and was the only top-level secondary window in the codebase missingWA_QuitOnClose = false.MqttClient::~MqttClientcalledmosquitto_destroy()on Windows without ever stopping the loop thread. libmosquitto's contract requiresloop_stopbeforedestroy; the destructor now callsmosquitto_loop_stop(m_mosq, true)(force=true, can't deadlock).
Each fix is a single line matching an existing precedent in the codebase. Result: process exits within ~1 s of main-window close, every time.
Linux AppImage build failure on gcc 11 strict mode (#2799)
third_party/libmodem_core/bitstream.h:192 used unqualified container inside the noexcept(noexcept(...)) clause of a class-template member. gcc 11.4 (Ubuntu 22.04's native compiler, used by the AppImage workflow) requires this->container for two-phase name lookup. Newer gcc (the Docker CI image) was lenient; AppImage CI bombed on the v26.5.2 tag push. Fix qualifies both references with this-> — pure portability, zero user-visible change.
SSA (Sweden) band plan (#2805, @NF0T)
Swedish national overlay on IARU Region 1 with the correct 6 m band edge (50–52 MHz, not the IARU R1 file's 50–54), embedded power-limit suffixes on bands where PTSFS 2025:1 imposes substantially lower caps (60 m 15 W e.i.r.p., 30 m 150 W p.e.p.), Swedish segment labels (ALLA, FYRAR, SMAL DIGI), and finer 6 m segmentation matching SSA's published v3.0 plan. 89 Swedish-language activity-center / digital / beacon / emergency spots. Auto-loaded by BandPlanManager::loadPlans(), surfaced in View → Band Plan submenu.
Contributors
Huge thanks to:
- @jensenpat — AetherModem Phase 0, AX.25 receive timing, FFT floor lock edge cases, XVTR waterfall offset, RF Gain / AGC-T shortcuts, spot auto-mode routing
- @NF0T (Ryan) — FreeDV sync indicator, Waveforms dialog, FlexWaveformModel protocol, hex meter parser, CWX context menu + CharGap, RADE auto-deactivate, tx_slice_mode, RX-applet radeActivated restore, SSA (Sweden) band plan
- @rfoust (Robbie) — panadapter persistence + macOS GPU lifecycle, dBm Ctrl-zoom, Ctrl-drag waterfall rate, TNF status tooltip, panadapter restore-window extension, spectrum dBm echo smoothing, FFT floor edge cases
- @chibondking (CJ Johnson) — Windows process-hang root-cause analysis and triple-fix (Day-1 hotfix)
- @M7HNF-Ian — spot tooltips near waterfall edge, SpotHub auto-reconnect
- @algojogacor — spot label gap in spectrum
- AetherClaude (@aethersdr-agent) — 30+ mechanical fixes including the entire PersistentDialog migration sweep, persistence fixes, log rotation, naming polish, AsyncLogWriter + PerfTelemetry test harnesses, NoiseFloor diagnostics
Verifying this release
Detached PGP signatures (.asc) accompany every artifact. Public key at docs/RELEASE-SIGNING-KEY.pub.asc and on the usual keyservers (keys.openpgp.org). See docs/VERIFYING-RELEASES.md for the full procedure. macOS bundles are also notarized by Apple.
Full changelog
See CHANGELOG.md for the complete commit-by-commit list (both the v26.5.2 entry and the v26.5.2.1 entry are preserved as historical record).
73, Jeremy KK7GWY & Claude (AI dev partner)