GopherTrunk v0.4.7 — social announcement drafts

One-click copy-paste blurbs for posting the v0.4.7 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.7


Reddit — title

GopherTrunk v0.4.7 — P25 discovery gets majority-vote identity (no more poisoning from one corrupt TSBK), standard opcodes decoded even under a Motorola vendor MFID, site identity on registration/affiliation events, a streaming long-dwell CC monitor, per-system encrypted-call handling, and new per-dongle autotune

Reddit — body

**[GopherTrunk](https://gophertrunk.org) v0.4.7 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.6:**

* **P25 identity is now majority-voted** — status-broadcast accumulation was last-write-wins, so one corrupt-but-CRC-passing TSBK could poison WACN / System ID. Identity is now resolved by majority vote across observations, and neighbors / band-plan slots surface on first sighting to match OP25's latency.
* **Standard opcodes decoded under a Motorola vendor MFID** (#728) — on some Motorola trunks the band-plan / network / site opcodes (IDEN, RFSS, Network Status, Adjacent Site) arrive under MFID 0x90 and were being dropped, so WACN / System ID / neighbors stayed empty even with the CC locked. These always-standard opcodes now decode regardless of MFID.
* **Site identity on registration & affiliation events** (#698) — `unit_registration` and `affiliation` events now carry `rfss_id` / `site_id` / `nac`, giving a genuine RID→serving-site fix that wide-area grant-site can't. Phase 2 control channels also discover sites into `/api/v1/sites`.
* **Streaming long-dwell control-channel monitor** (#722, opt-in) — a new `monitor_seconds` decodes a locked CC from the live SDR in real time instead of buffering the whole dwell, so a P25 site can be watched for minutes without recording gigabytes of IQ. Converge-and-stop once identity/neighbors/band-plan settle.
* **Per-system encrypted-call handling + alias short-circuit** (#711) — `encrypted_calls` (`follow` / `metadata` / `ignore`) moved to per-system config, and `metadata` mode now releases the voice tuner the instant the talker alias completes instead of holding for the full window. (Breaking: a global `trunking.encrypted_calls` block must move under the relevant `trunking.systems[]` entry.)
* **Per-dongle autotune** (#729, opt-in `sdr.autotune`) — watches each SDR's residual carrier offset and shifts its digital down-converter so the demod's AFC starts near lock, never touching the hardware ppm (it logs a suggested value instead).
* Plus a group-duplicate-events toggle and freeze-while-inspecting in the web console, a fixed CC Activity pause, the P25 Unit-to-Unit Answer Request decode, a RadioReference fix that recognises feed-provider / admin accounts as premium (#723), and a new "Intro to Software Dev" learning path (#725).

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

**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.7 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.6:**
- **Majority-voted P25 identity** — one corrupt-but-CRC-passing TSBK can no longer poison WACN / System ID; neighbors/band-plan surface on first sighting.
- **Standard opcodes under a Motorola vendor MFID** (#728) — IDEN / RFSS / Network Status / Adjacent Site now decode even when sent under MFID 0x90.
- **Site identity on registration & affiliation** (#698) — events carry `rfss_id` / `site_id` / `nac` for a real RID→serving-site fix; Phase 2 discovers sites too.
- **Streaming long-dwell CC monitor** (#722) — watch a P25 site for minutes from the live SDR without recording gigabytes of IQ; converge-and-stop.
- **Per-system encrypted-call handling + alias short-circuit** (#711) — `follow` / `metadata` / `ignore` per system; `metadata` frees the tuner the moment the alias completes. (Breaking: global block moves under `trunking.systems[]`.)
- **Per-dongle autotune** (#729) — digitally corrects each SDR's carrier error so the demod starts near lock; never rewrites hardware ppm.
- Plus group-duplicate-events + freeze-while-inspecting in the web UI, fixed CC Activity pause, P25 UU Answer Request decode, RadioReference feed-provider/admin → premium (#723), and an "Intro to Software Dev" learning path (#725).

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