test: coverage round 1 (80.45% → 82.05%) + 12 new property tests
Adds 67 test cases + 12 property tests across four surfaces — parallel
agents targeted the lowest-coverage files in the tree.
- ContactLive.Show (48.56% → 72.01%): 16 unit tests + 2 properties
covering IEMRE/radar/ducting/propagation-analysis render branches,
every terrain-verdict class, expanded HRRR/terrain sections, pending-
edit banner, internal-network conn, and total-over-fields properties
for obs + sounding sort handlers.
- HrrrNativeClient (33% → 58%): 8 unit tests + 4 properties covering
partial-surface fallback, empty input, optional-var nils, bogus
binary dispatch, and level-count + monotonic-height + URL-encoding
+ duct-subset invariants.
- NexradClient / HrrrClient / GefsClient: 13 unit tests + 4 properties
covering 500/404/timeout paths, malformed idx bodies, parse_idx
totality, byte-range invariants, and URL-builder round-trips.
- HrrrBackfill / HrrrNativeDeriveFields / ImportContestLogs: 7 unit
tests + 1 property. Seeds contacts + native profiles, stubs HRRR
with Req.Test, exercises the `--limit 0` and `filter_points_needing_
backfill` paths, CSV import happy + malformed paths, and a
band-string round-trip property.
2599 → 2666 tests, 170 → 182 properties, 0 failures.