prop/test/microwaveprop
Graham McIntire 33f5d4edbe
feat(rainscatter): classify QSO propagation mechanism from common-volume radar
Adds a per-contact enrichment pipeline that determines whether a QSO was
most likely carried by rain scatter, tropospheric ducting, or ordinary
troposcatter — using IEM n0q composite reflectivity sampled inside the
lens-shaped intersection of 400 km-radius disks around each endpoint.

Pieces:
  * Microwaveprop.Propagation.CommonVolume — lens geometry (haversine,
    in-CV test, bbox, area).
  * contact_common_volume_radar table (1:1 per contact) storing
    aggregate dBZ stats inside the CV + radar_status column on contacts.
  * Microwaveprop.Workers.CommonVolumeRadarWorker — Oban :radar queue,
    fetches the n0q frame at QSO time, iterates pixels inside the CV
    bbox, aggregates rain/heavy/core-pixel counts, max/mean dBZ, and
    coverage percentage.
  * Microwaveprop.Propagation.RainScatterClassifier — rule-based mapper
    from (band, distance, radar stats, duct flags) to one of
    :likely_rainscatter | :rainscatter_possible | :tropo_duct |
    :troposcatter | :unknown.
  * ContactWeatherEnqueueWorker learns a :radar enrichment type and
    enqueues the CV worker on contact submission; pre-2014 contacts
    (outside IEM n0q coverage) are pinned to :unavailable.
  * `mix radar_backfill` bulk-enqueues historical contacts with
    --year / --limit / --dry-run.
  * Contact detail page renders a mechanism badge with supporting
    stats (common-volume area, max dBZ, heavy-rain pixel count,
    coverage %).
2026-04-17 15:57:59 -05:00
..
accounts test: cover accounts user + user_token 2026-04-16 14:09:45 -05:00
backtest Fix wgrib2 -lola binary parsing and add native_surface_refractivity 2026-04-10 08:13:33 -05:00
beacons test: cover beacons/beacon schema 2026-04-16 14:09:45 -05:00
commercial Add commercial link monitoring via SNMP polling 2026-03-30 13:02:59 -05:00
ionosphere test: expand coverage on ionosphere + space_weather contexts 2026-04-16 14:09:45 -05:00
propagation feat(rainscatter): classify QSO propagation mechanism from common-volume radar 2026-04-17 15:57:59 -05:00
qrz test: cover qrz/client 2026-04-16 14:10:50 -05:00
radio feat(import): async CSV import with progress-tracking schema 2026-04-17 09:31:22 -05:00
space_weather test: expand coverage on ionosphere + space_weather contexts 2026-04-16 14:09:45 -05:00
terrain Remove unused CaptureLog import in elevation client test 2026-04-12 09:32:47 -05:00
weather fix(narr): handle cdo 2.5.1 mixed name/code output 2026-04-16 15:14:51 -05:00
workers feat(rainscatter): classify QSO propagation mechanism from common-volume radar 2026-04-17 15:57:59 -05:00
accounts_test.exs User profiles at /u/:callsign, flexible band input, assorted UX cleanup 2026-04-12 16:13:08 -05:00
application_test.exs feat(nav): show last-deployed timestamp 2026-04-17 13:08:51 -05:00
backtest_test.exs Phase 9.1: Consolidated backtest report and contest log import 2026-04-10 11:57:15 -05:00
beacon_monitors_test.exs Add beacon monitor registration and fix prod SMTP 2026-04-08 11:30:28 -05:00
beacons_test.exs User profiles at /u/:callsign, flexible band input, assorted UX cleanup 2026-04-12 16:13:08 -05:00
cache_test.exs Cache /contacts, fix map blink, make mode optional 2026-04-12 12:47:25 -05:00
callsign_location_test.exs Drop gridmap.org dependency, resolve callsigns locally 2026-04-12 17:43:29 -05:00
commercial_test.exs Wire NEXRAD, native ducts, and commercial links into scoring 2026-04-13 12:08:15 -05:00
geo_test.exs test: cover geo, qrz record, callsign client 2026-04-16 14:09:44 -05:00
geocoder_test.exs Drop gridmap.org dependency, resolve callsigns locally 2026-04-12 17:43:29 -05:00
markdown_test.exs Add Tier 1 test coverage: EnrichmentStatus, Markdown, health, RemoteIp, Maidenhead 2026-04-06 10:15:38 -05:00
propagation_test.exs Add 50/144/222 MHz bands, rename 440→432 2026-04-16 12:36:10 -05:00
qrz_test.exs Drop gridmap.org dependency, resolve callsigns locally 2026-04-12 17:43:29 -05:00
radio_refinement_test.exs CSV/ADIF import: upsert existing contacts on grid/mode refinement 2026-04-16 10:57:37 -05:00
radio_test.exs refactor: normalize pos1/pos2 JSONB key to 'lon' everywhere 2026-04-17 09:10:32 -05:00
repo_listener_test.exs test: cover repo_listener 2026-04-16 14:58:55 -05:00
terrain_test.exs Rename qsos table to contacts, qso_id to contact_id 2026-04-02 15:52:19 -05:00
weather_grid_test.exs Filter weather grid by bounds before deriving sounding params 2026-04-15 15:14:11 -05:00
weather_test.exs Purge legacy is_grid_point=true rows from hrrr_profiles 2026-04-15 12:14:20 -05:00