No description
Find a file
Graham McIntire 46c2d84e5c
feat(rust/hrdps): prop-grid-rs HRDPS branch
Stages 4-5 of the HRDPS plan. Lands the Rust forecast-hour pipeline
for source='hrdps' grid_tasks rows.

What ships:

- `hrdps_fetcher.rs` — sibling of fetcher.rs for ECCC's MSC Datamart
  shape: date-prefixed URLs, one variable per GRIB2 file, concurrent
  fetch + byte-concat into a single multi-record blob. wgrib2 reads
  multi-record files natively so the downstream decoder path is
  unchanged. Mirrors lib/microwaveprop/weather/hrdps_client.ex.
- `grid::hrdps_only_points()` + `grid::hrdps_grid_spec()` — Canadian
  cells (49-60°N, -141 to -52°W) minus the HRRR overlap. Disjoint
  from conus_points by construction.
- `db::TaskSource` enum + `source` column on ClaimedTask. claim_next
  surfaces source for forecast lane dispatch; claim_next_analysis
  filters to source='hrrr' only (HRDPS analysis path is not yet
  ported — would need native-duct + NEXRAD + commercial merges that
  Rust doesn't have for HRDPS).
- `pipeline::run_chain_step_hrdps` — fetch combined blob, decode with
  HRDPS grid spec, drop HRRR-overlap cells via a HashSet of
  hrdps_only_points, back-fill DPT from DEPR (HRDPS publishes DEPR
  as primary), score every band, write `<band>/<iso>.hrdps.prop`.
  Skips per-valid_time profile + scalar artifacts since those would
  clobber HRRR's at the same valid_time — surfacing HRDPS on /weather
  is a separate stage.
- worker.rs dispatches forecast lane on (kind, source) — Hrrr →
  run_chain_step, Hrdps → run_chain_step_hrdps. Analysis stays
  HRRR-only. Worker constructs an HrdpsClient alongside HrrrClient.
- `scores_file::write_atomic_hrdps` writes to `.hrdps.prop` with the
  Canadian grid spec via the new encode_with_spec. Coexists with the
  HRRR `.prop` file for the same (band, valid_time).

163 unit tests pass; backfill_dpt_from_depr handles surface and
pressure-level levels with no double-fill when DPT exists.
2026-04-29 17:29:16 -05:00
.forgejo/workflows ci(grid-rs): surface docker daemon diagnostics on wait-step failure 2026-04-20 08:41:53 -05:00
.github Add contact edit approval system with admin review queue 2026-04-11 16:15:49 -05:00
assets perf(map): /scores/cells binary endpoint, client-side fetch + band/time prefetch 2026-04-29 14:27:20 -05:00
bin Fix livebook path resolution in bin/notebook 2026-04-07 11:15:49 -05:00
config feat(hrdps): grid_tasks source column, Canadian mask, HrdpsGridWorker 2026-04-29 17:13:00 -05:00
docs docs(hrdps): record stage progress + dormant scaffolding state 2026-04-29 17:13:08 -05:00
k8s ops(prop): bump preStop sleep to 25s for cloudflared connection drain 2026-04-29 14:17:40 -05:00
lib feat(hrdps): grid_tasks source column, Canadian mask, HrdpsGridWorker 2026-04-29 17:13:00 -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(hrdps): grid_tasks source column, Canadian mask, HrdpsGridWorker 2026-04-29 17:13:00 -05:00
rel Add Erlang clustering via libcluster and expose LiveDashboard 2026-04-06 09:46:48 -05:00
rust/prop_grid_rs feat(rust/hrdps): prop-grid-rs HRDPS branch 2026-04-29 17:29:16 -05:00
scripts chore: ignore python __pycache__ across the tree 2026-04-25 16:03:01 -05:00
test feat(hrdps): grid_tasks source column, Canadian mask, HrdpsGridWorker 2026-04-29 17:13:00 -05:00
vendor deps: bump oban 2.21.1 → 2.22.0, swoosh 1.25.0 → 1.25.1, oban_pro 1.6.13 → 1.6.14 2026-04-29 12:19:49 -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 update deps 2026-04-11 12:03:43 -05:00
AGENTS.md initial 2026-03-28 11:28:47 -05:00
algo.md feat(scorer): retire HPBL multiplier and native-duct 1.15× boost 2026-04-25 12:42:56 -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 docs(hrdps): record stage progress + dormant scaffolding state 2026-04-29 17:13:08 -05:00
Dockerfile feat(rover): add canopy clutter penalty + Canopy.BulkFetch downloader 2026-04-26 12:57:50 -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 feat(rover): score per-station terrain clearance from SRTM path samples 2026-04-25 17:29:29 -05:00
mix.lock deps: bump oban 2.21.1 → 2.22.0, swoosh 1.25.0 → 1.25.1, oban_pro 1.6.13 → 1.6.14 2026-04-29 12:19:49 -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