github aethersdr/AetherSDR v26.5.2.1
AetherSDR v26.5.2.1 — Six days of community momentum + Day-1 hotfix sweep

3 days ago

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 ten9876aethersdr 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:

  1. m_aetherialStrip carries Qt::Window for an independent taskbar entry; Qt 6 treats that as top-level for quitOnLastWindowClosed, and the default WA_QuitOnClose = true blocked the quit signal.
  2. m_appletPanelFloatWindow is constructed parent = nullptr (a real top-level) and was the only top-level secondary window in the codebase missing WA_QuitOnClose = false.
  3. MqttClient::~MqttClient called mosquitto_destroy() on Windows without ever stopping the loop thread. libmosquitto's contract requires loop_stop before destroy; the destructor now calls mosquitto_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)

Don't miss a new AetherSDR release

NewReleases is sending notifications on new releases.