No description
Find a file
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
.forgejo/workflows chore(ci): source registry host from secrets.REGISTRY_URL 2026-05-05 14:31:50 -05:00
.github Add contact edit approval system with admin review queue 2026-04-11 16:15:49 -05:00
assets fix(contacts/map): align line colors with sidebar legend 2026-05-05 13:56:02 -05:00
bin Fix livebook path resolution in bin/notebook 2026-04-07 11:15:49 -05:00
config fix(infra): disable Oban peer on backfill pods so cron leader stays hot 2026-05-05 17:19:39 -05:00
docs docs(hrdps): record stage progress + dormant scaffolding state 2026-04-29 17:13:08 -05:00
k8s chore(k8s): point deployments at codeberg.org images 2026-05-05 10:38:47 -05:00
lib fix(pskr): self-healing follow-up sampler runs for hours with missing HRRR 2026-05-05 18:00:10 -05:00
lib_ml feat(ml): add prop.compare task for algorithm-vs-ML-vs-reality calibration 2026-04-28 14:38:02 -05:00
notebooks refactor: normalize pos1/pos2 JSONB key to 'lon' everywhere 2026-04-17 09:10:32 -05:00
priv feat(pskr): weekly recalibration analysis on the calibration corpus 2026-05-04 16:18:17 -05:00
rel Add Erlang clustering via libcluster and expose LiveDashboard 2026-04-06 09:46:48 -05:00
rust/prop_grid_rs fix(prop-grid): keep HRDPS lat=50 boundary row to close /weather seam 2026-04-30 16:44:53 -05:00
scripts chore: delete dead RTMA + METAR5 code paths 2026-05-04 15:09:19 -05:00
test fix(pskr): self-healing follow-up sampler runs for hours with missing HRRR 2026-05-05 18:00:10 -05:00
vendor deps: bump oban 2.22.0 → 2.22.1, oban_web (vendored) 2.12.1 → 2.12.3 2026-04-30 09:34:45 -05:00
.credo.exs credo 2026-04-12 10:26:53 -05:00
.dockerignore Optimize Dockerfile layer caching 2026-04-01 10:32:56 -05:00
.formatter.exs initial 2026-03-28 11:28:47 -05:00
.gitignore feat(ml): add prop.compare task for algorithm-vs-ML-vs-reality calibration 2026-04-28 14:38:02 -05:00
.tool-versions chore: pin erlang 28.5 and elixir 1.19.5-otp-28 2026-05-05 16:39:52 -05:00
AGENTS.md initial 2026-03-28 11:28:47 -05:00
algo.md feat(weather): /weather-ca endpoint shows HRDPS-only Canadian data 2026-04-30 12:08:48 -05:00
app.json Migrate healthchecks from CHECKS to app.json 2026-04-04 11:24:56 -05:00
bugs.md fix: April 2026 codebase review — address 13 bugs across propagation chain 2026-04-25 10:52:51 -05:00
CLAUDE.md perf+test: cache nearest_hrrr per cell, batch pg_inherits, +property tests 2026-05-05 17:40:13 -05:00
Dockerfile chore(ci): host prop-base on codeberg.org 2026-05-05 10:22:31 -05:00
Dockerfile.base ops: trigger base image rebuild after registry blob loss 2026-05-04 09:27:04 -05:00
elevation.md add elevation findings 2026-03-29 16:23:03 -05:00
LICENSE Add GPLv3 license 2026-04-23 13:57:07 -05:00
mix.exs refactor(pskr): drop emqtt, talk MQTT 3.1.1 over :gen_tcp directly 2026-05-04 09:52:34 -05:00
mix.lock chore(deps): bump hex deps 2026-05-05 12:10:53 -05:00
prediction.md HRRR forecast hours (f00-f18) with timeline map UI 2026-03-31 16:44:47 -05:00
README.md initial 2026-03-28 11:28:47 -05:00
tail_logs.sh Add type filter to backfill enqueue 2026-04-06 11:42:26 -05:00
updates.md Update seasonal scores from sounding data, document commercial link patterns 2026-04-07 11:45:44 -05:00

Microwaveprop

To start your Phoenix server:

  • Run mix setup to install and setup dependencies
  • Start Phoenix endpoint with mix phx.server or inside IEx with iex -S mix phx.server

Now you can visit localhost:4000 from your browser.

Ready to run in production? Please check our deployment guides.

Learn more