A baseline writer refuses to run unless it is asked for by name (41b122b)
A channel keeps the first radio ID and tells no contact apart from the first (191d51b)
A closed DSC squelch no longer grows the decoder buffers without bound (191d51b)
A codeplug address that runs past the 32 bit space is refused instead of wrapping (191d51b)
A codeplug with two entries of one name keeps its references on the first (191d51b)
A collection file is on disk before its lanes look like recordings (191d51b)
A CPM demodulator only accepts the input domain it was built for (191d51b)
A dead subcarrier, an ISI-free response and a stalled clock no longer panic (191d51b)
A decoder log CSV export cannot smuggle a spreadsheet formula (191d51b)
A failed close of a radio session is reported instead of swallowed (191d51b)
A failed migration read no longer drops the audio chain it was lifting (191d51b)
A history capture marks the gap it spliced over (191d51b)
A label outside the constellation is refused instead of modulating point zero (191d51b)
A LoRa channel name is bounded by its own 32 character limit (191d51b)
A malformed RS41, wM-Bus or NAVTEX frame is rejected instead of stopping the decoder (f531d30)
A matrix cell out of range or a solve without a factorization is refused (191d51b)
A missing array surface slot counts as a dropped surface, not a dropped report (191d51b)
A NanoVNA zoom drag stays inside the measured band (191d51b)
A new node lands where it was placed instead of jumping as the viewport animates twice (191d51b)
A newly learned trunk plan is written down in channel order (191d51b)
A non-finite sample no longer drives the AGC to full gain (675e45d)
A notch width reads in hertz (191d51b)
A paired server cannot flood the phone with an oversized reply (191d51b)
A partial page write keeps the Radtel flash past the table it was given (191d51b)
A phone recovers from a sensor sample stamped in the future (191d51b)
A radio refuses more than 64 channels on one lane (191d51b)
A radio that advertises no sample rates keeps the rate it was given (191d51b)
A radio transfer that crashed no longer blocks every later identify, read and write (191d51b)
A read or write to a radio leaves the server answering other requests (191d51b)
A recording upload that lies about its size is refused instead of ending the server (74f800c)
A removed row no longer commits its neighbour's unsaved edit (191d51b)
A right-click or middle-click on a frequency digit no longer retunes (191d51b)
A rotator serial port can be picked while a GPS receiver is attached (191d51b)
A satellite track with an unreachable time is refused instead of hanging (191d51b)
A saved sweep that fails to load now says so (191d51b)
A scanner refuses a zero step or an over-wide range when the workspace is saved (191d51b)
A server without a token answers only its own addresses, localhost and the names it was given (191d51b)
A session can watch only so many sinks and ports, and a socket takes bounded messages (191d51b)
A short write to an AnyTone radio no longer zeroes the next contact record (191d51b)
A spectrum frame that does not fit the transform is dropped instead of killing its worker (191d51b)
A stalled recording no longer stalls a radio's settings or its shutdown (191d51b)
A stored Kraken workspace becomes five radios on one array (191d51b)
A stored workspace naming a backend this build dropped clears that node's radio (191d51b)
A time machine belongs to its workspace and arms again when you come back (6e5f37f)
A token the vault refuses starts no session (191d51b)
A truncated capture or a failed channel fit now surfaces (191d51b)
A truncated CPDLC route clearance is rejected instead of rendered blank (191d51b)
A vanished recordings folder no longer empties the recording index (2508fc5)
A video face counts the pictures it had to drop (191d51b)
A WAV with an extra chunk reports the right length (191d51b)
AD936x: sample datagrams are taken from the radio only, and an extreme errno is reported (191d51b)
ADS-B tracks a hub sized fleet and reports evicted tracks (191d51b)
Airspy, Airspy HF+ and HackRF open on Linux with a kernel module bound, instead of reporting the radio as in use (c2c5879)
Airspy: the receiver is switched on after its transfers are queued (191d51b)
An amp stage reads out in the unit its firmware reports (191d51b)
An array collection recording keeps every lane on the same sample (191d51b)
An array lane whose radio restarted is re-leased and reported as down (191d51b)
An array processor reports a surface it could not publish as a lost surface, not a lost report (191d51b)
An array reports a correction it could not clear and an aggregator that panicked (191d51b)
An audio spectrogram keeps its history when the palette changes (191d51b)
An event filter counts characters, not bytes, and the contains field stops at its limit (191d51b)
An imported recording lands whole or not at all, and a cut upload surfaces (191d51b)
An off-screen Scope stops redrawing its trace until it comes back (191d51b)
An oversized frame is refused at encode instead of writing a truncated length (191d51b)
An oversized ionosonde feed is refused while it is still arriving (191d51b)
An uploaded recording with backwards captures is refused instead of panicking (191d51b)
Android release builds fail without a keystore instead of writing an unsigned APK (191d51b)
APRS rejects coordinates past the pole and the meridian (191d51b)
APRS speed and altitude read in km/h and metres (dcd1bcd)
Array sample alignment no longer stalls while a processor retires (191d51b)
Blocks lost to a lagging stream reach the dropped count in diagnostics (191d51b)
Bluetooth: a truncated service UUID list is counted instead of dropped (191d51b)
CR-8: a tuning the radio cannot reach is refused, and its serial is read within bounds (191d51b)
D-STAR plays the voice of the frame that carries the superframe sync (191d51b)
D-STAR reports the slow data message and its full twenty characters (191d51b)
DAB: 80 kbit/s services at protection level 1 decode instead of staying silent (ad814ec)
DAB+: audio lost to reception errors leaves a gap of its own length instead of draining the buffer (b9f15d3)
DAB decodes unequal error protected sub-channels that carry padding bits (191d51b)
DAB reports a sub-channel whose size disagrees with its protection profile instead of playing silence (191d51b)
Decoder labels name the evidence: off air, reference fixture, or our own modulator (191d51b)
Degenerate DSP inputs are refused instead of panicking (191d51b)
Dependencies move to current, closing three zip advisories in the Windows updater (5d32ce3)
Desktop: a download's save dialog no longer freezes the app on Linux (29873c5)
Desktop installers are checked against the stamped version before release (191d51b)
Devices: a radio that refuses one re-arm is dialled again within the restart budget instead of ending the stream (89cbde5)
Devices: a radio two workspaces reach for at once is opened once, not dialled twice (4606dab)
Digital voice decoders report the frames they throw away (191d51b)
DMR discards an embedded or short link control that never terminates (191d51b)
Drone Remote ID: beacons that fail to parse are counted, and the encoder keeps the unknown track and accuracy codes honest (191d51b)
DVB applies a multi-section program or map table only once every section has arrived (191d51b)
DVB ignores a table announced for later until it becomes current (191d51b)
Each decoder is named once in the wire table that builds its settings and limits (191d51b)
ERMES: an inverted signal decodes, and dropped pager frames are counted (191d51b)
ESP-SDR: a lost start reply still stops the board, and one bad datagram is skipped (191d51b)
Every device backend has one name, shared by the engine, the doctor and the browser (191d51b)
Every modem throughput gate refuses a baseline recorded on another host instead of passing (191d51b)
Every serial port list hides dial-in nodes, pseudo ports and bridge duplicates (191d51b)
FLEX: out of range capcodes and unchecked block information words no longer make pages (191d51b)
French Remote ID: horizontal speed reads the full unsigned range (191d51b)
FunCube Dongle: transfers the kernel still owns keep their buffers until the device closes (191d51b)
GNSS rejects a C/A cross-correlation peak instead of locking the wrong PRN (191d51b)
GSM: the message log and cell readouts show the newest frames, not the first ones heard (720f42c)
HFDL reads the neighbour frequency bitmap byte aligned and attributes an uplink to its own aircraft (191d51b)
Inmarsat Aero burst demodulators are built once instead of once per burst (191d51b)
Inmarsat STD-C flags a gap in an EGC sequence and reports rectangular extents in degrees (191d51b)
ISM: a lone trailing half-bit and an overlong pulse no longer stretch a decoded row (191d51b)
ISM: an Oregon THGR122N frame whose temperature is not plausible BCD is dropped instead of reported (191d51b)
KiwiSDR: a held socket that will not arm says why instead of opening a second channel (191d51b)
Kraken: bank settings pause the stream the way a single dongle does (191d51b)
M17 extended addresses no longer print as a callsign (191d51b)
MIAM, ADS-C and ARINC 622 reject out of range values instead of wrapping them (191d51b)
NAVTEX reports characters lost in every copy (191d51b)
NFM keeps CTCSS and DCS out of the audio in every tone mode (191d51b)
NFM receive de-emphasises at 750 us and the transmitter pre-emphasises to match (191d51b)
NXDN keeps the last frame of an over and survives a jittered sync (191d51b)
NXDN names the RF direct channel correctly (191d51b)
OFDM: a preamble found at the very start of a stream decodes instead of panicking (d8489f3)
P25 counts network identifier errors over the protected bits (191d51b)
POCSAG: a page poisoned by an uncorrectable codeword is counted (191d51b)
Port types say what they carry: baseband, video, control, position and array (191d51b)
Rack grips take the keyboard and name themselves to a screen reader (191d51b)
Radar and spatial canvases stay sharp at browser zoom (604a646)
Radios: a capture that could not arm leaves the radio stopped (191d51b)
Radiosondes: the M10 and M20 GPS week stays in the current epoch without a code change (191d51b)
Reconnecting to the server no longer re-runs a tool over serial (191d51b)
Removing an array switches its noise source off instead of leaving it injecting (191d51b)
Retuning a DMR receiver forgets the last site's masked checksums and trunking tier (191d51b)
RTL-SDR: 28.8 MHz engages the upconverter, and a tuner reset that failed is reported (191d51b)
RTL-SDR: a serial write and an open stay on the dongle the scan found (191d51b)
RTL-SDR: a stalled demod register write is read back and written again, so frequency and gain changes work on Windows (ff1dec3)
rtl_tcp: a dial is retried while the server is between clients, instead of failing on one timeout (5594af5)
rtl_tcp: let go of the old connection before dialling the next one, so a server that serves one client at a time greets the reconnect (b0040ca)
rtl_tcp streams on the connection it was greeted on and waits out a server still letting go of its last client (8633698)
Saved signal generator nodes move to the virtual backend on load (191d51b)
SDRplay: a receiver selected behind a stuck lock is released again (191d51b)
SDRplay: a stream the API will not stop keeps the memory its callbacks use (191d51b)
Signal generator: a signal it cannot synthesise fails instead of streaming silence (191d51b)
SoapySDR: a 0.9 runtime is loaded, next to 0.8 (0f32b4a)
SoapySDR: a driver fault on a setting or a timestamp surfaces instead of being guessed at (191d51b)
SoapySDR: a probe helper whose output is held no longer wedges the capture thread (191d51b)
SoapySDR: the module farm is private to this process, and a stall probes only the radios in view (191d51b)
SpyServer streams on the connection it handshook on instead of dialling a second time (055ffcd)
SSTV Robot 72 sends its second chroma porch at the published 1500 Hz (191d51b)
The 4FSK curve matches the decoder that measures it, and a curve tolerance follows its error counts (41b122b)
The database takes a second process writing to it, and deletes clear the rows that pointed at what went (191d51b)
The decision-directed carrier detector slices each symbol once (191d51b)
The limits say how many channels and monitors one radio can host (191d51b)
The map panel survives switching the sink feed off and on again (191d51b)
The scanner refuses a sweep wider than the engine's target cap (191d51b)
The signal identifier finds a sync word at the very start of a capture window (191d51b)
The signal identifier reports a flat band's centre in hertz so its zoom lands on the band (191d51b)
The signal identifier says why a confirmation decoder or frame search could not run (191d51b)
The UI reads the audio rate, audio seeds, survey grid, decoder defaults and wM-Bus key shapes from the server (191d51b)
TLS and async internals updated for the rustls, webpki and tokio advisories (a3d5fd3)
Undo and redo no longer leave a gain stage twice in the saved settings (191d51b)
VDL2 ATN reassembly needs every segment covered and caps its pending buffers (191d51b)
VHF ACARS decodes the application layer, reassembles multi-block messages and counts rejected blocks (191d51b)
Virtual radios are offered only where the server serves them (191d51b)
VOR radials stay accurate at the shortest report interval and an out of range navaid interval is refused (191d51b)
w-MBus: variable length records read their BCD and binary encodings and refuse reserved ones (191d51b)
Weather satellites template: Meteor-M LRPT on 137.900 MHz, the NOAA APT satellites are off the air (e7b6ced)
Wire verdicts refuse a graph larger than a workspace may hold (191d51b)
YSF voice FR mode decodes to speech instead of noise (191d51b)