test: coverage round 3 (83.96% → 84.39%) + 10 new property tests
64 unit tests + 10 property tests across three parallel agents.
- ContactLive.Show round 3 (72% → ~80%): enrichment failure
surfaces (terrain/iemre/weather :failed, hrrr :unavailable NARR
fallback), radar-only mechanism, load_solar + enqueue_missing_solar
paths, blocked_message nil obs_dist, band_summary for 144M/1296M/
2304M/47G/75G, admin edit no-op, mode changes, fetch_queue_counts
with seeded Oban jobs. Properties: propagation_mechanism summary is
always a binary, obs_sort_key totality over arbitrary field keys.
- Weather clients: iem_client transport timeouts + CSV edge cases,
rtma_client idx url property, swpc_client HTTP 503/404 + empty-
array parses + JSON/CSV totality properties, ncei_metar_client
parse edge cases, snmp_client OID-roundtrip property + parse
edge cases.
- Mid-coverage LiveViews: UserProfileLive avatar/render branches,
EmeLive invalid-grid/unknown-callsign + form-validation property,
PathLive zero-distance + 3000km + height/power round-trip property,
BeaconLive numeric bearing + non-admin approve denied, MapLive
select_band/toggle_radar/toggle_grid events + band-URL property.
Fix: propagation_mechanism property test uses System.unique_integer
for lat + valid_time nonces instead of StreamData-shrinkable jitter;
the shrink toward 0 was tripping the hrrr_profiles unique index.
205 → 215 properties, 2743 → 2812 tests, 0 failures.