From the Issue Tracker is a postmortem series mined from GopherTrunk’s closed GitHub issues. Every post is a true story with receipts: the symptom as a user actually reported it, the plausible explanations that turned out to be wrong, the diagnostic that finally cracked it, and the fix — linked back to the original issue thread so you can check the work.
Where the other series on this blog explain how GopherTrunk works, this one explains how it broke, and what each breakage taught us. The recurring villains: round-trip tests that validate their own bugs, success-only log lines whose silence means nothing, hardware that lies politely, and “smoking gun” evidence that was an artifact of the instrument. The series closes with three meta-lesson posts that pull those threads together.
Every post reads three ways: a TL;DR + cheat-sheet for skimmers, bold headers and tables for the medium read, and the full investigation narrative for the deep read.
Reference companions to this series live in the Field Guide’s Field Notes domain — the same knowledge, condensed into look-up form: hardware quirks, configuration gotchas, diagnostic signatures, and protocol facts the specs hide.<ol class="post-list series-list"><li class="post-card"> <h2 class="post-card__title">From the Issue Tracker, Part 1: The First P25 Lock — Eleven Fixes Between ‘Trying’ and ‘Locked’</h2> <p class="post-card__meta"> Solution Postmortem </p><p class="post-card__desc">A P25 control channel that SDRTrunk and OP25 decoded in five seconds took GopherTrunk eleven fixes over five days to lock — and the last two bugs were a wrong BCH generator polynomial and a wrong CRC variant that every synthetic round-trip test had happily agreed with.</p></li><li class="post-card"> <h2 class="post-card__title">From the Issue Tracker, Part 2: The Talker-Alias Hunt — Three Wrong Transports and an Architectural Gate</h2> <p class="post-card__meta"> Solution Postmortem </p><p class="post-card__desc">A month of chasing blank P25 talker aliases through three wrong transport theories, until a per-opcode census and SDRTrunk ground truth revealed the aliases were riding traffic-channel signalling — and GopherTrunk’s decoder was architecturally gated behind winning a voice tuner.</p></li><li class="post-card"> <h2 class="post-card__title">From the Issue Tracker, Part 3: Encrypted, Says Who — Four Layers Between a Flag and Its Metadata</h2> <p class="post-card__meta"> Solution Postmortem </p><p class="post-card__desc">A P25 Phase 2 system flagged every encrypted call correctly but never reported which algorithm or key — because a fictional MAC opcode, a missing carrier loop, a 48-bit sync constant in a 40-bit field, and a swapped dibit map were stacked on top of each other.</p></li></ol><p class="blog-feed-link"> See all solution postmortems or subscribe via RSS. </p>