prop/test/microwaveprop/workers
Graham McIntire fe2ad2df15
fix(pskr): self-healing follow-up sampler runs for hours with missing HRRR
The producer-only path left older hours stuck at 0% HRRR coverage
forever once their fetch tasks drained: the rolling-window cron only
re-passes the prior hour, so manual lookback runs (or any
out-of-window hour) wrote NULL samples + enqueued tasks, then never
re-ran to UPSERT the now-landed HRRR data.

Fix: split the responsibility cleanly.

* CalibrationSampler.build_for_hour/1 now returns
  %{upserted: int, missing_hrrr_cells: int} so callers know whether
  the producer enqueued anything (i.e. whether a follow-up makes
  sense). Spec-tightened with a new @type result.
* PskrCalibrationWorker, after each hour's sampler pass, schedules a
  follow-up of itself for that exact hour 10 min later when missing
  > 0. The follow-up carries args %{"hour_utc" => ..., "_follow_up"
  => true}; the sentinel prevents follow-ups from chaining further
  follow-ups (rolling-window cron is the safety net).

Tests:
* Updated 4 existing sampler tests to the new map return shape.
* Moved the follow-up assertions from the sampler suite into the
  worker suite where they belong (sampler is now scheduling-free).
* Added 3 worker tests: schedules-when-missing, no-schedule-when-
  covered, follow-up-doesn't-chain.

3313 tests + 228 properties, 0 failures.
2026-05-05 18:00:10 -05:00
..
admin_task_worker_test.exs fix(workers): 3 bug/perf fixes from codebase review 2026-04-21 09:53:13 -05:00
backfill_enqueue_worker_test.exs fix(hrrr): mark contacts :unavailable on failed fetch tasks 2026-04-22 17:46:51 -05:00
canadian_sounding_fetch_worker_test.exs Ingest Canadian radiosondes via UWYO + plans for RDPS/HRDPS 2026-04-13 09:14:34 -05:00
common_volume_radar_worker_test.exs fix(workers): propagate transient errors so Oban retries + counters fire 2026-04-21 13:15:27 -05:00
contact_import_worker_test.exs fix(import): handle Radio.create_contact :duplicate return in worker 2026-04-17 09:54:17 -05:00
contact_position_backfill_worker_test.exs test: override stale distance_km when filling a missing pos 2026-04-16 14:09:45 -05:00
contact_weather_enqueue_worker_test.exs fix(weather): reconcile hrrr_status + iemre_status stuck in :queued 2026-04-24 13:38:52 -05:00
gefs_fetch_worker_test.exs test: coverage round 4 (84.39% → 84.44%) + 6 new property tests 2026-04-24 10:32:05 -05:00
grid_cache_prune_worker_test.exs feat(workers): add GridCachePruneWorker 2026-04-21 13:19:52 -05:00
hrdps_grid_worker_test.exs feat(hrdps): scope to current-hour-only at 0.5° step 2026-04-30 10:36:00 -05:00
hrrr_native_grid_worker_test.exs test: coverage round 2 (82.05% → 83.96%) + 23 new property tests 2026-04-24 10:15:37 -05:00
iemre_fetch_worker_test.exs test: add property coverage for grid snaps, backoff, notes 2026-04-23 13:05:06 -05:00
ionosphere_fetch_worker_test.exs test: coverage round 2 (82.05% → 83.96%) + 23 new property tests 2026-04-24 10:15:37 -05:00
mechanism_classify_worker_test.exs fix(workers): propagate transient errors so Oban retries + counters fire 2026-04-21 13:15:27 -05:00
narr_fetch_worker_test.exs Rename ERA5 → NARR across the codebase 2026-04-16 09:22:23 -05:00
nexrad_worker_test.exs refactor: normalize pos1/pos2 JSONB key to 'lon' everywhere 2026-04-17 09:10:32 -05:00
partition_maintenance_worker_test.exs feat(infra): auto-extend quarterly partitions for hrrr/hrdps tables 2026-05-05 16:22:16 -05:00
propagation_grid_worker_test.exs feat(prop): adaptive HRRR cycle selection — prefer fresh, fall back if late 2026-04-24 19:44:07 -05:00
propagation_prune_worker_test.exs test: fix three pre-existing test flakes 2026-04-21 13:07:01 -05:00
pskr_calibration_worker_test.exs fix(pskr): self-healing follow-up sampler runs for hours with missing HRRR 2026-05-05 18:00:10 -05:00
pskr_recalibration_worker_test.exs feat(pskr): weekly recalibration analysis on the calibration corpus 2026-05-04 16:18:17 -05:00
radar_frame_worker_test.exs test: expand coverage and refactor to idiomatic style 2026-04-23 13:28:42 -05:00
rover_mission_backfill_worker_test.exs feat(rover-planning): hourly backfill worker recovers stuck paths 2026-05-03 13:52:27 -05:00
solar_index_worker_test.exs Add type filter to backfill enqueue 2026-04-06 11:42:26 -05:00
space_weather_fetch_worker_test.exs SpaceWeather: SWPC JSON ingestion (Kp, F10.7, GOES X-ray) 2026-04-15 14:55:24 -05:00
station_elevation_worker_test.exs feat(rover): Oban worker enriches station elevation post-insert 2026-04-25 16:26:33 -05:00
terrain_profile_worker_test.exs Rename qsos table to contacts, qso_id to contact_id 2026-04-02 15:52:19 -05:00
user_home_qth_lookup_worker_test.exs feat(accounts): auto-prefill home QTH from QRZ on register + backfill on boot 2026-04-25 17:03:01 -05:00
weather_fetch_worker_test.exs perf(weather): asos_day — one job per unique (station, UTC date) 2026-04-24 13:19:20 -05:00