GopherTrunk v0.4.2 — social announcement drafts

One-click copy-paste blurbs for posting the v0.4.2 release. Each block below is a fenced code block so the rendered-markdown “copy” button grabs exactly what you’d paste.

Release: https://github.com/MattCheramie/GopherTrunk/releases/tag/v0.4.2


Reddit — title

GopherTrunk v0.4.2 — hunt now cross-references RadioReference (PPM offsets + missing talkgroups), auto-gain sweeps your front end, and TETRA/MPT 1327 blind identify gets a lot less wrong

Reddit — body

**[GopherTrunk](https://gophertrunk.org) v0.4.2 is out** — pure-Go digital-trunking scanner for RTL-SDR / HackRF / Airspy / USRP. P25 (Phase 1+2), DMR (AMBE+2 voice), NXDN, Motorola Type II, EDACS, LTR, MPT 1327, dPMR, D-STAR, YSF, M17, plus APRS, POCSAG + FLEX paging, and AIS / DSC / ADS-B. No CGO, single static binary for Linux / macOS / Windows.

**What's new since v0.4.1:**

* **Hunt ↔ RadioReference cross-reference** (#660, #661) — a discovered system now diffs against the matching RR system: control / voice frequencies are paired to the nearest RR frequency (within 5 kHz is flagged as a tuning/PPM offset, farther/unmatched is "not in RR"), and talkgroups heard on air but absent from RR are listed. Works from the CLI and a new *RadioReference* section in the web *Hunt* panel.
* **Hunt: auto-gain BER sweep + survey resume** (#660, #661) — an optional post-run sweep recommends the front-end gain that minimizes decode errors on each locked control channel (written to `gain-recommendation.json`, nothing applied automatically); surveys gain crash-safe NDJSON persistence and resume in the daemon; and neighbour-frequency resolution now covers DMR Tier III / EDACS / Motorola, not just P25.
* **Channel-grid snapping** (#648) — the sweep snaps candidates to the 6.25 / 12.5 / 25 kHz raster, so a P25 trunk reported a few hundred Hz off a bin centre is tuned dead-on and reads its true channel width instead of a skewed "11.6 kHz".
* **TETRA blind identify** (#662, #648) — control channels now recover the cell colour code from the BSCH so their SCH/HD FEC actually scores and they clear the identify gate (was stuck at "tetra @ 0.16"), plus an opt-in Viterbi correction-depth histogram.
* **MPT 1327 false-lock hardening** (#669, #670, #648) — a lock now needs several confirmation codewords sharing a consistent system prefix, so stray cross-protocol parses stop declaring phantom control channels.
* **P25/DMR wideband voice glitch fix** (#550) — digital voice chains are clocked from the DDC's actual resampled rate instead of a nominal 48 kHz, killing the periodic symbol-clock slips and audible clicks; plus per-endpoint SoapyRemote `stream_mtu` / `stream_window` knobs (#664, #665) and observable P25 Phase 1 talker-alias decode (#376).

**Downloads** (Linux / macOS / Windows, x64 + ARM64): https://github.com/MattCheramie/GopherTrunk/releases/tag/v0.4.2

**Docs:** https://gophertrunk.org

Heads-up: the v0.x line is still flagged prerelease — actively developed, feedback / captures / bug reports very welcome.

Discord

**GopherTrunk v0.4.2 is out** — pure-Go trunking scanner for RTL-SDR / HackRF / Airspy / USRP. P25, DMR, NXDN, M17, analog trunked, APRS, POCSAG + FLEX paging, AIS / DSC / ADS-B. Single static binary, zero CGO.

**What's new since v0.4.1:**
- **Hunt ↔ RadioReference cross-reference** (#660, #661) — diffs discoveries against RR: flags PPM/tuning offsets, not-in-RR frequencies, and talkgroups heard on air but missing from RR. CLI + web Hunt panel.
- **Hunt: auto-gain sweep + survey resume** (#660, #661) — post-run gain recommendation (min decode-error), crash-safe NDJSON survey persistence/resume in the daemon, and neighbour-freq resolution for DMR Tier III / EDACS / Motorola.
- **Channel-grid snapping** (#648) — candidates snap to the 6.25/12.5/25 kHz raster, so an off-bin P25 trunk locks and bandwidth reads true (no more "11.6 kHz").
- **TETRA blind identify** (#662, #648) — recovers the colour code from the BSCH so SCH/HD FEC scores and the channel clears the gate; opt-in Viterbi correction-depth histogram.
- **MPT 1327** (#669, #670, #648) — lock requires confirmation codewords with a consistent prefix → no more cross-protocol false locks.
- **Voice fix** (#550) — clock digital voice chains from the DDC's actual rate → no periodic clicks; plus SoapyRemote `stream_mtu`/`stream_window` (#664, #665) and observable P25 P1 talker-alias (#376).

Download: <https://github.com/MattCheramie/GopherTrunk/releases/tag/v0.4.2>
Docs: <https://gophertrunk.org>