- CoreComponents.input/1: expanded coverage to include the select,
textarea, generic-text, and unchecked-checkbox branches, plus
error-vs-no-error border styling.
- PostgresNotifier: handle_info forwards pg_notify payload to
Aprsme.PubSub and ignores unrelated messages.
Coverage 69.56 → 70.11%.
Four properties exercise haversine_distance / significant_movement?:
- non-negativity across any in-range coordinate pair
- symmetry: d(a, b) == d(b, a) within a tight tolerance
- identity: d(p, p) == 0.0
- significance agrees with (haversine > threshold) for any integer
threshold in 1..1000
Total: +4 properties, coverage stays clean (dialyzer: 0 new errors).
- handle_call(:shutdown, _, state): split into a shutting_down=true
fast-path clause and a normal initiate_shutdown clause. No more
`if state.shutting_down` inside the callback body.
- terminate/2: extract graceful_shutdown_needed?/1 (four function
heads on the reason tag) and maybe_graceful_drain/2 (guarded on
state.shutting_down) so the shutdown side-effects are isolated to
a single, pattern-matched entry point.
Adds 4 unit tests for the pure callback paths
(shutting_down?, shutdown-already-in-progress, EXIT pass-through,
rescue fallback on unavailable GenServer).
- SharedPacketHandler.handle_packet_update: dispatch on filter-result,
and use maybe_enrich/2 dispatched on the enrich? boolean instead of
an inner `if`. lookup_device_info/1 is now a trio of function heads.
- Cluster.Topology.child_spec: build_spec/3 dispatches on
(cluster_enabled?, topologies) tuples — no more nested `if`.
- Cluster.PacketDistributor.distribute_packet: maybe_broadcast/2
dispatches on the leader-and-enabled check; the non-leader / disabled
paths return :ok explicitly instead of relying on an `if` expression's
implicit nil.
Adds tests for SharedPacketHandler (filter/enrich/match paths,
callsign_filter + callsign_and_weather_filter factories) and extends
Cluster.Topology tests to cover the nil-topology and opts-merge cases.
Coverage 66.41 → 66.81%.