Analysis of the field test data revealed that 99% of captured RF observations had a radio unit ID of zero — meaning the decoder couldn't extract the individual transmitter's identity from the P25 control channel data. The geolocation engine was silently discarding all of these, leaving only a tiny fraction of observations for processing.
The fix was to treat anonymous transmissions as valid data, grouping them by talkgroup instead of by individual radio unit. A county sheriff dispatch transmission without an individual ID is still useful for geolocation — I know which agency it belongs to, which jurisdiction it should be in, and I can accumulate spatial diversity across multiple anonymous observations on the same talkgroup. The change immediately expanded the usable observation set from roughly 1% to nearly 100% of captured data.
I also identified a dongle configuration error: the RSSI capture hardware was accidentally pointed at the wrong SDR serial number, causing it to fight with the control channel decoder for access to the same radio. Signal strength measurements were flat and physically implausible because both software components were time-sharing a single receiver instead of operating independently on their respective hardware.