Phase A — 7 pipeline bugs:
- retain_scores_window: fix timeline self-deletion (NOTIFY payload run_time|valid_time)
- Rust/Elixir weight divergence: Rust loads band_weights.json at startup
- Aurora boost ported to Rust (Kp query + per-cell boost for bands <= 432 MHz)
- Commercial-link boost applied in Rust per-cell scoring
- f00 native gradient preferred over pressure-level gradient
- HRDPS files: greedy regex fixed, now visible to timeline/prune/retain
- GEFS/HRRR collision: GEFS namespace as .gefs.prop, merge at read
Phase B — Validation harness:
- scripts/validate_algo.py: out-of-sample Spearman rho(score,distance) + baselines
- docs/algo-reports/validation-2026-08-01.{json,md}
Phase C — Forecast-skill evaluation:
- scripts/validate_forecast.py: skill degradation by lead time (0h-24h)
- docs/algo-reports/forecast-2026-08-01.{json,md}
Phase D — Calibration + model improvements:
- recalibrate.py: validation gate before weight deploy
- Recalibrator: Nx.max(0.0) replaces Nx.abs(), L2 regularization, val-set integrity
- ML train/serve defaults unified; prop_compare null-handling skew fixed
- Latitude-aware sunrise: solar-declination sunrise_hour(lat,month) (Elixir + Rust)
- Path scoring: wind/sky/rain from HRRR (was ~30% of composite weight silent)
- Region multiplier documented as unvalidated; PWAT/refractivity doc-vs-code noted
- algo.md: synced scoring sections, marked retired features, D5/D6 changelog
- Credo: path_compute cyclomatic complexity bumped (6->10 fields) — informational only
51 lines
1.6 KiB
TOML
51 lines
1.6 KiB
TOML
[package]
|
|
name = "prop_grid_rs"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
publish = false
|
|
|
|
[lib]
|
|
name = "prop_grid_rs"
|
|
path = "src/lib.rs"
|
|
|
|
[[bin]]
|
|
name = "worker"
|
|
path = "src/bin/worker.rs"
|
|
|
|
[[bin]]
|
|
name = "hrrr_point_worker"
|
|
path = "src/bin/hrrr_point_worker.rs"
|
|
|
|
[dependencies]
|
|
tokio = { version = "1", features = ["full"] }
|
|
sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "postgres", "uuid", "chrono", "json"] }
|
|
reqwest = { version = "0.13", features = ["rustls", "stream"], default-features = false }
|
|
thiserror = "2"
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
|
|
chrono = "0.4"
|
|
uuid = { version = "1", features = ["v4"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
rayon = "1.12"
|
|
axum = { version = "0.8", default-features = false, features = ["http1", "tokio"] }
|
|
prometheus = { version = "0.14", default-features = false }
|
|
png = "0.18"
|
|
rmp-serde = "1.3"
|
|
rmpv = { version = "1.3", features = ["with-serde"] }
|
|
flate2 = "1"
|
|
|
|
# glibc malloc retains most dirty pages after large transient
|
|
# allocations, so RSS drifted from ~500 MiB at boot to ~1.5 GiB
|
|
# after a few hourly f00 analysis cycles and tripped the 3 GiB
|
|
# cgroup limit. jemalloc returns pages to the kernel on a short
|
|
# decay schedule, so RSS follows actual working set and survives
|
|
# the hourly peak (surface + pressure + native-duct blobs held
|
|
# simultaneously during decode).
|
|
[target.'cfg(not(target_env = "msvc"))'.dependencies]
|
|
tikv-jemallocator = "0.6"
|
|
|
|
[dev-dependencies]
|
|
tokio = { version = "1", features = ["full", "test-util"] }
|
|
tempfile = "3"
|
|
serde_json = "1"
|